]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
findmnt: make --target usable with bind mounts
authorKarel Zak <kzak@redhat.com>
Mon, 14 Jan 2013 13:50:50 +0000 (14:50 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 14 Jan 2013 13:50:50 +0000 (14:50 +0100)
The --target <non-mount-point> 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 <kzak@redhat.com>
misc-utils/findmnt.c

index fed1a3c205a3f88a790b3ec689bc848f9cf93851..358082a910600f77c039954593aa1255f2f8f3e8 100644 (file)
@@ -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
         */