summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQu Wenruo <quwenruo@cn.fujitsu.com>2014-09-04 10:27:48 +0800
committerDavid Sterba <dsterba@suse.cz>2014-09-14 19:06:10 +0200
commit6a47725a6fb8a463dd60611800222c7297195588 (patch)
tree4e47572ab48693c24b467c7da597389418812884
parent24f5a651d94678746dc8a72f28d49c36e33051e7 (diff)
btrfs-progs: fix find_mount_root() to handle duplicated mount point correctly
Original find_mount_root() will use the first mount point match and return it. It was OK until the following commit, which will also check the fstype: de22c28ef31d9721606ba059 btrfs-progs: Check fstype in find_mount_root() With fstype check, we should check the last match, not only the first one. Or the following mount will not pass the find_mount_root(): /dev/sdc on /mnt/test type ext4 (rw,relatime,data=ordered) /dev/sdb on /mnt/test type btrfs (rw,relatime,space_cache) This patch will use the last match to do the fstype check. Reported-by: Remco Hosman <remco@yerf-it.nl> Signed-off-by: Remco Hosman <remco@yerf-it.nl> Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Reviewed-by: Omar Sandoval <osandov@osandov.com> Signed-off-by: David Sterba <dsterba@suse.cz>
-rw-r--r--utils.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/utils.c b/utils.c
index f0a3c070..c4f2a00c 100644
--- a/utils.c
+++ b/utils.c
@@ -2359,8 +2359,8 @@ int find_mount_root(const char *path, char **mount_root)
while ((ent = getmntent(mnttab))) {
len = strlen(ent->mnt_dir);
if (strncmp(ent->mnt_dir, path, len) == 0) {
- /* match found */
- if (longest_matchlen < len) {
+ /* match found and use the latest match */
+ if (longest_matchlen <= len) {
free(longest_match);
longest_matchlen = len;
longest_match = strdup(ent->mnt_dir);