]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
findmnt: add PROPAGATION column
authorKarel Zak <kzak@redhat.com>
Thu, 10 Jan 2013 14:59:16 +0000 (15:59 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 10 Jan 2013 14:59:16 +0000 (15:59 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
misc-utils/findmnt.c

index 758a15e693d1f7eb5bcbea13051e6f8430813194..fed1a3c205a3f88a790b3ec689bc848f9cf93851 100644 (file)
@@ -82,6 +82,7 @@ enum {
        COL_TID,
        COL_ID,
        COL_OPT_FIELDS,
+       COL_PROPAGATION,
 
        FINDMNT_NCOLUMNS
 };
@@ -126,6 +127,7 @@ static struct colinfo infos[FINDMNT_NCOLUMNS] = {
        [COL_TID]          = { "TID",             4, TT_FL_RIGHT, N_("task ID") },
        [COL_ID]           = { "ID",              2, TT_FL_RIGHT, N_("mount ID") },
        [COL_OPT_FIELDS]   = { "OPT-FIELDS",   0.10, TT_FL_TRUNC, N_("optional mount fields") },
+       [COL_PROPAGATION]  = { "PROPAGATION",  0.10, 0, N_("VFS propagation flags") }
 };
 
 /* global flags */
@@ -492,6 +494,29 @@ static const char *get_data(struct libmnt_fs *fs, int num)
                        str = tmp;
                }
                break;
+       case COL_PROPAGATION:
+               if (mnt_fs_is_kernel(fs)) {
+                       unsigned long fl = 0;
+                       char *n = NULL;
+
+                       if (mnt_fs_get_propagation(fs, &fl) != 0)
+                               break;
+
+                       n = xstrdup((fl & MS_SHARED) ? "shared" : "private");
+
+                       if (fl & MS_SLAVE) {
+                               xasprintf(&tmp, "%s,slave", n);
+                               free(n);
+                               n = tmp;
+                       }
+                       if (fl & MS_UNBINDABLE) {
+                               xasprintf(&tmp, "%s,unbindable", n);
+                               free(n);
+                               n = tmp;
+                       }
+                       str = n;
+               }
+               break;
        default:
                break;
        }