From: Karel Zak Date: Mon, 14 Jan 2013 13:50:50 +0000 (+0100) Subject: findmnt: make --target usable with bind mounts X-Git-Tag: v2.23-rc1~353 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3e373967ec06d246ffede78fd78d078df3b770ff;p=thirdparty%2Futil-linux.git findmnt: make --target usable with bind mounts The --target functionality should be enabled only if previous regular search found nothing to avoid collisions with bind mounts, because to detect mountpoint we use traditional child / parent stat.st_dev comparison which does not work for bind mounts (--bind /A /A). Signed-off-by: Karel Zak --- diff --git a/misc-utils/findmnt.c b/misc-utils/findmnt.c index fed1a3c205..358082a910 100644 --- a/misc-utils/findmnt.c +++ b/misc-utils/findmnt.c @@ -1335,13 +1335,6 @@ int main(int argc, char *argv[]) } mnt_table_set_cache(tb, cache); - if (tabtype == TABTYPE_KERNEL - && (flags & FL_NOSWAPMATCH) - && get_match(COL_TARGET)) - /* - * enable extra functionality for target match - */ - enable_extra_target_match(); /* * initialize output formatting (tt.h) @@ -1381,10 +1374,24 @@ int main(int argc, char *argv[]) } else if ((tt_flags & TT_FL_TREE) && is_listall_mode()) /* whole tree */ rc = create_treenode(tt, tb, NULL, NULL); - else + else { /* whole lits of sub-tree */ rc = add_matching_lines(tb, tt, direction); + if (rc != 0 + && tabtype == TABTYPE_KERNEL + && (flags & FL_NOSWAPMATCH) + && get_match(COL_TARGET)) { + /* + * Found nothing, maybe the --target is regular file, + * try it again with extra functionality for target + * match + */ + enable_extra_target_match(); + rc = add_matching_lines(tb, tt, direction); + } + } + /* * Print the output table for non-poll modes */