)]}'
{
  "log": [
    {
      "commit": "98793265b429a3f0b3f1750e74d67cd4d740d162",
      "tree": "b0bd717673f0c21845cf053f3fb6b75d42530af5",
      "parents": [
        "b4a133da2eaccb844a7beaef16ffd9c76a0d21d3",
        "bd1b2a555952d959f47169056fca05acf7eff81f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 08 13:21:22 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 08 13:21:22 2012 -0800"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (53 commits)\n  Kconfig: acpi: Fix typo in comment.\n  misc latin1 to utf8 conversions\n  devres: Fix a typo in devm_kfree comment\n  btrfs: free-space-cache.c: remove extra semicolon.\n  fat: Spelling s/obsolate/obsolete/g\n  SCSI, pmcraid: Fix spelling error in a pmcraid_err() call\n  tools/power turbostat: update fields in manpage\n  mac80211: drop spelling fix\n  types.h: fix comment spelling for \u0027architectures\u0027\n  typo fixes: aera -\u003e area, exntension -\u003e extension\n  devices.txt: Fix typo of \u0027VMware\u0027.\n  sis900: Fix enum typo \u0027sis900_rx_bufer_status\u0027\n  decompress_bunzip2: remove invalid vi modeline\n  treewide: Fix comment and string typo \u0027bufer\u0027\n  hyper-v: Update MAINTAINERS\n  treewide: Fix typos in various parts of the kernel, and fix some comments.\n  clockevents: drop unknown Kconfig symbol GENERIC_CLOCKEVENTS_MIGR\n  gpio: Kconfig: drop unknown symbol \u0027CS5535_GPIO\u0027\n  leds: Kconfig: Fix typo \u0027D2NET_V2\u0027\n  sound: Kconfig: drop unknown symbol ARCH_CLPS7500\n  ...\n\nFix up trivial conflicts in arch/powerpc/platforms/40x/Kconfig (some new\nkconfig additions, close to removed commented-out old ones)\n"
    },
    {
      "commit": "8e8b87964bc8dc5c14b6543fc933b7725f07d3ac",
      "tree": "9a14c135741f3a8ba960ff97f060a58597604a6d",
      "parents": [
        "7ada4db88634429f4da690ad1c4eb73c93085f0c"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Nov 21 12:11:33 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 06 23:20:13 2012 -0500"
      },
      "message": "vfs: prevent remount read-only if pending removes\n\nIf there are any inodes on the super block that have been unlinked\n(i_nlink \u003d\u003d 0) but have not yet been deleted then prevent the\nremounting the super block read-only.\n\nReported-by: Toshiyuki Okajima \u003ctoshi.okajima@jp.fujitsu.com\u003e\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nTested-by: Toshiyuki Okajima \u003ctoshi.okajima@jp.fujitsu.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4ed5e82fe77f4147cf386327c9a63a2dd7eff518",
      "tree": "f4eaeefaf5d293014457892ac31f878eece07331",
      "parents": [
        "39f7c4db1d2d9e2e2a90abdf34811783089d217d"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Nov 21 12:11:31 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 06 23:20:12 2012 -0500"
      },
      "message": "vfs: protect remounting superblock read-only\n\nCurrently remouting superblock read-only is racy in a major way.\n\nWith the per mount read-only infrastructure it is now possible to\nprevent most races, which this patch attempts.\n\nBefore starting the remount read-only, iterate through all mounts\nbelonging to the superblock and if none of them have any pending\nwrites, set sb-\u003es_readonly_remount.  This indicates that remount is in\nprogress and no further write requests are allowed.  If the remount\nsucceeds set MS_RDONLY and reset s_readonly_remount.\n\nIf the remounting is unsuccessful just reset s_readonly_remount.\nThis can result in transient EROFS errors, despite the fact the\nremount failed.  Unfortunately hodling off writes is difficult as\nremount itself may touch the filesystem (e.g. through load_nls())\nwhich would deadlock.\n\nA later patch deals with delayed writes due to nlink going to zero.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nTested-by: Toshiyuki Okajima \u003ctoshi.okajima@jp.fujitsu.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "39f7c4db1d2d9e2e2a90abdf34811783089d217d",
      "tree": "cbc3496ce21e26b5891bb4c4d4155853317ddfb3",
      "parents": [
        "34c80b1d93e6e20ca9dea0baf583a5b5510d92d4"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Nov 21 12:11:30 2011 +0100"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 06 23:20:12 2012 -0500"
      },
      "message": "vfs: keep list of mounts for each superblock\n\nKeep track of vfsmounts belonging to a superblock.  List is protected\nby vfsmount_lock.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nTested-by: Toshiyuki Okajima \u003ctoshi.okajima@jp.fujitsu.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "34c80b1d93e6e20ca9dea0baf583a5b5510d92d4",
      "tree": "7dcbf0a4e09464247e6992c8f44fcc872867bd3a",
      "parents": [
        "a6322de67b58a00e3a783ad9c87c2a11b2d67b47"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Dec 08 21:32:45 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 06 23:19:54 2012 -0500"
      },
      "message": "vfs: switch -\u003eshow_options() to struct dentry *\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d10577a8d86a0c735488d66d32289a6d66bcfa20",
      "tree": "a38b3606fb863064eb89166f6a3115f7c5eccfd7",
      "parents": [
        "be08d6d260b6e7eb346162a1081cdf5f94fda569"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Dec 07 13:06:11 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:13 2012 -0500"
      },
      "message": "vfs: trim includes a bit\n\n[folded fix for missing magic.h from Tetsuo Handa]\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "be08d6d260b6e7eb346162a1081cdf5f94fda569",
      "tree": "fde11d2b2415a1a118e0da4a62c5bd8e635cb582",
      "parents": [
        "0226f4923f6c9b40cfa1c1c1b19a6ac6b3924ead"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Dec 06 13:32:36 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:13 2012 -0500"
      },
      "message": "switch mnt_namespace -\u003eroot to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0226f4923f6c9b40cfa1c1c1b19a6ac6b3924ead",
      "tree": "cb0f26e6329e2222a9f3b8f85887f63980a01d37",
      "parents": [
        "3a2393d71d77b034669d495b49c212a87e04abdc"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Dec 06 12:21:54 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:13 2012 -0500"
      },
      "message": "vfs: take /proc/*/mounts and friends to fs/proc_namespace.c\n\nrationale: that stuff is far tighter bound to fs/namespace.c than to\nthe guts of procfs proper.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3a2393d71d77b034669d495b49c212a87e04abdc",
      "tree": "c113a99f76ae612d8da3a6ba95c0c6896dd504c4",
      "parents": [
        "909b0a88ef2dc86bd5d2223edf48eb30c865cb69"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 03:19:09 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:12 2012 -0500"
      },
      "message": "vfs: opencode mntget() mnt_set_mountpoint()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "909b0a88ef2dc86bd5d2223edf48eb30c865cb69",
      "tree": "b30a115b04e93433a8a9360d9cea0c9ec52cb484",
      "parents": [
        "c63181e6b6df89176b3984c6977bb5ec03d0df23"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 03:06:56 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:12 2012 -0500"
      },
      "message": "vfs: spread struct mount - remaining argument of next_mnt()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c63181e6b6df89176b3984c6977bb5ec03d0df23",
      "tree": "2e6056a7d85e8df9dbf95e6fa4291f76a714c7c8",
      "parents": [
        "52ba1621de1479ce7e52b6d167860462e483313c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 02:35:16 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:12 2012 -0500"
      },
      "message": "vfs: move fsnotify junk to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "52ba1621de1479ce7e52b6d167860462e483313c",
      "tree": "1609df395c437e8d2c0da30cace9a2b343ca0ad8",
      "parents": [
        "1a4eeaf2a8c07404e2d1c3ff99b393fd4c207170"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 02:25:17 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:11 2012 -0500"
      },
      "message": "vfs: move mnt_devname\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1a4eeaf2a8c07404e2d1c3ff99b393fd4c207170",
      "tree": "dd67d87c51ac0338432faa5f6e6d28d56d724baa",
      "parents": [
        "fc7be130c7e91cf693d4bc2d9b11f08a5a4893d0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 02:19:55 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:11 2012 -0500"
      },
      "message": "vfs: move mnt_list to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "fc7be130c7e91cf693d4bc2d9b11f08a5a4893d0",
      "tree": "8df38871ffccd0e977702d61691967c184fabecc",
      "parents": [
        "863d684f946eb240c7dd57d265d88315950ca5cc"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 01:05:37 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:11 2012 -0500"
      },
      "message": "vfs: switch pnode.h macros to struct mount *\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "863d684f946eb240c7dd57d265d88315950ca5cc",
      "tree": "99b3c84299b2e273465f023bcbcc16a231529260",
      "parents": [
        "15169fe784a9846b24cdb0840329d41aebc23249"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 00:57:42 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:10 2012 -0500"
      },
      "message": "vfs: move the rest of int fields to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "15169fe784a9846b24cdb0840329d41aebc23249",
      "tree": "ef9e843dcd333204fd7fdca6d21fe96d0647da80",
      "parents": [
        "143c8c91cee7efdd732ec5f61b3471fc46192f20"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 00:50:41 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:10 2012 -0500"
      },
      "message": "vfs: mnt_id/mnt_group_id moved\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "143c8c91cee7efdd732ec5f61b3471fc46192f20",
      "tree": "dd3e9a9b8b88f1876a258fe1bf274532aeb72a62",
      "parents": [
        "900148dcac6bc93ca688d64a7f9a9f8d706e0d1c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 00:46:35 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:09 2012 -0500"
      },
      "message": "vfs: mnt_ns moved to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "900148dcac6bc93ca688d64a7f9a9f8d706e0d1c",
      "tree": "69077133e37e105fc88873429f33469c67a840c6",
      "parents": [
        "95bc5f25c10fcdf02c53af1eda987f58d0bc377c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 00:33:11 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:09 2012 -0500"
      },
      "message": "vfs: spread struct mount - mntput_no_expire\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "95bc5f25c10fcdf02c53af1eda987f58d0bc377c",
      "tree": "2219763ee8543e8c9a492796771bf0e8cbe44df0",
      "parents": [
        "6776db3d32b2a59198ec7ac6d32be0b9fdbd8a68"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 00:30:56 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:09 2012 -0500"
      },
      "message": "vfs: spread struct mount - do_add_mount and graft_tree\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6776db3d32b2a59198ec7ac6d32be0b9fdbd8a68",
      "tree": "d293d993f41bdea79eaeb51f404e9837a49cb039",
      "parents": [
        "32301920f44a9334f57dd94bebfc6e593b99ad47"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 00:22:05 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:08 2012 -0500"
      },
      "message": "vfs: take mnt_share/mnt_slave/mnt_slave_list and mnt_expire to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "32301920f44a9334f57dd94bebfc6e593b99ad47",
      "tree": "c8b7d1aa15244c30b5820aea30022609a12dacec",
      "parents": [
        "d10e8def07fc87488c396d2eff2c26c43bb541dd"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 00:10:28 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:08 2012 -0500"
      },
      "message": "vfs: and now we can make -\u003emnt_master point to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d10e8def07fc87488c396d2eff2c26c43bb541dd",
      "tree": "d0ad0d4c47838a096aafac353e206861cb6d62c1",
      "parents": [
        "14cf1fa8f54353d9caf6174c1e4280c8c4dcfd7a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 00:07:16 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:08 2012 -0500"
      },
      "message": "vfs: take mnt_master to struct mount\n\nmake IS_MNT_SLAVE take struct mount * at the same time\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "14cf1fa8f54353d9caf6174c1e4280c8c4dcfd7a",
      "tree": "1a5fbc1f94f6d8d19492b26ab05b71e8e2d108a2",
      "parents": [
        "a8d56d8e4fa0cb9a023834363f8d79415d277a1d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Nov 25 00:01:17 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:07 2012 -0500"
      },
      "message": "vfs: spread struct mount - remaining argument of mnt_set_mountpoint()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a8d56d8e4fa0cb9a023834363f8d79415d277a1d",
      "tree": "f58aa30dfbb2d50b06ebd2ead6e70270fdac3140",
      "parents": [
        "c937135d98f2306157fb8d8a03a4d8b0f1e3b511"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 23:59:29 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:07 2012 -0500"
      },
      "message": "vfs: spread struct mount - propagate_mnt()\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6fc7871fed915914ef441efbe0f9a7c3d0f3bff1",
      "tree": "cbbab1aaa3c5f86d5253914a4720b1acf0d109e4",
      "parents": [
        "6b41d536f7c84e7cb1c1462073150277e46f6ea8"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 23:35:54 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:06 2012 -0500"
      },
      "message": "vfs: spread struct mount - get_dominating_id / do_make_slave\n\nnext pile of horrors, similar to mnt_parent one; this time it\u0027s\nmnt_master.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6b41d536f7c84e7cb1c1462073150277e46f6ea8",
      "tree": "fd75f1d76947bdfc42772ff3eef4b60977162840",
      "parents": [
        "68e8a9feab251f9d3c8fd9e9893c97843bcd4bd0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 23:24:33 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:06 2012 -0500"
      },
      "message": "vfs: take mnt_child/mnt_mounts to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "68e8a9feab251f9d3c8fd9e9893c97843bcd4bd0",
      "tree": "22fac61a982587cd53ccf05513fbe4ffe60c860d",
      "parents": [
        "83adc7532229f1909cf37c429780f02f06fe05ee"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:53:09 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:06 2012 -0500"
      },
      "message": "vfs: all counters taken to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "83adc7532229f1909cf37c429780f02f06fe05ee",
      "tree": "7f7a36fea3f903c7f9c3f3860bc395a2ba7ad806",
      "parents": [
        "a73324da7af4052e1d1ddec6a5980f552420e58b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:37:54 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:05 2012 -0500"
      },
      "message": "vfs: spread struct mount - work with counters\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "a73324da7af4052e1d1ddec6a5980f552420e58b",
      "tree": "65c119bf3bb852c4298aeb24b906dc3a5be7520a",
      "parents": [
        "0714a533805a0f8ebfc6fdb6bda9f129b8c7c6d7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:25:07 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:05 2012 -0500"
      },
      "message": "vfs: move mnt_mountpoint to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0714a533805a0f8ebfc6fdb6bda9f129b8c7c6d7",
      "tree": "7f34ceedc12c4a680ca3509562b09ec441a0954f",
      "parents": [
        "3376f34fff5be9954fd9a9c4fd68f4a0a36d480e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:19:58 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:05 2012 -0500"
      },
      "message": "vfs: now it can be done - make mnt_parent point to struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "3376f34fff5be9954fd9a9c4fd68f4a0a36d480e",
      "tree": "22a5995e66efd92cc394186c56deb082e4521440",
      "parents": [
        "643822b41e5e0f133438883b0be574cdaf168a2a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:05:19 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:04 2012 -0500"
      },
      "message": "vfs: mnt_parent moved to struct mount\n\nthe second victim...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "643822b41e5e0f133438883b0be574cdaf168a2a",
      "tree": "1b9bbeace5c1078ae6e893e2f826b724411d3a07",
      "parents": [
        "676da58df740f325034b8641311413c2393588e1"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 22:00:28 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:04 2012 -0500"
      },
      "message": "vfs: spread struct mount - is_path_reachable\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "676da58df740f325034b8641311413c2393588e1",
      "tree": "88d1e385d368d73c7b1284da2fc46516879a867d",
      "parents": [
        "1ab597386205f8dc757cf8750465502aeae65154"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 21:47:05 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:04 2012 -0500"
      },
      "message": "vfs: spread struct mount - mnt_has_parent\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1ab597386205f8dc757cf8750465502aeae65154",
      "tree": "69a8ad9eeafe3fd358151c26002cbab6d2215f28",
      "parents": [
        "44d964d609c7c11b330a3d1caf30767fa13c7be3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 21:35:16 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:03 2012 -0500"
      },
      "message": "vfs: spread struct mount - do_umount/propagate_mount_busy\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "44d964d609c7c11b330a3d1caf30767fa13c7be3",
      "tree": "c16c93095c8662826ac678730bf8286d96dfb781",
      "parents": [
        "87129cc0e3fcd89a1db3e99d62dc710e05749f77"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 21:28:22 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:03 2012 -0500"
      },
      "message": "vfs: spread struct mount mnt_set_mountpoint child argument\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "87129cc0e3fcd89a1db3e99d62dc710e05749f77",
      "tree": "0855a81e51db9f4054d54952f974bc726730f39d",
      "parents": [
        "692afc312b38c9367a1125927941d33ab2ce852a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 21:24:27 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:03 2012 -0500"
      },
      "message": "vfs: spread struct mount - clone_mnt/copy_tree argument\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "692afc312b38c9367a1125927941d33ab2ce852a",
      "tree": "8a3b6311b46de997f008fac47d29aab0e63f32b0",
      "parents": [
        "761d5c38eb3d8e2aa7394726dccab245bfe2f41c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 21:15:14 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:02 2012 -0500"
      },
      "message": "vfs: spread struct mount - shrink_submounts/select_submounts\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "761d5c38eb3d8e2aa7394726dccab245bfe2f41c",
      "tree": "3fea2388dc65e41a2bfdd987e61984b5af47c98a",
      "parents": [
        "1b8e5564b9d34cbeb3047dd2be8ec9cd5e2785e2"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 21:07:43 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:02 2012 -0500"
      },
      "message": "vfs: spread struct mount - umount_tree argument\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "1b8e5564b9d34cbeb3047dd2be8ec9cd5e2785e2",
      "tree": "61633a9593b4d1c337d7182aee2e2d2af9e9f299",
      "parents": [
        "d5e50f74dd2ed6dd1bb4bf6fe58e5a7de4b77953"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 21:01:32 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:02 2012 -0500"
      },
      "message": "vfs: the first spoils - mnt_hash moved\n\ntaken out of struct vfsmount into struct mount\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "d5e50f74dd2ed6dd1bb4bf6fe58e5a7de4b77953",
      "tree": "b0b9d829ec542a2b972eef0f69f6f54443228ac3",
      "parents": [
        "cb338d06e9716c92d5a7855e7c67b8f111ced722"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 20:58:57 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:01 2012 -0500"
      },
      "message": "vfs: spread struct mount to remaining users of -\u003emnt_hash\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cb338d06e9716c92d5a7855e7c67b8f111ced722",
      "tree": "6315dfbd50fd6ba44ad468405dd4e7fe21b53618",
      "parents": [
        "0f0afb1dcf01afc44581b3c0da251ac07dfb6e4a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 20:55:08 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:01 2012 -0500"
      },
      "message": "vfs: spread struct mount - clone_mnt/copy_tree result\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0f0afb1dcf01afc44581b3c0da251ac07dfb6e4a",
      "tree": "878f721ef46398d7af7f276e2f8ba9737c6dd5dd",
      "parents": [
        "b105e270b4e9419f4b9536f6862b1b32985bc9d2"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 20:43:10 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:01 2012 -0500"
      },
      "message": "vfs: spread struct mount - change_mnt_propagation/set_mnt_shared\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b105e270b4e9419f4b9536f6862b1b32985bc9d2",
      "tree": "41c2d66b9ef8a1f26b99da2876c3b6f9ef519fc7",
      "parents": [
        "cbbe362cd68441edf1ebbafeea1c8e09cce4a7f9"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 20:38:33 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:00 2012 -0500"
      },
      "message": "vfs: spread struct mount - alloc_vfsmnt/free_vfsmnt/mnt_alloc_id/mnt_free_id\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cbbe362cd68441edf1ebbafeea1c8e09cce4a7f9",
      "tree": "4d15466ee85a8a57d330bc3af53854f5d108bc23",
      "parents": [
        "0fb54e50562d8d6f4b1a4517ba9783a9c7c5c2b7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 20:01:19 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:00 2012 -0500"
      },
      "message": "vfs: spread struct mount - tree_contains_unbindable\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0fb54e50562d8d6f4b1a4517ba9783a9c7c5c2b7",
      "tree": "5cb0c780208f837b004b7cc0be18e6dff3839246",
      "parents": [
        "4b8b21f4fe16ee15eec5c69ea5fb41b30e428e59"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 19:59:16 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:57:00 2012 -0500"
      },
      "message": "vfs: spread struct mount - attach_recursive_mnt\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4b8b21f4fe16ee15eec5c69ea5fb41b30e428e59",
      "tree": "9e023742369b09578f6510cf6cce36d7529b6854",
      "parents": [
        "4b2619a571f9fbb46649f968eea284103734f718"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 19:54:23 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:56:59 2012 -0500"
      },
      "message": "vfs: spread struct mount - mount group id handling\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "4b2619a571f9fbb46649f968eea284103734f718",
      "tree": "041dbe073af6bf96f18de16cb366fed2d336296b",
      "parents": [
        "419148da6e76dd0d379b5ec33c461cee1015322e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 19:47:15 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:56:59 2012 -0500"
      },
      "message": "vfs: spread struct mount - commit_tree\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "419148da6e76dd0d379b5ec33c461cee1015322e",
      "tree": "472aa2dc22174ffd0d62218946c7a91104e37733",
      "parents": [
        "315fc83e56c6998f67af24b49c619f40a6ff2803"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 19:41:16 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:56:59 2012 -0500"
      },
      "message": "vfs: spread struct mount - attach_mnt/detach_mnt\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "315fc83e56c6998f67af24b49c619f40a6ff2803",
      "tree": "5fc9270118d0c4a6a89a619715c5acb0bd881956",
      "parents": [
        "61ef47b1e4ba9f2b939e6772e2f96082df0ae7eb"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 18:57:30 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:56:58 2012 -0500"
      },
      "message": "vfs: spread struct mount - namespace.c internal iterators\n\nnext_mnt() return value, first argument\nskip_mnt_tree() return value and argument\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c71053659e3bb27d44b79da0bb4abf5838c2060a",
      "tree": "59e86cc1602db35ffc2c3991953161f1619706b1",
      "parents": [
        "7d6fec45a5131918b51dcd76da52f2ec86a85be6"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 18:22:03 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:56:58 2012 -0500"
      },
      "message": "vfs: spread struct mount - __lookup_mnt() result\n\nswitch __lookup_mnt() to returning struct mount *; callers adjusted.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7d6fec45a5131918b51dcd76da52f2ec86a85be6",
      "tree": "82af862264cfa176a37c7d9f915806346c8df0bc",
      "parents": [
        "dabe0dc194d5d56d379a8994fff47392744b6491"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 23 12:14:10 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:56:57 2012 -0500"
      },
      "message": "vfs: start hiding vfsmount guts series\n\nAlmost all fields of struct vfsmount are used only by core VFS (and\na fairly small part of it, at that).  The plan: embed struct vfsmount\ninto struct mount, making the latter visible only to core parts of VFS.\nThen move fields from vfsmount to mount, eventually leaving only\nmnt_root/mnt_sb/mnt_flags in struct vfsmount.  Filesystem code still\ngets pointers to struct vfsmount and remains unchanged; all such\npointers go to struct vfsmount embedded into the instances of struct\nmount allocated by fs/namespace.c.  When fs/namespace.c et.al. get\na pointer to vfsmount, they turn it into pointer to mount (using\ncontainer_of) and work with that.\n\nThis is the first part of series; struct mount is introduced,\nallocation switched to using it.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "2a79f17e4a641a2f463cb512cb0ec349844a147b",
      "tree": "8801127310d0a3492941bb284e83393844a19685",
      "parents": [
        "8c9379e972e984d11c2b99121847ba9fa7a0c56c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Dec 09 08:06:57 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:40 2012 -0500"
      },
      "message": "vfs: mnt_drop_write_file()\n\nnew helper (wrapper around mnt_drop_write()) to be used in pair with\nmnt_want_write_file().\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "79e801a906db46cb8efad66c400b01df874b3f12",
      "tree": "2b5c2e414181dd0101d3506166948aac1b34ef7c",
      "parents": [
        "a5166169f9b920cae3c503910cb66a3ac5dd846d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Dec 12 23:07:05 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:39 2012 -0500"
      },
      "message": "vfs: make do_kern_mount() static\n\nthe only user outside of fs/namespace.c has died\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "aa0a4cf0ab4b03db21133a0ba62f558ed1bfcd1d",
      "tree": "141a3bbb532709dcb494e2bce956c778757ed870",
      "parents": [
        "6c449c8dfe30142b3ced5f052e8ed3cce308801a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Nov 24 19:31:36 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:37 2012 -0500"
      },
      "message": "vfs: dentry_reset_mounted() doesn\u0027t use vfsmount argument\n\nlose it\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6c449c8dfe30142b3ced5f052e8ed3cce308801a",
      "tree": "df962c6c88584ea97afb083fa05adb1b865c26e0",
      "parents": [
        "aafd08dad019ecc858b31fb89064f4de623c64f7"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 16 22:01:36 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:37 2012 -0500"
      },
      "message": "unexport put_mnt_ns(), make create_mnt_ns() static outright\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "afac7cba7ed31968a95e181dc25e204e45009ea8",
      "tree": "282cf7da6bc3915093df622ebfcd39f44f6fd1cd",
      "parents": [
        "b2dba1af3c4157040303a76d25216b1713d333d0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 23 19:34:49 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:36 2012 -0500"
      },
      "message": "vfs: more mnt_parent cleanups\n\na) mount --move is checking that -\u003emnt_parent is non-NULL before\nlooking if that parent happens to be shared; -\u003emnt_parent is never\nNULL and it\u0027s not even an misspelled !mnt_has_parent()\n\nb) pivot_root open-codes is_path_reachable(), poorly.\n\nc) so does path_is_under(), while we are at it.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b2dba1af3c4157040303a76d25216b1713d333d0",
      "tree": "c846b1c8074d29b9fc02ef3eeda98631dfd6ee94",
      "parents": [
        "aa9c0e07bb90589186f3b5a0ca97660c2cb50806"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 23 19:26:23 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:36 2012 -0500"
      },
      "message": "vfs: new internal helper: mnt_has_parent(mnt)\n\nvfsmounts have -\u003emnt_parent pointing either to a different vfsmount\nor to itself; it\u0027s never NULL and termination condition in loops\ntraversing the tree towards root is mnt \u003d\u003d mnt-\u003emnt_parent.  At least\none place (see the next patch) is confused about what\u0027s going on;\nlet\u0027s add an explicit helper checking it right way and use it in\nall places where we need it.  Not that there had been too many,\nbut...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "aa9c0e07bb90589186f3b5a0ca97660c2cb50806",
      "tree": "0e2e179f41b2d7566817c0a0e05e03749fa56db0",
      "parents": [
        "bad0dcffc21d17a07dbb83a2bf764f35a57feba5"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 23 19:04:52 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Jan 03 22:52:36 2012 -0500"
      },
      "message": "vfs: kill pointless helpers in namespace.c\n\nmnt_{inc,dec}_count() is not cleaner than doing the corresponding\nmnt_add_count() directly and mnt_set_count() is not used at all.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "02125a826459a6ad142f8d91c5b6357562f96615",
      "tree": "8c9d9860aef93917d9b8cc6d471fe68b58ce7a9d",
      "parents": [
        "5611cc4572e889b62a7b4c72a413536bf6a9c416"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Dec 05 08:43:34 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Dec 06 23:57:18 2011 -0500"
      },
      "message": "fix apparmor dereferencing potentially freed dentry, sanitize __d_path() API\n\n__d_path() API is asking for trouble and in case of apparmor d_namespace_path()\ngetting just that.  The root cause is that when __d_path() misses the root\nit had been told to look for, it stores the location of the most remote ancestor\nin *root.  Without grabbing references.  Sure, at the moment of call it had\nbeen pinned down by what we have in *path.  And if we raced with umount -l, we\ncould have very well stopped at vfsmount/dentry that got freed as soon as\nprepend_path() dropped vfsmount_lock.\n\nIt is safe to compare these pointers with pre-existing (and known to be still\nalive) vfsmount and dentry, as long as all we are asking is \"is it the same\naddress?\".  Dereferencing is not safe and apparmor ended up stepping into\nthat.  d_namespace_path() really wants to examine the place where we stopped,\neven if it\u0027s not connected to our namespace.  As the result, it looked\nat -\u003ed_sb-\u003es_magic of a dentry that might\u0027ve been already freed by that point.\nAll other callers had been careful enough to avoid that, but it\u0027s really\na bad interface - it invites that kind of trouble.\n\nThe fix is fairly straightforward, even though it\u0027s bigger than I\u0027d like:\n\t* prepend_path() root argument becomes const.\n\t* __d_path() is never called with NULL/NULL root.  It was a kludge\nto start with.  Instead, we have an explicit function - d_absolute_root().\nSame as __d_path(), except that it doesn\u0027t get root passed and stops where\nit stops.  apparmor and tomoyo are using it.\n\t* __d_path() returns NULL on path outside of root.  The main\ncaller is show_mountinfo() and that\u0027s precisely what we pass root for - to\nskip those outside chroot jail.  Those who don\u0027t want that can (and do)\nuse d_path().\n\t* __d_path() root argument becomes const.  Everyone agrees, I hope.\n\t* apparmor does *NOT* try to use __d_path() or any of its variants\nwhen it sees that path-\u003emnt is an internal vfsmount.  In that case it\u0027s\ndefinitely not mounted anywhere and dentry_path() is exactly what we want\nthere.  Handling of sysctl()-triggered weirdness is moved to that place.\n\t* if apparmor is asked to do pathname relative to chroot jail\nand __d_path() tells it we it\u0027s not in that jail, the sucker just calls\nd_absolute_path() instead.  That\u0027s the other remaining caller of __d_path(),\nBTW.\n        * seq_path_root() does _NOT_ return -ENAMETOOLONG (it\u0027s stupid anyway -\nthe normal seq_file logics will take care of growing the buffer and redoing\nthe call of -\u003eshow() just fine).  However, if it gets path not reachable\nfrom root, it returns SEQ_SKIP.  The only caller adjusted (i.e. stopped\nignoring the return value as it used to do).\n\nReviewed-by: John Johansen \u003cjohn.johansen@canonical.com\u003e\nACKed-by: John Johansen \u003cjohn.johansen@canonical.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "d31da0f0ba3bc0a827a63879310818c22d9a95be",
      "tree": "d89bbdf299c4cbc37f49a9964b8127f09eedd50b",
      "parents": [
        "b46413367961c2e8bd827e067a231be982aaeee2"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Nov 22 12:31:21 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Nov 22 12:31:21 2011 -0500"
      },
      "message": "mount_subtree() pointless use-after-free\n\nd\u0027oh... we\u0027d carefully pinned mnt-\u003emnt_sb down, dropped mnt and attempt\nto grab s_umount on mnt-\u003emnt_sb.  The trouble is, *mnt might\u0027ve been\noverwritten by now...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ea441d1104cf1efb471fa81bc91e9fd1e6ae29fd",
      "tree": "32b7c4f7c78af47936a604e3f4e13e8e61f834a0",
      "parents": [
        "c13344958780b4046305ee6235d686c846535529"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 16 21:43:59 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 16 22:00:34 2011 -0500"
      },
      "message": "new helper: mount_subtree()\n\ntakes vfsmount and relative path, does lookup within that vfsmount\n(possibly triggering automounts) and returns the result as root\nof subtree suitable for return by -\u003emount() (i.e. a reference to\ndentry and an active reference to its superblock grabbed, superblock\nlocked exclusive).\n\nbtrfs and nfs switched to it instead of open-coding the sucker.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "c13344958780b4046305ee6235d686c846535529",
      "tree": "aed2958283867030aa9e9f742c3fb94c895b2d5c",
      "parents": [
        "8d514bbf37eecf0a3e309284728637816a36764b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 16 16:12:14 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Nov 16 16:12:14 2011 -0500"
      },
      "message": "switch create_mnt_ns() to saner calling conventions, fix double mntput() in nfs\n\nLife is much saner if create_mnt_ns(mnt) drops mnt in case of error...\nSwitch it to such calling conventions, switch callers, fix double mntput() in\nfs/nfs/super.c one.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "2290c0d06d82faee87b1ab2d9d4f7bf81ef64379",
      "tree": "e075e4d5534193f28e6059904f61e5ca03958d3c",
      "parents": [
        "4da669a2e3e5bc70b30a0465f3641528681b5f77",
        "52e4c2a05256cb83cda12f3c2137ab1533344edb"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Sun Nov 13 20:55:35 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Sun Nov 13 20:55:53 2011 +0100"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n\nSync with Linus tree to have 157550ff (\"mtd: add GPMI-NAND driver\nin the config and Makefile\") as I have patch depending on that one.\n"
    },
    {
      "commit": "a127e2d518269ad95364639c293c8a5c1a1cdd3c",
      "tree": "71128f1d5c0a362f934c76a06a96b830fc6cc479",
      "parents": [
        "435a95c5c8b279668cea32014e5c30821581792d"
      ],
      "author": {
        "name": "Kautuk Consul",
        "email": "consul.kautuk@gmail.com",
        "time": "Fri Sep 23 22:08:29 2011 +0530"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Sat Oct 29 21:22:14 2011 +0200"
      },
      "message": "namespace: mnt_want_write: Remove unused label \u0027out\u0027\n\nI was studying the code and I saw that the out label is not being used\nat all so I removed it and its usage from the function.\n\nSigned-off-by: Kautuk Consul \u003cconsul.kautuk@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "a877ee03ac010ded434b77f7831f43cbb1fcc60f",
      "tree": "cb8030a12bb2d0c13ae7d46d918a08e14701a59b",
      "parents": [
        "814e1d25a59662f9552e6dc1305d1df3616fc87e"
      ],
      "author": {
        "name": "Bryan Schumaker",
        "email": "bjschuma@netapp.com",
        "time": "Fri Oct 07 13:41:15 2011 -0400"
      },
      "committer": {
        "name": "Christoph Hellwig",
        "email": "hch@serles.lst.de",
        "time": "Fri Oct 28 13:55:08 2011 +0200"
      },
      "message": "vfs: add \"device\" tag to /proc/self/mountstats\n\nnfsiostat was failing to find mounted filesystems on kernels after\n2.6.38 because of changes to show_vfsstat() by commit\nc7f404b40a3665d9f4e9a927cc5c1ee0479ed8f9.  This patch adds back the\n\"device\" tag before the nfs server entry so scripts can parse the\nmountstats file correctly.\n\nSigned-off-by: Bryan Schumaker \u003cbjschuma@netapp.com\u003e\nCC: stable@kernel.org [\u003e\u003d2.6.39]\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\n"
    },
    {
      "commit": "815d405ceff0d6964683f033e18b9b23a88fba87",
      "tree": "2bec24a44bc3edbdcedf8ae65256a0533ce4e46a",
      "parents": [
        "d94c177beeb4469cd4f6e83354ab0223353e98ed"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Sep 26 20:36:09 2011 -0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Sep 26 19:16:46 2011 -0700"
      },
      "message": "VFS: Fix the remaining automounter semantics regressions\n\nThe concensus seems to be that system calls such as stat() etc should\nnot trigger an automount.  Neither should the l* versions.\n\nThis patch therefore adds a LOOKUP_AUTOMOUNT flag to tag those lookups\nthat _should_ trigger an automount on the last path element.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n[ Edited to leave out the cases that are already covered by LOOKUP_OPEN,\n  LOOKUP_DIRECTORY and LOOKUP_CREATE - all of which also fundamentally\n  force automounting for their own reasons   - Linus ]\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "423e0ab086ad8b33626e45fa94ac7613146b7ffa",
      "tree": "249c9337a02254fe5dbede7436f78dfcc1ec508f",
      "parents": [
        "bbd9d6f7fbb0305c9a592bf05a32e87eb364a4ff"
      ],
      "author": {
        "name": "Tim Chen",
        "email": "tim.c.chen@linux.intel.com",
        "time": "Tue Jul 19 09:32:38 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jul 24 10:08:32 2011 -0400"
      },
      "message": "VFS : mount lock scalability for internal mounts\n\nFor a number of file systems that don\u0027t have a mount point (e.g. sockfs\nand pipefs), they are not marked as long term. Therefore in\nmntput_no_expire, all locks in vfs_mount lock are taken instead of just\nlocal cpu\u0027s lock to aggregate reference counts when we release\nreference to file objects.  In fact, only local lock need to have been\ntaken to update ref counts as these file systems are in no danger of\ngoing away until we are ready to unregister them.\n\nThe attached patch marks file systems using kern_mount without\nmount point as long term.  The contentions of vfs_mount lock\nis now eliminated.  Before un-registering such file system,\nkern_unmount should be called to remove the long term flag and\nmake the mount point ready to be freed.\n\nSigned-off-by: Tim Chen \u003ctim.c.chen@linux.intel.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f15146380d28b746df3c8b81b392812eb982382a",
      "tree": "bf43b38b60c21bd01b007c9636062783d406eb29",
      "parents": [
        "72c5052ddc3956d847f21c2b8d55c93664a51b2c"
      ],
      "author": {
        "name": "Kay Sievers",
        "email": "kay.sievers@vrfy.org",
        "time": "Tue Jul 12 20:48:39 2011 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Jul 20 20:47:50 2011 -0400"
      },
      "message": "fs: seq_file - add event counter to simplify poll() support\n\nMoving the event counter into the dynamically allocated \u0027struc seq_file\u0027\nallows poll() support without the need to allocate its own tracking\nstructure.\n\nAll current users are switched over to use the new counter.\n\nRequested-by: Andrew Morton akpm@linux-foundation.org\nAcked-by: NeilBrown \u003cneilb@suse.de\u003e\nTested-by: Lucas De Marchi lucas.demarchi@profusion.mobi\nSigned-off-by: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7c6e984dfca8ff5b04d359a59b24f39a691b87d3",
      "tree": "5d7ff0a8b8d17e96ef7811272c3b6cf1f9f2174c",
      "parents": [
        "79fead47c51b874a26cf5865408a5b784b52a929"
      ],
      "author": {
        "name": "Roman Borisov",
        "email": "ext-roman.borisov@nokia.com",
        "time": "Wed May 25 16:26:48 2011 -0700"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 26 07:26:44 2011 -0400"
      },
      "message": "fs/namespace.c: bound mount propagation fix\n\nThis issue was discovered by users of busybox.  And the bug is actual for\nbusybox users, I don\u0027t know how it affects others.  Apparently, mount is\ncalled with and without MS_SILENT, and this affects mount() behaviour.\nBut MS_SILENT is only supposed to affect kernel logging verbosity.\n\nThe following script was run in an empty test directory:\n\nmkdir -p mount.dir mount.shared1 mount.shared2\ntouch mount.dir/a mount.dir/b\nmount -vv --bind         mount.shared1 mount.shared1\nmount -vv --make-rshared mount.shared1\nmount -vv --bind         mount.shared2 mount.shared2\nmount -vv --make-rshared mount.shared2\nmount -vv --bind mount.shared2 mount.shared1\nmount -vv --bind mount.dir     mount.shared2\nls -R mount.dir mount.shared1 mount.shared2\numount mount.dir mount.shared1 mount.shared2 2\u003e/dev/null\numount mount.dir mount.shared1 mount.shared2 2\u003e/dev/null\numount mount.dir mount.shared1 mount.shared2 2\u003e/dev/null\nrm -f mount.dir/a mount.dir/b mount.dir/c\nrmdir mount.dir mount.shared1 mount.shared2\n\nmount -vv was used to show the mount() call arguments and result.\nOutput shows that flag argument has 0x00008000 \u003d MS_SILENT bit:\n\nmount: mount(\u0027mount.shared1\u0027,\u0027mount.shared1\u0027,\u0027(null)\u0027,0x00009000,\u0027(null)\u0027):0\nmount: mount(\u0027\u0027,\u0027mount.shared1\u0027,\u0027\u0027,0x0010c000,\u0027\u0027):0\nmount: mount(\u0027mount.shared2\u0027,\u0027mount.shared2\u0027,\u0027(null)\u0027,0x00009000,\u0027(null)\u0027):0\nmount: mount(\u0027\u0027,\u0027mount.shared2\u0027,\u0027\u0027,0x0010c000,\u0027\u0027):0\nmount: mount(\u0027mount.shared2\u0027,\u0027mount.shared1\u0027,\u0027(null)\u0027,0x00009000,\u0027(null)\u0027):0\nmount: mount(\u0027mount.dir\u0027,\u0027mount.shared2\u0027,\u0027(null)\u0027,0x00009000,\u0027(null)\u0027):0\nmount.dir:\na\nb\n\nmount.shared1:\n\nmount.shared2:\na\nb\n\nAfter adding --loud option to remove MS_SILENT bit from just one mount cmd:\n\nmkdir -p mount.dir mount.shared1 mount.shared2\ntouch mount.dir/a mount.dir/b\nmount -vv --bind         mount.shared1 mount.shared1 2\u003e\u00261\nmount -vv --make-rshared mount.shared1               2\u003e\u00261\nmount -vv --bind         mount.shared2 mount.shared2 2\u003e\u00261\nmount -vv --loud --make-rshared mount.shared2               2\u003e\u00261  # \u003c-HERE\nmount -vv --bind mount.shared2 mount.shared1         2\u003e\u00261\nmount -vv --bind mount.dir     mount.shared2         2\u003e\u00261\nls -R mount.dir mount.shared1 mount.shared2      2\u003e\u00261\numount mount.dir mount.shared1 mount.shared2 2\u003e/dev/null\numount mount.dir mount.shared1 mount.shared2 2\u003e/dev/null\numount mount.dir mount.shared1 mount.shared2 2\u003e/dev/null\nrm -f mount.dir/a mount.dir/b mount.dir/c\nrmdir mount.dir mount.shared1 mount.shared2\n\nThe result is different now - look closely at mount.shared1 directory listing.\nNow it does show files \u0027a\u0027 and \u0027b\u0027:\n\nmount: mount(\u0027mount.shared1\u0027,\u0027mount.shared1\u0027,\u0027(null)\u0027,0x00009000,\u0027(null)\u0027):0\nmount: mount(\u0027\u0027,\u0027mount.shared1\u0027,\u0027\u0027,0x0010c000,\u0027\u0027):0\nmount: mount(\u0027mount.shared2\u0027,\u0027mount.shared2\u0027,\u0027(null)\u0027,0x00009000,\u0027(null)\u0027):0\nmount: mount(\u0027\u0027,\u0027mount.shared2\u0027,\u0027\u0027,0x00104000,\u0027\u0027):0\nmount: mount(\u0027mount.shared2\u0027,\u0027mount.shared1\u0027,\u0027(null)\u0027,0x00009000,\u0027(null)\u0027):0\nmount: mount(\u0027mount.dir\u0027,\u0027mount.shared2\u0027,\u0027(null)\u0027,0x00009000,\u0027(null)\u0027):0\n\nmount.dir:\na\nb\n\nmount.shared1:\na\nb\n\nmount.shared2:\na\nb\n\nThe analysis shows that MS_SILENT flag which is ON by default in any\nbusybox-\u003e mount operations cames to flags_to_propagation_type function and\ncauses the error return while is_power_of_2 checking because the function\nexpects only one bit set.  This doesn\u0027t allow to do busybox-\u003emount with\nany --make-[r]shared, --make-[r]private etc options.\n\nMoreover, the recently added flags_to_propagation_type() function doesn\u0027t\nallow us to do such operations as --make-[r]private --make-[r]shared etc.\nwhen MS_SILENT is on.  The idea or clearing the MS_SILENT flag came from\nto Denys Vlasenko.\n\nSigned-off-by: Roman Borisov \u003cext-roman.borisov@nokia.com\u003e\nReported-by: Denys Vlasenko \u003cvda.linux@googlemail.com\u003e\nCc: Chuck Ebbert \u003ccebbert@redhat.com\u003e\nCc: Alexander Shishkin \u003cvirtuoso@slind.org\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "be85bccaa5aa5a11dcaf85f9e945ffefd253f631",
      "tree": "342a0c1529d077ec499f62dfa01ff4697387f1ab",
      "parents": [
        "16ad56972ca3161eb97583897f17c1ead0c4ebd0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 12 13:35:56 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Apr 12 13:35:56 2011 -0700"
      },
      "message": "Revert \"vfs: Export file system uuid via /proc/\u003cpid\u003e/mountinfo\"\n\nThis reverts commit 93f1c20bc8cdb757be50566eff88d65c3b26881f.\n\nIt turns out that libmount misparses it because it adds a \u0027-\u0027 character\nin the uuid string, which libmount then incorrectly confuses with the\nseparator string (\" - \") at the end of all the optional arguments.\n\nUpstream libmount (in the util-linux tree) has been fixed, but until\nthat fix actually percolates up to users, we\u0027d better not expose this\nchange in the kernel.\n\nLet\u0027s revisit this later (possibly by exposing the UUID without any \u0027-\u0027\ncharacters in it, avoiding the user-space bug).\n\nReported-by: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Karel Zak \u003ckzak@redhat.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nCc: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nCc: Eric Sandeen \u003csandeen@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "80cdc6dae76ea67d2b21bdca8df17ef47251eb8b",
      "tree": "b776fd2d32f4262526de9f4ed907c1b9406bce91",
      "parents": [
        "3e50594e8e72932ad4cfcb0b3cbdf58fc3bce416"
      ],
      "author": {
        "name": "Mandeep Singh Baines",
        "email": "msb@chromium.org",
        "time": "Tue Mar 22 16:33:54 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:10 2011 -0700"
      },
      "message": "fs: use appropriate printk priority levels\n\nprintk()s without a priority level default to KERN_WARNING.  To reduce\nnoise at KERN_WARNING, this patch set the priority level appriopriately\nfor unleveled printks()s.  This should be useful to folks that look at\ndmesg warnings closely.\n\nSigned-off-by: Mandeep Singh Baines \u003cmsb@chromium.org\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b12cea9198fa99ffd3de1776c323bc7464d26b44",
      "tree": "3ae5818b2690e45c8a71432ed681751683091287",
      "parents": [
        "27cb1572e3e6bb1f8cf6bb3d74c914a87b131792"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 18 08:55:38 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 18 08:55:38 2011 -0400"
      },
      "message": "change the locking order for namespace_sem\n\nHave it nested inside -\u003ei_mutex.  Instead of using follow_down()\nunder namespace_sem, followed by grabbing i_mutex and checking that\nmountpoint to be is not dead, do the following:\n\tgrab i_mutex\n\tcheck that it\u0027s not dead\n\tgrab namespace_sem\n\tsee if anything is mounted there\n\tif not, we\u0027ve won\n\totherwise\n\t\tdrop locks\n\t\tput_path on what we had\n\t\treplace with what\u0027s mounted\n\t\tretry everything with new mountpoint to be\n\nNew helper (lock_mount()) does that.  do_add_mount(), do_move_mount(),\ndo_loopback() and pivot_root() switched to it; in case of the last\ntwo that eliminates a race we used to have - original code didn\u0027t\ndo follow_down().\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "27cb1572e3e6bb1f8cf6bb3d74c914a87b131792",
      "tree": "01e6510de480d3595ccff315d777770490e51f9c",
      "parents": [
        "9d412a43c3b26e1e549319e5eec26f0829f9f74d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 18 08:29:36 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 18 08:54:59 2011 -0400"
      },
      "message": "fix deadlock in pivot_root()\n\nDon\u0027t hold vfsmount_lock over the loop traversing -\u003emnt_parent;\ndo check_mnt(new.mnt) under namespace_sem instead; combined with\nnamespace_sem held over all that code it\u0027ll guarantee the stability\nof -\u003emnt_parent chain all the way to the root.\n\nDoing check_mnt() outside of namespace_sem in case of pivot_root()\nis wrong anyway.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "9d412a43c3b26e1e549319e5eec26f0829f9f74d",
      "tree": "b6522b693564fed172e9f8aee2e42aa2fdd95c8a",
      "parents": [
        "fbe0aa1f3d16fac5b641c0c1697371dcbe45b569"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 17 22:08:28 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 17 22:10:41 2011 -0400"
      },
      "message": "vfs: split off vfsmount-related parts of vfs_kern_mount()\n\nnew function: mount_fs().  Does all work done by vfs_kern_mount()\nexcept the allocation and filling of vfsmount; returns root dentry\nor ERR_PTR().\n\nvfs_kern_mount() switched to using it and taken to fs/namespace.c,\nalong with its wrappers.\n\nalloc_vfsmnt()/free_vfsmnt() made static.\n\nfunctions in namespace.c slightly reordered.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "474a00ee1306eb7e82329fdc28b6471a99facba1",
      "tree": "d0fc3e01d030b3ce3706beee01382a0819f854c8",
      "parents": [
        "054cfaacf88865bff1dd58d305443d5d6c068a08"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 17 21:31:32 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Mar 17 21:31:32 2011 -0400"
      },
      "message": "kill simple_set_mnt()\n\nnot needed anymore, since all users (-\u003eget_sb() instances) are gone.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "054cfaacf88865bff1dd58d305443d5d6c068a08",
      "tree": "39cd85f0f5966ed8c501740359b1d03d48f5ea41",
      "parents": [
        "dc113c1f1d4b47af1b1ca701c5a39e24d296c2ac",
        "1a102ff92579edeff5e3d5d3c76ca49977898f00"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 19:09:57 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 19:09:57 2011 -0700"
      },
      "message": "Merge branch \u0027mnt_devname\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6\n\n* \u0027mnt_devname\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:\n  vfs: bury -\u003eget_sb()\n  nfs: switch NFS from -\u003eget_sb() to -\u003emount()\n  nfs: stop mangling -\u003emnt_devname on NFS\n  vfs: new superblock methods to override /proc/*/mount{s,info}\n  nfs: nfs_do_{ref,sub}mount() superblock argument is redundant\n  nfs: make nfs_path() work without vfsmount\n  nfs: store devname at disconnected NFS roots\n  nfs: propagate devname to nfs{,4}_get_root()\n"
    },
    {
      "commit": "c7f404b40a3665d9f4e9a927cc5c1ee0479ed8f9",
      "tree": "2d6fa2bef00efa759f36b17f3be0d4fab3ac9bb5",
      "parents": [
        "f8ad9c4bae99854c961ca79ed130a0d11d9ab53c"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 16 06:59:40 2011 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Mar 16 16:48:06 2011 -0400"
      },
      "message": "vfs: new superblock methods to override /proc/*/mount{s,info}\n\na) -\u003eshow_devname(m, mnt) - what to put into devname columns in mounts,\nmountinfo and mountstats\nb) -\u003eshow_path(m, mnt) - what to put into relative path column in mountinfo\n\nLeaving those NULL gives old behaviour.  NFS switched to using those.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0f6e0e8448a16d8d22119ce91d8dd24b44865b51",
      "tree": "7c295c02db035fc6a0b867465911a2bc9dc6b1ef",
      "parents": [
        "0d2ecee2bdb2a19d04bc5cefac0f86e790f1aad4",
        "a002951c97ff8da49938c982a4c236bf2fafdc9f"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 09:15:43 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 16 09:15:43 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6: (33 commits)\n  AppArmor: kill unused macros in lsm.c\n  AppArmor: cleanup generated files correctly\n  KEYS: Add an iovec version of KEYCTL_INSTANTIATE\n  KEYS: Add a new keyctl op to reject a key with a specified error code\n  KEYS: Add a key type op to permit the key description to be vetted\n  KEYS: Add an RCU payload dereference macro\n  AppArmor: Cleanup make file to remove cruft and make it easier to read\n  SELinux: implement the new sb_remount LSM hook\n  LSM: Pass -o remount options to the LSM\n  SELinux: Compute SID for the newly created socket\n  SELinux: Socket retains creator role and MLS attribute\n  SELinux: Auto-generate security_is_socket_class\n  TOMOYO: Fix memory leak upon file open.\n  Revert \"selinux: simplify ioctl checking\"\n  selinux: drop unused packet flow permissions\n  selinux: Fix packet forwarding checks on postrouting\n  selinux: Fix wrong checks for selinux_policycap_netpeer\n  selinux: Fix check for xfrm selinux context algorithm\n  ima: remove unnecessary call to ima_must_measure\n  IMA: remove IMA imbalance checking\n  ...\n"
    },
    {
      "commit": "93f1c20bc8cdb757be50566eff88d65c3b26881f",
      "tree": "15e812c8127ddd795b8112f76832f6411953be62",
      "parents": [
        "a51571ccb8be1b88aea502ebba8350519682c16d"
      ],
      "author": {
        "name": "Aneesh Kumar K.V",
        "email": "aneesh.kumar@linux.vnet.ibm.com",
        "time": "Sat Jan 29 18:43:38 2011 +0530"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Mar 15 02:21:45 2011 -0400"
      },
      "message": "vfs: Export file system uuid via /proc/\u003cpid\u003e/mountinfo\n\nWe add a per superblock uuid field. File systems should\nupdate the uuid in the fill_super callback\n\nSigned-off-by: Aneesh Kumar K.V \u003caneesh.kumar@linux.vnet.ibm.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "fe3fa43039d47ee4e22caf460b79b62a14937f79",
      "tree": "9eab8d00f1227b9fe0959f32a62d892ed35803ba",
      "parents": [
        "ee009e4a0d4555ed522a631bae9896399674f064",
        "026eb167ae77244458fa4b4b9fc171209c079ba7"
      ],
      "author": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Tue Mar 08 11:38:10 2011 +1100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Tue Mar 08 11:38:10 2011 +1100"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.infradead.org/users/eparis/selinux into next\n"
    },
    {
      "commit": "ff36fe2c845cab2102e4826c1ffa0a6ebf487c65",
      "tree": "d61f4c65bc51e6455f0cb5a3d03fab41d0f83169",
      "parents": [
        "2ad18bdf3b8f84c85c7da7e4de365f7c5701fb3f"
      ],
      "author": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Mar 03 16:09:14 2011 -0500"
      },
      "committer": {
        "name": "Eric Paris",
        "email": "eparis@redhat.com",
        "time": "Thu Mar 03 16:12:27 2011 -0500"
      },
      "message": "LSM: Pass -o remount options to the LSM\n\nThe VFS mount code passes the mount options to the LSM.  The LSM will remove\noptions it understands from the data and the VFS will then pass the remaining\noptions onto the underlying filesystem.  This is how options like the\nSELinux context\u003d work.  The problem comes in that -o remount never calls\ninto LSM code.  So if you include an LSM specific option it will get passed\nto the filesystem and will cause the remount to fail.  An example of where\nthis is a problem is the \u0027seclabel\u0027 option.  The SELinux LSM hook will\nprint this word in /proc/mounts if the filesystem is being labeled using\nxattrs.  If you pass this word on mount it will be silently stripped and\nignored.  But if you pass this word on remount the LSM never gets called\nand it will be passed to the FS.  The FS doesn\u0027t know what seclabel means\nand thus should fail the mount.  For example an ext3 fs mounted over loop\n\n# mount -o loop /tmp/fs /mnt/tmp\n# cat /proc/mounts | grep /mnt/tmp\n/dev/loop0 /mnt/tmp ext3 rw,seclabel,relatime,errors\u003dcontinue,barrier\u003d0,data\u003dordered 0 0\n# mount -o remount /mnt/tmp\nmount: /mnt/tmp not mounted already, or bad option\n# dmesg\nEXT3-fs (loop0): error: unrecognized mount option \"seclabel\" or missing value\n\nThis patch passes the remount mount options to an new LSM hook.\n\nSigned-off-by: Eric Paris \u003ceparis@redhat.com\u003e\nReviewed-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "bf9faa2aa30e2ebf30287536712ed2717bb47002",
      "tree": "06db8ec432cb57dc507e42cdeda878c2b3038d5c",
      "parents": [
        "2aa15890f3c191326678f1bd68af61ec6b8753ec"
      ],
      "author": {
        "name": "J. R. Okajima",
        "email": "hooanon05@yahoo.co.jp",
        "time": "Wed Feb 23 16:59:49 2011 +0900"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu Feb 24 02:10:57 2011 -0500"
      },
      "message": "Unlock vfsmount_lock in do_umount\n\nBy the commit\n\tb3e19d9 2011-01-07 fs: scale mntget/mntput\nvfsmount_lock was introduced around testing mnt_count.\nFix the mis-typed \u0027unlock\u0027\n\nSigned-off-by: J. R. Okajima \u003chooanon05@yahoo.co.jp\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b1e75df45a3d8a490b8648e44632debc5eea04b1",
      "tree": "4ee3aaa516675ca9715d673c4399f1b517d4a690",
      "parents": [
        "15f9a3f3e199647fe0cac19302c5033cf031372d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 01:47:59 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 01:47:59 2011 -0500"
      },
      "message": "tidy up around finish_automount()\n\ndo_add_mount() and mnt_clear_expiry() are not needed outside of\nnamespace.c anymore, now that namei has finish_automount() to\nuse.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "15f9a3f3e199647fe0cac19302c5033cf031372d",
      "tree": "38a39510439f2913dbdfcfd2de4ffacc8214875d",
      "parents": [
        "19a167af7c97248ec646552ebc9140bc6aa3552a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 01:41:58 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 01:41:58 2011 -0500"
      },
      "message": "don\u0027t drop newmnt on error in do_add_mount()\n\nThat gets rid of the kludge in finish_automount() - we need\nto keep refcount on the vfsmount as-is until we evict it from\nexpiry list.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "19a167af7c97248ec646552ebc9140bc6aa3552a",
      "tree": "a521153c80fa6e40b2b4983c5bba21c2e96d1864",
      "parents": [
        "e78bf5e6cbe837daa6ab628a5f679548742994d3"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 01:35:23 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Jan 17 01:35:23 2011 -0500"
      },
      "message": "Take the completion of automount into new helper\n\n... and shift it from namei.c to namespace.c\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7e3d0eb0b028ed9e9384e6afcae2f22993bbdf25",
      "tree": "37bbffdfc6d380d04c294fa43d75697694f44d4d",
      "parents": [
        "f8b18087fd3277e424a24e13ce0edf30abe97ce0"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jan 16 16:32:11 2011 -0500"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Jan 16 14:59:45 2011 -0800"
      },
      "message": "VFS: Fix UP compile error in fs/namespace.c\n\nmnt_longterm is there only on SMP\n\nReported-and-tested-by: Joachim Eastwood \u003cmanabian@gmail.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f03c65993b98eeb909a4012ce7833c5857d74755",
      "tree": "a6dd5e353889b7fe4ab87c54170d09443d788fec",
      "parents": [
        "7b8a53fd815deb39542085897743fa0063f9fe06"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Jan 14 22:30:21 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jan 16 13:47:07 2011 -0500"
      },
      "message": "sanitize vfsmount refcounting changes\n\nInstead of splitting refcount between (per-cpu) mnt_count\nand (SMP-only) mnt_longrefs, make all references contribute\nto mnt_count again and keep track of how many are longterm\nones.\n\nAccounting rules for longterm count:\n\t* 1 for each fs_struct.root.mnt\n\t* 1 for each fs_struct.pwd.mnt\n\t* 1 for having non-NULL -\u003emnt_ns\n\t* decrement to 0 happens only under vfsmount lock exclusive\n\nThat allows nice common case for mntput() - since we can\u0027t drop the\nfinal reference until after mnt_longterm has reached 0 due to the rules\nabove, mntput() can grab vfsmount lock shared and check mnt_longterm.\nIf it turns out to be non-zero (which is the common case), we know\nthat this is not the final mntput() and can just blindly decrement\npercpu mnt_count.  Otherwise we grab vfsmount lock exclusive and\ndo usual decrement-and-check of percpu mnt_count.\n\nFor fs_struct.c we have mnt_make_longterm() and mnt_make_shortterm();\nnamespace.c uses the latter in places where we don\u0027t already hold\nvfsmount lock exclusive and opencodes a few remaining spots where\nwe need to manipulate mnt_longterm.\n\nNote that we mostly revert the code outside of fs/namespace.c back\nto what we used to have; in particular, normal code doesn\u0027t need\nto care about two kinds of references, etc.  And we get to keep\nthe optimization Nick\u0027s variant had bought us...\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "7b8a53fd815deb39542085897743fa0063f9fe06",
      "tree": "1fe7d7f6192b3300a12d2e6af80b9601f23f94f8",
      "parents": [
        "b650c858c26bd9ba29ebc82d30f09355845a294a"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:08:44 2011 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sun Jan 16 13:47:01 2011 -0500"
      },
      "message": "fix old umount_tree() breakage\n\nExpiry-related code calls umount_tree() several times with\nthe same list to collect vfsmounts to.  Which is fine, except\nthat umount_tree() implicitly assumed that the list would\nbe empty on each call - it moves the victims over there and\nthen iterates through the list kicking them out.  It\u0027s *almost*\nidempotent, so everything nearly worked.  However, mnt-\u003eghosts\nhandling (and thus expirability checks) had been broken - that\npart was not idempotent...\n\nThe fix is trivial - use local temporary list, splice it to\nthe the collector list when we are through.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "ea5b778a8b98c85a87d66bf844904f9c3802b869",
      "tree": "baa56cbe1a907d76341f2cad53e16569cc1d3288",
      "parents": [
        "ab90911ff90cdab59b31c045c3f0ae480d14f29d"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jan 14 19:10:03 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:07:48 2011 -0500"
      },
      "message": "Unexport do_add_mount() and add in follow_automount(), not -\u003ed_automount()\n\nUnexport do_add_mount() and make -\u003ed_automount() return the vfsmount to be\nadded rather than calling do_add_mount() itself.  follow_automount() will then\ndo the addition.\n\nThis slightly complicates things as -\u003ed_automount() normally wants to add the\nnew vfsmount to an expiration list and start an expiration timer.  The problem\nwith that is that the vfsmount will be deleted if it has a refcount of 1 and\nthe timer will not repeat if the expiration list is empty.\n\nTo this end, we require the vfsmount to be returned from d_automount() with a\nrefcount of (at least) 2.  One of these refs will be dropped unconditionally.\nIn addition, follow_automount() must get a 3rd ref around the call to\ndo_add_mount() lest it eat a ref and return an error, leaving the mount we\nhave open to being expired as we would otherwise have only 1 ref on it.\n\nd_automount() should also add the the vfsmount to the expiration list (by\ncalling mnt_set_expiry()) and start the expiration timer before returning, if\nthis mechanism is to be used.  The vfsmount will be unlinked from the\nexpiration list by follow_automount() if do_add_mount() fails.\n\nThis patch also fixes the call to do_add_mount() for AFS to propagate the mount\nflags from the parent vfsmount.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "cc53ce53c86924bfe98a12ea20b7465038a08792",
      "tree": "3c9a4923dd9f413c46bfa83a20cb579446df6deb",
      "parents": [
        "9875cf806403fae66b2410a3c2cc820d97731e04"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jan 14 18:45:26 2011 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Jan 15 20:07:31 2011 -0500"
      },
      "message": "Add a dentry op to allow processes to be held during pathwalk transit\n\nAdd a dentry op (d_manage) to permit a filesystem to hold a process and make it\nsleep when it tries to transit away from one of that filesystem\u0027s directories\nduring a pathwalk.  The operation is keyed off a new dentry flag\n(DCACHE_MANAGE_TRANSIT).\n\nThe filesystem is allowed to be selective about which processes it holds and\nwhich it permits to continue on or prohibits from transiting from each flagged\ndirectory.  This will allow autofs to hold up client processes whilst letting\nits userspace daemon through to maintain the directory or the stuff behind it\nor mounted upon it.\n\nThe -\u003ed_manage() dentry operation:\n\n\tint (*d_manage)(struct path *path, bool mounting_here);\n\ntakes a pointer to the directory about to be transited away from and a flag\nindicating whether the transit is undertaken by do_add_mount() or\ndo_move_mount() skipping through a pile of filesystems mounted on a mountpoint.\n\nIt should return 0 if successful and to let the process continue on its way;\n-EISDIR to prohibit the caller from skipping to overmounted filesystems or\nautomounting, and to use this directory; or some other error code to return to\nthe user.\n\n-\u003ed_manage() is called with namespace_sem writelocked if mounting_here is true\nand no other locks held, so it may sleep.  However, if mounting_here is true,\nit may not initiate or wait for a mount or unmount upon the parameter\ndirectory, even if the act is actually performed by userspace.\n\nWithin fs/namei.c, follow_managed() is extended to check with d_manage() first\non each managed directory, before transiting away from it or attempting to\nautomount upon it.\n\nfollow_down() is renamed follow_down_one() and should only be used where the\nfilesystem deliberately intends to avoid management steps (e.g. autofs).\n\nA new follow_down() is added that incorporates the loop done by all other\ncallers of follow_down() (do_add/move_mount(), autofs and NFSD; whilst AFS, NFS\nand CIFS do use it, their use is removed by converting them to use\nd_automount()).  The new follow_down() calls d_manage() as appropriate.  It\nalso takes an extra parameter to indicate if it is being called from mount code\n(with namespace_sem writelocked) which it passes to d_manage().  follow_down()\nignores automount points so that it can be used to mount on them.\n\n__follow_mount_rcu() is made to abort rcu-walk mode if it hits a directory with\nDCACHE_MANAGE_TRANSIT set on the basis that we\u0027re probably going to have to\nsleep.  It would be possible to enter d_manage() in rcu-walk mode too, and have\nthat determine whether to abort or not itself.  That would allow the autofs\ndaemon to continue on in rcu-walk mode.\n\nNote that DCACHE_MANAGE_TRANSIT on a directory should be cleared when it isn\u0027t\nrequired as every tranist from that directory will cause d_manage() to be\ninvoked.  It can always be set again when necessary.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nWHAT THIS MEANS FOR AUTOFS\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nAutofs currently uses the lookup() inode op and the d_revalidate() dentry op to\ntrigger the automounting of indirect mounts, and both of these can be called\nwith i_mutex held.\n\nautofs knows that the i_mutex will be held by the caller in lookup(), and so\ncan drop it before invoking the daemon - but this isn\u0027t so for d_revalidate(),\nsince the lock is only held on _some_ of the code paths that call it.  This\nmeans that autofs can\u0027t risk dropping i_mutex from its d_revalidate() function\nbefore it calls the daemon.\n\nThe bug could manifest itself as, for example, a process that\u0027s trying to\nvalidate an automount dentry that gets made to wait because that dentry is\nexpired and needs cleaning up:\n\n\tmkdir         S ffffffff8014e05a     0 32580  24956\n\tCall Trace:\n\t [\u003cffffffff885371fd\u003e] :autofs4:autofs4_wait+0x674/0x897\n\t [\u003cffffffff80127f7d\u003e] avc_has_perm+0x46/0x58\n\t [\u003cffffffff8009fdcf\u003e] autoremove_wake_function+0x0/0x2e\n\t [\u003cffffffff88537be6\u003e] :autofs4:autofs4_expire_wait+0x41/0x6b\n\t [\u003cffffffff88535cfc\u003e] :autofs4:autofs4_revalidate+0x91/0x149\n\t [\u003cffffffff80036d96\u003e] __lookup_hash+0xa0/0x12f\n\t [\u003cffffffff80057a2f\u003e] lookup_create+0x46/0x80\n\t [\u003cffffffff800e6e31\u003e] sys_mkdirat+0x56/0xe4\n\nversus the automount daemon which wants to remove that dentry, but can\u0027t\nbecause the normal process is holding the i_mutex lock:\n\n\tautomount     D ffffffff8014e05a     0 32581      1              32561\n\tCall Trace:\n\t [\u003cffffffff80063c3f\u003e] __mutex_lock_slowpath+0x60/0x9b\n\t [\u003cffffffff8000ccf1\u003e] do_path_lookup+0x2ca/0x2f1\n\t [\u003cffffffff80063c89\u003e] .text.lock.mutex+0xf/0x14\n\t [\u003cffffffff800e6d55\u003e] do_rmdir+0x77/0xde\n\t [\u003cffffffff8005d229\u003e] tracesys+0x71/0xe0\n\t [\u003cffffffff8005d28d\u003e] tracesys+0xd5/0xe0\n\nwhich means that the system is deadlocked.\n\nThis patch allows autofs to hold up normal processes whilst the daemon goes\nahead and does things to the dentry tree behind the automouter point without\nrisking a deadlock as almost no locks are held in d_manage() and none in\nd_automount().\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nWas-Acked-by: Ian Kent \u003craven@themaw.net\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "b3e19d924b6eaf2ca7d22cba99a517c5171007b6",
      "tree": "8c1fa4074114a883a4e2de2f7d12eb29ed91bdf1",
      "parents": [
        "c6653a838b1b2738561aff0b8c0f62a9b714bdd9"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:11 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:33 2011 +1100"
      },
      "message": "fs: scale mntget/mntput\n\nThe problem that this patch aims to fix is vfsmount refcounting scalability.\nWe need to take a reference on the vfsmount for every successful path lookup,\nwhich often go to the same mount point.\n\nThe fundamental difficulty is that a \"simple\" reference count can never be made\nscalable, because any time a reference is dropped, we must check whether that\nwas the last reference. To do that requires communication with all other CPUs\nthat may have taken a reference count.\n\nWe can make refcounts more scalable in a couple of ways, involving keeping\ndistributed counters, and checking for the global-zero condition less\nfrequently.\n\n- check the global sum once every interval (this will delay zero detection\n  for some interval, so it\u0027s probably a showstopper for vfsmounts).\n\n- keep a local count and only taking the global sum when local reaches 0 (this\n  is difficult for vfsmounts, because we can\u0027t hold preempt off for the life of\n  a reference, so a counter would need to be per-thread or tied strongly to a\n  particular CPU which requires more locking).\n\n- keep a local difference of increments and decrements, which allows us to sum\n  the total difference and hence find the refcount when summing all CPUs. Then,\n  keep a single integer \"long\" refcount for slow and long lasting references,\n  and only take the global sum of local counters when the long refcount is 0.\n\nThis last scheme is what I implemented here. Attached mounts and process root\nand working directory references are \"long\" references, and everything else is\na short reference.\n\nThis allows scalable vfsmount references during path walking over mounted\nsubtrees and unattached (lazy umounted) mounts with processes still running\nin them.\n\nThis results in one fewer atomic op in the fastpath: mntget is now just a\nper-CPU inc, rather than an atomic inc; and mntput just requires a spinlock\nand non-atomic decrement in the common case. However code is otherwise bigger\nand heavier, so single threaded performance is basically a wash.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "c6653a838b1b2738561aff0b8c0f62a9b714bdd9",
      "tree": "42ab45defd51c23dde7b91bafe62a28509befaf8",
      "parents": [
        "9d55c369bb5e695e629bc35cba2ef607755b3bee"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:10 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:33 2011 +1100"
      },
      "message": "fs: rename vfsmount counter helpers\n\nSuggested by Andreas, mnt_ prefix is clearer namespace, follows kernel\nconventions better, and is easier for tab complete. I introduced these\nnames so I\u0027ll admit they were not good choices.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "5f57cbcc02cf18f6b22ef4066bb10afeb8f930ff",
      "tree": "f02e7ee57e6060f0af1bcda281baf2972d2da72f",
      "parents": [
        "c28cc36469554dc55540f059fbdc7fa22a2c31fc"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:49:54 2011 +1100"
      },
      "committer": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Fri Jan 07 17:50:28 2011 +1100"
      },
      "message": "fs: dcache remove d_mounted\n\nRather than keep a d_mounted count in the dentry, set a dentry flag instead.\nThe flag can be cleared by checking the hash table to see if there are any\nmounts left, which is not time critical because it is performed at detach time.\n\nThe mounted state of a dentry is only used to speculatively take a look in the\nmount hash table if it is set -- before following the mount, vfsmount lock is\ntaken and mount re-checked without races.\n\nThis saves 4 bytes on 32-bit, nothing on 64-bit but it does provide a hole I\nmight use later (and some configs have larger than 32-bit spinlocks which might\nmake use of the hole).\n\nAutofs4 conversion and changelog by Ian Kent \u003craven@themaw.net\u003e:\nIn autofs4, when expring direct (or offset) mounts we need to ensure that we\nblock user path walks into the autofs mount, which is covered by another mount.\nTo do this we clear the mounted status so that follows stop before walking into\nthe mount and are essentially blocked until the expire is completed. The\nautomount daemon still finds the correct dentry for the umount due to the\nfollow mount logic in fs/autofs4/root.c:autofs4_follow_link(), which is set as\nan inode operation for direct and offset mounts only and is called following\nthe lookup that stopped at the covered mount.\n\nAt the end of the expire the covering mount probably has gone away so the\nmounted status need not be restored. But we need to check this and only restore\nthe mounted status if the expire failed.\n\nXXX: autofs may not work right if we have other mounts go over the top of it?\n\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\n"
    },
    {
      "commit": "451a3c24b0135bce54542009b5fde43846c7cf67",
      "tree": "f0fbbcc155aef2a1ffcb8aa593fe7a966d0e6900",
      "parents": [
        "55f6561c6941713ab5ae9180525b026dd40b7d14"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Wed Nov 17 16:26:55 2010 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 17 08:59:32 2010 -0800"
      },
      "message": "BKL: remove extraneous #include \u003csmp_lock.h\u003e\n\nThe big kernel lock has been removed from all these files at some point,\nleaving only the #include.\n\nRemove this too as a cleanup.\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "be1a16a0ae29a7c90081a657b64aa51cb1a65a27",
      "tree": "18bef9178b1142d839b906ce3bf38c92eb650ee8",
      "parents": [
        "89b0fc38cca4e6c92a90b58960881ffc5dddd89c"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Oct 05 12:31:09 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Mon Oct 25 21:24:16 2010 -0400"
      },
      "message": "vfs: fix infinite loop caused by clone_mnt race\n\nIf clone_mnt() happens while mnt_make_readonly() is running, the\ncloned mount might have MNT_WRITE_HOLD flag set, which results in\nmnt_want_write() spinning forever on this mount.\n\nNeeds CAP_SYS_ADMIN to trigger deliberately and unlikely to happen\naccidentally.  But if it does happen it can hang the machine.\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "6841c05021236b8d394cc6c41aa6ae17623aef13",
      "tree": "1171ba379a22353b5be526c3eedbaf50f614042a",
      "parents": [
        "38d018dba3f725b969f196550d92a6ec1c092428"
      ],
      "author": {
        "name": "Jan Blunck",
        "email": "jblunck@infradead.org",
        "time": "Wed Feb 24 13:25:35 2010 +0100"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Mon Oct 04 21:10:43 2010 +0200"
      },
      "message": "BKL: Remove BKL from do_new_mount()\n\nAfter pushing down the BKL to the get_sb/fill_super operations of the\nfilesystems that still make usage of the BKL it is safe to remove it from\ndo_new_mount().\n\nI\u0027ve read through all the code formerly covered by the BKL inside\ndo_kern_mount() and have satisfied myself that it doesn\u0027t need the BKL\nany more.\n\nSigned-off-by: Jan Blunck \u003cjblunck@infradead.org\u003e\nCc: Matthew Wilcox \u003cmatthew@wil.cx\u003e\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\n"
    },
    {
      "commit": "7a2e8a8faab76386d8eaae9ded739ee5615be174",
      "tree": "404b9c185f32e3e6ef871bb85c217314e4aff3e8",
      "parents": [
        "2bfc96a127bc1cc94d26bfaa40159966064f9c8c"
      ],
      "author": {
        "name": "Valerie Aurora",
        "email": "vaurora@redhat.com",
        "time": "Thu Aug 26 11:07:22 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Sep 07 13:46:20 2010 -0700"
      },
      "message": "VFS: Sanity check mount flags passed to change_mnt_propagation()\n\nSanity check the flags passed to change_mnt_propagation().  Exactly\none flag should be set.  Return EINVAL otherwise.\n\nUserspace can pass in arbitrary combinations of MS_* flags to mount().\ndo_change_type() is called if any of MS_SHARED, MS_PRIVATE, MS_SLAVE,\nor MS_UNBINDABLE is set.  do_change_type() clears MS_REC and then\ncalls change_mnt_propagation() with the rest of the user-supplied\nflags.  change_mnt_propagation() clearly assumes only one flag is set\nbut do_change_type() does not check that this is true.  For example,\nmount() with flags MS_SHARED | MS_RDONLY does not actually make the\nmount shared or read-only but does clear MNT_UNBINDABLE.\n\nSigned-off-by: Valerie Aurora \u003cvaurora@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "99b7db7b8ffd6bb755eb0a175596421a0b581cb2",
      "tree": "cbaf57d252f0852f967d3fd5a5f87472964a01fe",
      "parents": [
        "6416ccb7899960868f5016751fb81bf25213d24f"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@kernel.dk",
        "time": "Wed Aug 18 04:37:39 2010 +1000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 18 08:35:48 2010 -0400"
      },
      "message": "fs: brlock vfsmount_lock\n\nfs: brlock vfsmount_lock\n\nUse a brlock for the vfsmount lock. It must be taken for write whenever\nmodifying the mount hash or associated fields, and may be taken for read when\nperforming mount hash lookups.\n\nA new lock is added for the mnt-id allocator, so it doesn\u0027t need to take\nthe heavy vfsmount write-lock.\n\nThe number of atomics should remain the same for fastpath rlock cases, though\ncode would be slightly slower due to per-cpu access. Scalability is not not be\nmuch improved in common cases yet, due to other locks (ie. dcache_lock) getting\nin the way. However path lookups crossing mountpoints should be one case where\nscalability is improved (currently requiring the global lock).\n\nThe slowpath is slower due to use of brlock. On a 64 core, 64 socket, 32 node\nAltix system (high latency to remote nodes), a simple umount microbenchmark\n(mount --bind mnt mnt2 ; umount mnt2 loop 1000 times), before this patch it\ntook 6.8s, afterwards took 7.1s, about 5% slower.\n\nCc: Al Viro \u003cviro@ZenIV.linux.org.uk\u003e\nSigned-off-by: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "532490f0a5350fd92d838b7430a4c846bc8eac3f",
      "tree": "cbc3c81a492928c07c9110e95a0c965fc59418a6",
      "parents": [
        "8df9d1a4142311c084ffeeacb67cd34d190eff74"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Mon Aug 02 13:46:56 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 11 00:29:47 2010 -0400"
      },
      "message": "vfs: remove unused MNT_STRICTATIME\n\nCommit d0adde574b8487ef30f69e2d08bba769e4be513f added MNT_STRICTATIME\nbut it isn\u0027t actually used (MS_STRICTATIME clears MNT_RELATIME and\nMNT_NOATIME rather than setting any mount flag).\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "f7ad3c6be90809b53b7f0ae9d4eaa45ce2564a79",
      "tree": "dc9b09188bab35320200f318b5e7b52f24dc43ad",
      "parents": [
        "542ce7a9bc6b3838832ae0f4f8de30c667af8ff3"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "mszeredi@suse.cz",
        "time": "Tue Aug 10 11:41:36 2010 +0200"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Aug 11 00:28:20 2010 -0400"
      },
      "message": "vfs: add helpers to get root and pwd\n\nAdd three helpers that retrieve a refcounted copy of the root and cwd\nfrom the supplied fs_struct.\n\n get_fs_root()\n get_fs_pwd()\n get_fs_root_and_pwd()\n\nSigned-off-by: Miklos Szeredi \u003cmszeredi@suse.cz\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    }
  ],
  "next": "8c8946f509a494769a8c602b5ed189df01917d39"
}
