)]}'
{
  "log": [
    {
      "commit": "d83c49f3e36cecd2e8823b6c48ffba083b8a5704",
      "tree": "a304de4eb43652d2a9528d4b43f798ab821c8b93",
      "parents": [
        "6a251b0ab67989f468f4cb65179e0cf40cf8c295"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Apr 30 17:17:09 2010 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat May 15 07:16:33 2010 -0400"
      },
      "message": "Fix the regression created by \"set S_DEAD on unlink()...\" commit\n\n1) i_flags simply doesn\u0027t work for mount/unlink race prevention;\nwe may have many links to file and rm on one of those obviously\nshouldn\u0027t prevent bind on top of another later on.  To fix it\nright way we need to mark _dentry_ as unsuitable for mounting\nupon; new flag (DCACHE_CANT_MOUNT) is protected by d_flags and\ni_mutex on the inode in question.  Set it (with dont_mount(dentry))\nin unlink/rmdir/etc., check (with cant_mount(dentry)) in places\nin namespace.c that used to check for S_DEAD.  Setting S_DEAD\nis still needed in places where we used to set it (for directories\ngetting killed), since we rely on it for readdir/rmdir race\nprevention.\n\n2) rename()/mount() protection has another bogosity - we unhash\nthe target before we\u0027d checked that it\u0027s not a mountpoint.  Fixed.\n\n3) ancient bogosity in pivot_root() - we locked i_mutex on the\nright directory, but checked S_DEAD on the different (and wrong)\none.  Noticed and fixed.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "420118caa32c8ccdf9fce5a623b9de3f951573c5",
      "tree": "e497cfb33e8491ddba3105c4545d11e95aa3d18c",
      "parents": [
        "e74cc06df3b05e2b2c1611a043f6e6dcadaab1eb"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "louis.rilling@kerlabs.com",
        "time": "Wed Jan 28 19:18:33 2009 +0100"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Apr 30 10:48:26 2009 -0700"
      },
      "message": "configfs: Rework configfs_depend_item() locking and make lockdep happy\n\nconfigfs_depend_item() recursively locks all inodes mutex from configfs root to\nthe target item, which makes lockdep unhappy. The purpose of this recursive\nlocking is to ensure that the item tree can be safely parsed and that the target\nitem, if found, is not about to leave.\n\nThis patch reworks configfs_depend_item() locking using configfs_dirent_lock.\nSince configfs_dirent_lock protects all changes to the configfs_dirent tree, and\nprotects tagging of items to be removed, this lock can be used instead of the\ninodes mutex lock chain.\nThis needs that the check for dependents be done atomically with\nCONFIGFS_USET_DROPPING tagging.\n\nNow lockdep looks happy with configfs.\n\n[ Lifted the setting of s_type into configfs_new_dirent() to satisfy the\n  atomic setting of CONFIGFS_USET_CREATING  -- Joel ]\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "e74cc06df3b05e2b2c1611a043f6e6dcadaab1eb",
      "tree": "c514c5f5149ce26ef9b44473bed18a7836540a38",
      "parents": [
        "3c48f23adada870db612a0dd3488605c4af5c0a5"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "louis.rilling@kerlabs.com",
        "time": "Wed Jan 28 19:18:32 2009 +0100"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Apr 30 10:48:23 2009 -0700"
      },
      "message": "configfs: Silence lockdep on mkdir() and rmdir()\n\nWhen attaching default groups (subdirs) of a new group (in mkdir() or\nin configfs_register()), configfs recursively takes inode\u0027s mutexes\nalong the path from the parent of the new group to the default\nsubdirs. This is needed to ensure that the VFS will not race with\noperations on these sub-dirs. This is safe for the following reasons:\n\n- the VFS allows one to lock first an inode and second one of its\n  children (The lock subclasses for this pattern are respectively\n  I_MUTEX_PARENT and I_MUTEX_CHILD);\n- from this rule any inode path can be recursively locked in\n  descending order as long as it stays under a single mountpoint and\n  does not follow symlinks.\n\nUnfortunately lockdep does not know (yet?) how to handle such\nrecursion.\n\nI\u0027ve tried to use Peter Zijlstra\u0027s lock_set_subclass() helper to\nupgrade i_mutexes from I_MUTEX_CHILD to I_MUTEX_PARENT when we know\nthat we might recursively lock some of their descendant, but this\nusage does not seem to fit the purpose of lock_set_subclass() because\nit leads to several i_mutex locked with subclass I_MUTEX_PARENT by\nthe same task.\n\n\u003eFrom inside configfs it is not possible to serialize those recursive\nlocking with a top-level one, because mkdir() and rmdir() are already\ncalled with inodes locked by the VFS. So using some\nmutex_lock_nest_lock() is not an option.\n\nI am proposing two solutions:\n1) one that wraps recursive mutex_lock()s with\n   lockdep_off()/lockdep_on().\n2) (as suggested earlier by Peter Zijlstra) one that puts the\n   i_mutexes recursively locked in different classes based on their\n   depth from the top-level config_group created. This\n   induces an arbitrary limit (MAX_LOCK_DEPTH - 2 \u003d\u003d 46) on the\n   nesting of configfs default groups whenever lockdep is activated\n   but this limit looks reasonably high. Unfortunately, this also\n   isolates VFS operations on configfs default groups from the others\n   and thus lowers the chances to detect locking issues.\n\nNobody likes solution 1), which I can understand.\n\nThis patch implements solution 2). However lockdep is still not happy with\nconfigfs_depend_item(). Next patch reworks the locking of\nconfigfs_depend_item() and finally makes lockdep happy.\n\n[ Note: This hides a few locking interactions with the VFS from lockdep.\n  That was my big concern, because we like lockdep\u0027s protection.  However,\n  the current state always dumps a spurious warning.  The locking is\n  correct, so I tell people to ignore the warning and that we\u0027ll keep\n  our eyes on the locking to make sure it stays correct.  With this patch,\n  we eliminate the warning.  We do lose some of the lockdep protections,\n  but this only means that we still have to keep our eyes on the locking.\n  We\u0027re going to do that anyway.  -- Joel ]\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "296c2d86635bd6ecd8f282dfff18bb68fb4fc512",
      "tree": "1a8cd312d4e624f3b4b1d93086630dd0e75465bd",
      "parents": [
        "ee1ec32903fc3139af00ebc7ee483dabca3f4fa5"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Feb 20 06:02:01 2009 +0000"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Fri Mar 27 14:44:03 2009 -0400"
      },
      "message": "constify dentry_operations: configfs\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "436443f0f77f730f9f700095799c485356695c08",
      "tree": "d699084a975af202efd62590f20b0b9579e5a4aa",
      "parents": [
        "dcf6a79dda5cc2a2bec183e50d829030c0972aaa"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Tue Feb 03 23:12:34 2009 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Wed Feb 04 09:46:25 2009 -0800"
      },
      "message": "Revert \"configfs: Silence lockdep on mkdir(), rmdir() and configfs_depend_item()\"\n\nThis reverts commit 0e0333429a6280e6eb3c98845e4eed90d5f8078a.\n\nI committed this by accident - Joel and Louis are working with the lockdep\nmaintainer to provide a better solution than just turning lockdep off.\n\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\nAcked-by: \u003cJoel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "0e0333429a6280e6eb3c98845e4eed90d5f8078a",
      "tree": "5c04f9892c52faedfaa5b879a23f96bf77d02953",
      "parents": [
        "f8afead7169f0f28a4b421bcbdb510e52a2d094d"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "Joel.Becker@oracle.com",
        "time": "Wed Dec 17 14:23:52 2008 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Feb 02 14:20:18 2009 -0800"
      },
      "message": "configfs: Silence lockdep on mkdir(), rmdir() and configfs_depend_item()\n\nWhen attaching default groups (subdirs) of a new group (in mkdir() or\nin configfs_register()), configfs recursively takes inode\u0027s mutexes\nalong the path from the parent of the new group to the default\nsubdirs. This is needed to ensure that the VFS will not race with\noperations on these sub-dirs. This is safe for the following reasons:\n\n- the VFS allows one to lock first an inode and second one of its\n  children (The lock subclasses for this pattern are respectively\n  I_MUTEX_PARENT and I_MUTEX_CHILD);\n- from this rule any inode path can be recursively locked in\n  descending order as long as it stays under a single mountpoint and\n  does not follow symlinks.\n\nUnfortunately lockdep does not know (yet?) how to handle such\nrecursion.\n\nI\u0027ve tried to use Peter Zijlstra\u0027s lock_set_subclass() helper to\nupgrade i_mutexes from I_MUTEX_CHILD to I_MUTEX_PARENT when we know\nthat we might recursively lock some of their descendant, but this\nusage does not seem to fit the purpose of lock_set_subclass() because\nit leads to several i_mutex locked with subclass I_MUTEX_PARENT by\nthe same task.\n\n\u003eFrom inside configfs it is not possible to serialize those recursive\nlocking with a top-level one, because mkdir() and rmdir() are already\ncalled with inodes locked by the VFS. So using some\nmutex_lock_nest_lock() is not an option.\n\nI am proposing two solutions:\n1) one that wraps recursive mutex_lock()s with\n   lockdep_off()/lockdep_on().\n2) (as suggested earlier by Peter Zijlstra) one that puts the\n   i_mutexes recursively locked in different classes based on their\n   depth from the top-level config_group created. This\n   induces an arbitrary limit (MAX_LOCK_DEPTH - 2 \u003d\u003d 46) on the\n   nesting of configfs default groups whenever lockdep is activated\n   but this limit looks reasonably high. Unfortunately, this alos\n   isolates VFS operations on configfs default groups from the others\n   and thus lowers the chances to detect locking issues.\n\nThis patch implements solution 1).\n\nSolution 2) looks better from lockdep\u0027s point of view, but fails with\nconfigfs_depend_item(). This needs to rework the locking\nscheme of configfs_depend_item() by removing the variable lock recursion\ndepth, and I think that it\u0027s doable thanks to the configfs_dirent_lock.\nFor now, let\u0027s stick to solution 1).\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "de6bf18e9ce0df807dab08cff08751cac383429d",
      "tree": "3e60e9f88b4da4711a34df273c99a348bdc10236",
      "parents": [
        "9780eb6cfaf7d2d5ccc061eaf94e7aec6a17791e"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "louis.rilling@kerlabs.com",
        "time": "Fri Aug 15 12:37:23 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Fri Aug 22 11:09:02 2008 -0700"
      },
      "message": "[PATCH] configfs: Consolidate locking around configfs_detach_prep() in configfs_rmdir()\n\nIt appears that configfs_rmdir() can protect configfs_detach_prep() retries with\nless calls to {spin,mutex}_{lock,unlock}, and a cleaner code.\n\nThis patch does not change any behavior, except that it removes two useless\nlock/unlock pairs having nothing inside to protect and providing a useless\nbarrier.\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cJoel.Becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "70526b67443a980d5029d9cf06903bef731a4e96",
      "tree": "af4558619eeeda7f0075017881d8274d03854ca9",
      "parents": [
        "99cefda42ac550863b5ae1df9e60322e377decf9"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Jun 17 15:34:32 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Jul 31 16:21:13 2008 -0700"
      },
      "message": "[PATCH] configfs: Pin configfs subsystems separately from new config_items.\n\nconfigfs_mkdir() creates a new item by calling its parent\u0027s\n-\u003emake_item/group() functions.  Once that object is created,\nconfigfs_mkdir() calls try_module_get() on the new item\u0027s module.  If it\nsucceeds, the module owning the new item cannot be unloaded, and\nconfigfs is safe to reference the item.\n\nIf the item and the subsystem it belongs to are part of the same module,\nthe subsystem is also pinned.  This is the common case.\n\nHowever, if the subsystem is made up of multiple modules, this may not\npin the subsystem.  Thus, it would be possible to unload the toplevel\nsubsystem module while there is still a child item.  Thus, we now\ntry_module_get() the subsystem\u0027s module.  This only really affects\nchildren of the toplevel subsystem group.  Deeper children already have\ntheir parents pinned.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "99cefda42ac550863b5ae1df9e60322e377decf9",
      "tree": "20926e04d7d5ff770edf337e0e4493a1b0b6a9cc",
      "parents": [
        "2e2ce171c3ba6f2753fb1fd2706b63683394da2d"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "louis.rilling@kerlabs.com",
        "time": "Fri Jun 27 13:10:25 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Jul 31 16:21:13 2008 -0700"
      },
      "message": "[PATCH] configfs: Fix open directory making rmdir() fail\n\nWhen checking for user-created elements under an item to be removed by rmdir(),\nconfigfs_detach_prep() counts fake configfs_dirents created by dir_open() as\nuser-created and fails when finding one. It is however perfectly valid to remove\na directory that is open.\n\nSimply make configfs_detach_prep() skip fake configfs_dirent, like it already\ndoes for attributes, and like detach_groups() does.\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "2e2ce171c3ba6f2753fb1fd2706b63683394da2d",
      "tree": "b3b75b6b140ab6807754fd500c5a55b0cb7324f8",
      "parents": [
        "2a109f2a4155f168047aa2f5b3a170e279bef89a"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "louis.rilling@kerlabs.com",
        "time": "Fri Jul 04 16:56:06 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Jul 31 16:21:13 2008 -0700"
      },
      "message": "[PATCH] configfs: Lock new directory inodes before removing on cleanup after failure\n\nOnce a new configfs directory is created by configfs_attach_item() or\nconfigfs_attach_group(), a failure in the remaining initialization steps leads\nto removing a directory which inode the VFS may have already accessed.\n\nThis commit adds the necessary inode locking to safely remove configfs\ndirectories while cleaning up after a failure. As an advantage, the locking\nrules of populate_groups() and detach_groups() become the same: the caller must\nhave the group\u0027s inode mutex locked.\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "2a109f2a4155f168047aa2f5b3a170e279bef89a",
      "tree": "8e9a080046fb1abdba10e288b89e92cc4c39f6ea",
      "parents": [
        "9a73d78cda750f12e25eb811878f2d9dbab1bc6e"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "louis.rilling@kerlabs.com",
        "time": "Fri Jul 04 16:56:05 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Jul 31 16:21:13 2008 -0700"
      },
      "message": "[PATCH] configfs: Prevent userspace from creating new entries under attaching directories\n\nprocess 1: \t\t\t\t\tprocess 2:\nconfigfs_mkdir(\"A\")\n  attach_group(\"A\")\n    attach_item(\"A\")\n      d_instantiate(\"A\")\n    populate_groups(\"A\")\n      mutex_lock(\"A\")\n      attach_group(\"A/B\")\n        attach_item(\"A\")\n          d_instantiate(\"A/B\")\n\t\t\t\t\t\tmkdir(\"A/B/C\")\n\t\t\t\t\t\t  do_path_lookup(\"A/B/C\", LOOKUP_PARENT)\n\t\t\t\t\t\t    ok\n\t\t\t\t\t\t  lookup_create(\"A/B/C\")\n\t\t\t\t\t\t    mutex_lock(\"A/B\")\n\t\t\t\t\t\t    ok\n\t\t\t\t\t\t  configfs_mkdir(\"A/B/C\")\n\t\t\t\t\t\t    ok\n      attach_group(\"A/C\")\n        attach_item(\"A/C\")\n          d_instantiate(\"A/C\")\n        populate_groups(\"A/C\")\n          mutex_lock(\"A/C\")\n          attach_group(\"A/C/D\")\n            attach_item(\"A/C/D\")\n              failure\n          mutex_unlock(\"A/C\")\n          detach_groups(\"A/C\")\n            nothing to do\n\t\t\t\t\t\tmkdir(\"A/C/E\")\n\t\t\t\t\t\t  do_path_lookup(\"A/C/E\", LOOKUP_PARENT)\n\t\t\t\t\t\t    ok\n\t\t\t\t\t\t  lookup_create(\"A/C/E\")\n\t\t\t\t\t\t    mutex_lock(\"A/C\")\n\t\t\t\t\t\t    ok\n\t\t\t\t\t\t  configfs_mkdir(\"A/C/E\")\n\t\t\t\t\t\t    ok\n        detach_item(\"A/C\")\n        d_delete(\"A/C\")\n      mutex_unlock(\"A\")\n      detach_groups(\"A\")\n        mutex_lock(\"A/B\")\n        detach_group(\"A/B\")\n\t  detach_groups(\"A/B\")\n\t    nothing since no _default_ group\n          detach_item(\"A/B\")\n        mutex_unlock(\"A/B\")\n        d_delete(\"A/B\")\n    detach_item(\"A\")\n    d_delete(\"A\")\n\nTwo bugs:\n\n1/ \"A/B/C\" and \"A/C/E\" are created, but never removed while their parent are\nremoved in the end. The same could happen with symlink() instead of mkdir().\n\n2/ \"A\" and \"A/C\" inodes are not locked while detach_item() is called on them,\n   which may probably confuse VFS.\n\nThis commit fixes 1/, tagging new directories with CONFIGFS_USET_CREATING before\nbuilding the inode and instantiating the dentry, and validating the whole\ngroup+default groups hierarchy in a second pass by clearing\nCONFIGFS_USET_CREATING.\n\tmkdir(), symlink(), lookup(), and dir_open() simply return -ENOENT if\ncalled in (or linking to) a directory tagged with CONFIGFS_USET_CREATING. This\ndoes not prevent userspace from calling stat() successfuly on such directories,\nbut this prevents userspace from adding (children to | symlinking from/to |\nread/write attributes of | listing the contents of) not validated items. In\nother words, userspace will not interact with the subsystem on a new item until\nthe new item creation completes correctly.\n\tIt was first proposed to re-use CONFIGFS_USET_IN_MKDIR instead of a new\nflag CONFIGFS_USET_CREATING, but this generated conflicts when checking the\ntarget of a new symlink: a valid target directory in the middle of attaching\na new user-created child item could be wrongly detected as being attached.\n\n2/ is fixed by next commit.\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "9a73d78cda750f12e25eb811878f2d9dbab1bc6e",
      "tree": "abdc6537d51ee4faeb41c452428f2bde72abc9c8",
      "parents": [
        "4768e9b18dc63719209c68920d4ae52dc49b6161"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "louis.rilling@kerlabs.com",
        "time": "Fri Jun 20 14:09:22 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Jul 31 16:21:13 2008 -0700"
      },
      "message": "[PATCH] configfs: Fix failing symlink() making rmdir() fail\n\nOn a similar pattern as mkdir() vs rmdir(), a failing symlink() may make rmdir()\nfail for the symlink\u0027s parent and the symlink\u0027s target as well.\n\nfailing symlink() making target\u0027s rmdir() fail:\n\n\tprocess 1:\t\t\t\tprocess 2:\n\tsymlink(\"A/S\" -\u003e \"B\")\n\t  allow_link()\n\t  create_link()\n\t    attach to \"B\" links list\n\t\t\t\t\t\trmdir(\"B\")\n\t\t\t\t\t\t  detach_prep(\"B\")\n\t\t\t\t\t\t    error because of new link\n\t    configfs_create_link(\"A\", \"S\")\n\t      error (eg -ENOMEM)\n\nfailing symlink() making parent\u0027s rmdir() fail:\n\n\tprocess 1:\t\t\t\tprocess 2:\n\tsymlink(\"A/D/S\" -\u003e \"B\")\n\t  allow_link()\n\t  create_link()\n\t    attach to \"B\" links list\n\t    configfs_create_link(\"A/D\", \"S\")\n\t      make_dirent(\"A/D\", \"S\")\n\t\t\t\t\t\trmdir(\"A\")\n\t\t\t\t\t\t  detach_prep(\"A\")\n\t\t\t\t\t\t    detach_prep(\"A/D\")\n\t\t\t\t\t\t      error because of \"S\"\n\t      create(\"S\")\n\t        error (eg -ENOMEM)\n\nWe cannot use the same solution as for mkdir() vs rmdir(), since rmdir() on the\ntarget cannot wait on the i_mutex of the new symlink\u0027s parent without risking a\ndeadlock (with other symlink() or sys_rename()). Instead we define a global\nmutex protecting all configfs symlinks attachment, so that rmdir() can avoid the\nraces above.\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "4768e9b18dc63719209c68920d4ae52dc49b6161",
      "tree": "ee9e805c405ea6a6cdf44ba30fd66047bc522b1b",
      "parents": [
        "dacdd0e04768da1fd2b24a6ee274c582b40d0c5b"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "louis.rilling@kerlabs.com",
        "time": "Mon Jun 23 14:16:17 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Jul 31 16:21:12 2008 -0700"
      },
      "message": "[PATCH] configfs: Fix symlink() to a removing item\n\nThe rule for configfs symlinks is that symlinks always point to valid\nconfig_items, and prevent the target from being removed. However,\nconfigfs_symlink() only checks that it can grab a reference on the target item,\nwithout ensuring that it remains alive until the symlink is correctly attached.\n\nThis patch makes configfs_symlink() fail whenever the target is being removed,\nusing the CONFIGFS_USET_DROPPING flag set by configfs_detach_prep() and\nprotected by configfs_dirent_lock.\n\nThis patch introduces a similar (weird?) behavior as with mkdir failures making\nrmdir fail: if symlink() races with rmdir() of the parent directory (or its\nyoungest user-created ancestor if parent is a default group) or rmdir() of the\ntarget directory, and then fails in configfs_create(), this can make the racing\nrmdir() fail despite the concerned directory having no user-created entry (resp.\nno symlink pointing to it or one of its default groups) in the end.\nThis behavior is fixed in later patches.\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "dacdd0e04768da1fd2b24a6ee274c582b40d0c5b",
      "tree": "45b559bb14e9f968943bbc98b23b1489823898e0",
      "parents": [
        "94ad374a0751f40d25e22e036c37f7263569d24c"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 17 16:54:19 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Thu Jul 31 16:21:12 2008 -0700"
      },
      "message": "[PATCH] configfs: Include linux/err.h in linux/configfs.h\n\nWe now use PTR_ERR() in the -\u003emake_item() and -\u003emake_group() operations.\nFolks including configfs.h need err.h.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmfasheh@suse.com\u003e\n"
    },
    {
      "commit": "a6795e9ebb420d87af43789174689af0d66d1d35",
      "tree": "fb2a86ad010015fdd311f3b7f6ef30f60c14b8f7",
      "parents": [
        "f89ab8619e5320cc9c2576f5f8dcbaf6c0ba3950"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 17 15:21:29 2008 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 17 15:21:29 2008 -0700"
      },
      "message": "configfs: Allow -\u003emake_item() and -\u003emake_group() to return detailed errors.\n\nThe configfs operations -\u003emake_item() and -\u003emake_group() currently\nreturn a new item/group.  A return of NULL signifies an error.  Because\nof this, -ENOMEM is the only return code bubbled up the stack.\n\nMultiple folks have requested the ability to return specific error codes\nwhen these operations fail.  This patch adds that ability by changing the\n-\u003emake_item/group() ops to return ERR_PTR() values.  These errors are\nbubbled up appropriately.  NULL returns are changed to -ENOMEM for\ncompatibility.\n\nAlso updated are the in-kernel users of configfs.\n\nThis is a rework of reverted commit 11c3b79218390a139f2d474ee1e983a672d5839a.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "f89ab8619e5320cc9c2576f5f8dcbaf6c0ba3950",
      "tree": "e703050b232c76de7cb25afd63a2b4dd885c4bb9",
      "parents": [
        "5b664cb235e97afbf34db9c4d77f08ebd725335e"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 17 14:53:48 2008 -0700"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jul 17 14:53:48 2008 -0700"
      },
      "message": "Revert \"configfs: Allow -\u003emake_item() and -\u003emake_group() to return detailed errors.\"\n\nThis reverts commit 11c3b79218390a139f2d474ee1e983a672d5839a.  The code\nwill move to PTR_ERR().\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "11c3b79218390a139f2d474ee1e983a672d5839a",
      "tree": "03fa1a4927f2d9856ee45a64d522424478058b6f",
      "parents": [
        "6d8344baee99402de58b5fa5dfea197242955c15"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Jun 12 14:00:18 2008 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jul 14 13:57:16 2008 -0700"
      },
      "message": "configfs: Allow -\u003emake_item() and -\u003emake_group() to return detailed errors.\n\nThe configfs operations -\u003emake_item() and -\u003emake_group() currently\nreturn a new item/group.  A return of NULL signifies an error.  Because\nof this, -ENOMEM is the only return code bubbled up the stack.\n\nMultiple folks have requested the ability to return specific error codes\nwhen these operations fail.  This patch adds that ability by changing the\n-\u003emake_item/group() ops to return an int.\n\nAlso updated are the in-kernel users of configfs.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "6d8344baee99402de58b5fa5dfea197242955c15",
      "tree": "6be890feb8063bdaac6efaff1044980cb76ee961",
      "parents": [
        "b3e76af87441fc36eef3516d73ab2314e7b2d911"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "Louis.Rilling@kerlabs.com",
        "time": "Mon Jun 16 19:01:02 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jul 14 13:57:16 2008 -0700"
      },
      "message": "configfs: Fix failing mkdir() making racing rmdir() fail\n\nWhen fixing the rename() vs rmdir() deadlock, we stopped locking default groups\u0027\ninodes in configfs_detach_prep(), letting racing mkdir() in default groups\nproceed concurrently. This enables races like below happen, which leads to a\nfailing mkdir() making rmdir() fail, despite the group to remove having no\nuser-created directory under it in the end.\n\n\tprocess A: \t\t\tprocess B:\n\t/* PWD\u003dA/B */\n\tmkdir(\"C\")\n\t  make_item(\"C\")\n\t  attach_group(\"C\")\n\t\t\t\t\trmdir(\"A\")\n\t\t\t\t\t  detach_prep(\"A\")\n\t\t\t\t\t    detach_prep(\"B\")\n\t\t\t\t\t      error because of \"C\"\n\t\t\t\t\t  return -ENOTEMPTY\n\t    attach_group(\"C/D\")\n\t      error (eg -ENOMEM)\n\t  return -ENOMEM\n\nThis patch prevents such scenarii by making rmdir() wait as long as\ndetach_prep() fails because a racing mkdir() is in the middle of attach_group().\nTo achieve this, mkdir() sets a flag CONFIGFS_USET_IN_MKDIR in parent\u0027s\nconfigfs_dirent before calling attach_group(), and clears the flag once\nattach_group() is done. detach_prep() fails with -EAGAIN whenever the flag is\nhit and returns the guilty inode\u0027s mutex so that rmdir() can wait on it.\n\nSigned-off-by: Louis Rilling \u003cLouis.Rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "b3e76af87441fc36eef3516d73ab2314e7b2d911",
      "tree": "36c6c6a21ac16b609302845a7dcb91749a972e4c",
      "parents": [
        "107ed40bd070df5e4a0a012042c45c40963dc574"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "Louis.Rilling@kerlabs.com",
        "time": "Mon Jun 16 19:01:01 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jul 14 13:57:16 2008 -0700"
      },
      "message": "configfs: Fix deadlock with racing rmdir() and rename()\n\nThis patch fixes the deadlock between racing sys_rename() and configfs_rmdir().\n\nThe idea is to avoid locking i_mutexes of default groups in\nconfigfs_detach_prep(), and rely instead on the new configfs_dirent_lock to\nprotect against configfs_dirent\u0027s linkage mutations. To ensure that an mkdir()\nracing with rmdir() will not create new items in a to-be-removed default group,\nwe make configfs_new_dirent() check for the CONFIGFS_USET_DROPPING flag right\nbefore linking the new dirent, and return error if the flag is set. This makes\nracing mkdir()/symlink()/dir_open() fail in places where errors could already\nhappen, resp. in (attach_item()|attach_group())/create_link()/new_dirent().\n\nconfigfs_depend() remains safe since it locks all the path from configfs root,\nand is thus mutually exclusive with rmdir().\n\nAn advantage of this is that now detach_groups() unconditionnaly takes the\ndefault groups i_mutex, which makes it more consistent with populate_groups().\n\nSigned-off-by: Louis Rilling \u003cLouis.Rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "107ed40bd070df5e4a0a012042c45c40963dc574",
      "tree": "d3b8c1799083c0e7d4f1af3e1b84f0a86372eaee",
      "parents": [
        "5301a77da2da1e4c22573e0e8d394a653b8ad9f9"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "Louis.Rilling@kerlabs.com",
        "time": "Mon Jun 16 19:01:00 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jul 14 13:57:16 2008 -0700"
      },
      "message": "configfs: Make configfs_new_dirent() return error code instead of NULL\n\nThis patch makes configfs_new_dirent return negative error code instead of NULL,\nwhich will be useful in the next patch to differentiate ENOMEM from ENOENT.\n\nSigned-off-by: Louis Rilling \u003cLouis.Rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "5301a77da2da1e4c22573e0e8d394a653b8ad9f9",
      "tree": "c2a6186510c3a4502d923cf3f5d445fa821cb277",
      "parents": [
        "6f61076406251626be39651d114fac412b1e0c39"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "Louis.Rilling@kerlabs.com",
        "time": "Mon Jun 16 19:00:59 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jul 14 13:57:16 2008 -0700"
      },
      "message": "configfs: Protect configfs_dirent s_links list mutations\n\nSymlinks to a config_item are listed under its configfs_dirent s_links, but the\nlist mutations are not protected by any common lock.\n\nThis patch uses the configfs_dirent_lock spinlock to add the necessary\nprotection.\n\nNote: we should also protect the list_empty() test in configfs_detach_prep() but\n1/ the lock should not be released immediately because nothing would prevent the\nlist from being filled after a successful list_empty() test, making the problem\ntricky,\n2/ this will be solved by the rmdir() vs rename() deadlock bugfix.\n\nSigned-off-by: Louis Rilling \u003cLouis.Rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "6f61076406251626be39651d114fac412b1e0c39",
      "tree": "d7adb1de212cfb7ead490b448bf75ce3b3b91c9c",
      "parents": [
        "fe9f387740ac7cb3b7c2fffa76807e997e6c6292"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "Louis.Rilling@kerlabs.com",
        "time": "Mon Jun 16 19:00:58 2008 +0200"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mfasheh@suse.com",
        "time": "Mon Jul 14 13:57:15 2008 -0700"
      },
      "message": "configfs: Introduce configfs_dirent_lock\n\nThis patch introduces configfs_dirent_lock spinlock to protect configfs_dirent\ntraversals against linkage mutations (add/del/move). This will allow\nconfigfs_detach_prep() to avoid locking i_mutexes.\n\nLocking rules for configfs_dirent linkage mutations are the same plus the\nrequirement of taking configfs_dirent_lock. For configfs_dirent walking, one can\neither take appropriate i_mutex as before, or take configfs_dirent_lock.\n\nThe spinlock could actually be a mutex, but the critical sections are either\nO(1) or should not be too long (default groups walking in last patch).\n\nChangeLog:\n  - Clarify the comment on configfs_dirent_lock usage\n  - Move sd-\u003es_element init before linking the new dirent\n  - In lseek(), do not release configfs_dirent_lock before the dirent is\n    relinked.\n\nSigned-off-by: Louis Rilling \u003cLouis.Rilling@kerlabs.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    },
    {
      "commit": "ba611edfe406be745be95c332990c8e908c026c3",
      "tree": "c343d9dbbc86379414b7976bfbe507763d376611",
      "parents": [
        "02ac0499c0e3c62f2e2bf61a13870b36ea103564"
      ],
      "author": {
        "name": "Joonwoo Park",
        "email": "joonwpark81@gmail.com",
        "time": "Wed Dec 26 12:09:57 2007 +0900"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Jan 25 15:05:47 2008 -0800"
      },
      "message": "configfs: dir.c fix possible recursive locking\n\nconfigfs_register_subsystem() with default_groups triggers recursive locking.\nit seems that mutex_lock_nested is needed.\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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n[ INFO: possible recursive locking detected ]\n2.6.24-rc6 #141\n---------------------------------------------\nswapper/1 is trying to acquire lock:\n (\u0026sb-\u003es_type-\u003ei_mutex_key#3){--..}, at: [\u003cc40ca76f\u003e] configfs_attach_group+0x4f/0x190\n\nbut task is already holding lock:\n (\u0026sb-\u003es_type-\u003ei_mutex_key#3){--..}, at: [\u003cc40ca9d5\u003e] configfs_register_subsystem+0x55/0x130\n\nother info that might help us debug this:\n1 lock held by swapper/1:\n #0:  (\u0026sb-\u003es_type-\u003ei_mutex_key#3){--..}, at: [\u003cc40ca9d5\u003e] configfs_register_subsystem+0x55/0x130\n\nstack backtrace:\nPid: 1, comm: swapper Not tainted 2.6.24-rc6 #141\n [\u003cc40053ba\u003e] show_trace_log_lvl+0x1a/0x30\n [\u003cc4005e82\u003e] show_trace+0x12/0x20\n [\u003cc400687e\u003e] dump_stack+0x6e/0x80\n [\u003cc404ec72\u003e] __lock_acquire+0xe62/0x1120\n [\u003cc404efb2\u003e] lock_acquire+0x82/0xa0\n [\u003cc43fdad8\u003e] mutex_lock_nested+0x98/0x2e0\n [\u003cc40ca76f\u003e] configfs_attach_group+0x4f/0x190\n [\u003cc40caa46\u003e] configfs_register_subsystem+0xc6/0x130\n [\u003cc45c8186\u003e] init_netconsole+0x2b6/0x300\n [\u003cc45a75f2\u003e] kernel_init+0x142/0x320\n [\u003cc4004fb3\u003e] kernel_thread_helper+0x7/0x14\n \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Joonwoo Park \u003cjoonwpark81@gmail.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "ce8d2cdf3d2b73e346c82e6f0a46da331df6364c",
      "tree": "bf3597f2d4f57d6e30a7703d7fce0dbf8c757962",
      "parents": [
        "348366b963e4e1462c8354827a9cb910aa865bf2"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "haveblue@us.ibm.com",
        "time": "Tue Oct 16 23:31:13 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:43:04 2007 -0700"
      },
      "message": "r/o bind mounts: filesystem helpers for custom \u0027struct file\u0027s\n\nWhy do we need r/o bind mounts?\n\nThis feature allows a read-only view into a read-write filesystem.  In the\nprocess of doing that, it also provides infrastructure for keeping track of\nthe number of writers to any given mount.\n\nThis has a number of uses.  It allows chroots to have parts of filesystems\nwritable.  It will be useful for containers in the future because users may\nhave root inside a container, but should not be allowed to write to\nsomefilesystems.  This also replaces patches that vserver has had out of the\ntree for several years.\n\nIt allows security enhancement by making sure that parts of your filesystem\nread-only (such as when you don\u0027t trust your FTP server), when you don\u0027t want\nto have entire new filesystems mounted, or when you want atime selectively\nupdated.  I\u0027ve been using the following script to test that the feature is\nworking as desired.  It takes a directory and makes a regular bind and a r/o\nbind mount of it.  It then performs some normal filesystem operations on the\nthree directories, including ones that are expected to fail, like creating a\nfile on the r/o mount.\n\nThis patch:\n\nSome filesystems forego the vfs and may_open() and create their own \u0027struct\nfile\u0027s.\n\nThis patch creates a couple of helper functions which can be used by these\nfilesystems, and will provide a unified place which the r/o bind mount code\nmay patch.\n\nAlso, rename an existing, static-scope init_file() to a less generic name.\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "631d1febab8e546e3bb800bdfe2c212b8adf87de",
      "tree": "7399384371f3c32a9458907f14ec73c9ccf51d7c",
      "parents": [
        "299894cc9001b09e3e9685f2709b49e7e1092ccc"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Jun 18 18:06:09 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jul 10 17:18:59 2007 -0700"
      },
      "message": "configfs: config item dependancies.\n\nSometimes other drivers depend on particular configfs items.  For\nexample, ocfs2 mounts depend on a heartbeat region item.  If that\nregion item is removed with rmdir(2), the ocfs2 mount must BUG or go\nreadonly.  Not happy.\n\nThis provides two additional API calls: configfs_depend_item() and\nconfigfs_undepend_item().  A client driver can call\nconfigfs_depend_item() on an existing item to tell configfs that it is\ndepended on.  configfs will then return -EBUSY from rmdir(2) for that\nitem.  When the item is no longer depended on, the client driver calls\nconfigfs_undepend_item() on it.\n\nThese API cannot be called underneath any configfs callbacks, as\nthey will conflict.  They can block and allocate.  A client driver\nprobably shouldn\u0027t calling them of its own gumption.  Rather it should\nbe providing an API that external subsystems call.\n\nHow does this work?  Imagine the ocfs2 mount process.  When it mounts,\nit asks for a heart region item.  This is done via a call into the\nheartbeat code.  Inside the heartbeat code, the region item is looked\nup.  Here, the heartbeat code calls configfs_depend_item().  If it\nsucceeds, then heartbeat knows the region is safe to give to ocfs2.\nIf it fails, it was being torn down anyway, and heartbeat can gracefully\npass up an error.\n\n[ Fixed some bad whitespace in configfs.txt. --Mark ]\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "299894cc9001b09e3e9685f2709b49e7e1092ccc",
      "tree": "2a2e9bb69d2393bf620a34daea17e52ed9f9e5d7",
      "parents": [
        "6d748924b753d63a57dad130fdf11f64c27ff54b"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Oct 06 17:33:23 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jul 10 17:11:01 2007 -0700"
      },
      "message": "configfs: accessing item hierarchy during rmdir(2)\n\nAdd a notification callback, ops-\u003edisconnect_notify(). It has the same\nprototype as -\u003edrop_item(), but it will be called just before the item\nlinkage is broken. This way, configfs users who want to do work while\nthe object is still in the heirarchy have a chance.\n\nClient drivers will still need to config_item_put() in their\n-\u003edrop_item(), if they implement it.  They need do nothing in\n-\u003edisconnect_notify().  They don\u0027t have to provide it if they don\u0027t\ncare.  But someone who wants to be notified before ci_parent is set to\nNULL can now be notified.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "e6bd07aee739566803425acdbf5cdb29919164e1",
      "tree": "e085a5065d06af2b7c0cab8bcd8fb4eb289344be",
      "parents": [
        "3fe6c5ce1176cf661dbe71fc43b627c1a742a89a"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Jul 06 23:33:17 2007 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Tue Jul 10 17:10:56 2007 -0700"
      },
      "message": "configfs: Convert subsystem semaphore to mutex\n\nConvert the su_sem member of struct configfs_subsystem to a struct\nmutex, as that\u0027s what it is. Also convert all the users and update\nDocumentation/configfs.txt and Documentation/configfs_example.c\naccordingly.\n\n[ Conflict in fs/dlm/config.c with commit\n  3168b0780d06ace875696f8a648d04d6089654e5 manually resolved. --Mark ]\n\nInspired-by: Satyam Sharma \u003cssatyam@cse.iitk.ac.in\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "afdf04ea098139e86147f63aad9c383cad3b6f37",
      "tree": "2050cfea8aeea2280182cc0263efbd3ad0505b34",
      "parents": [
        "03f981cf2ec95dd8bc43d2ecccaec4e83c8375e2"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Mar 05 15:49:49 2007 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Mar 14 14:37:21 2007 -0700"
      },
      "message": "configfs: add missing mutex_unlock()\n\nd_alloc() failure in configfs_register_subsystem() would fail to unlock\nthe mutex taken above.  Reorganize the exit path to ensure the unlock\nhappens.\n\nReported-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "754661f143e70d66eae6c48532ca245aa05dec0e",
      "tree": "c3ed0f7f96061931e497ed92d2b21294756b4831",
      "parents": [
        "9c2e08c592cd357a8330c34def1e8ecfdcf53275"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Mon Feb 12 00:55:38 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Feb 12 09:48:46 2007 -0800"
      },
      "message": "[PATCH] mark struct inode_operations const 1\n\nMany struct inode_operations in the kernel can be \"const\".  Marking them const\nmoves these to the .rodata section, which avoids false sharing with potential\ndirty data.  In addition it\u0027ll catch accidental writes at compile time to\nthese shared resources.\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c376222960ae91d5ffb9197ee36771aaed1d9f90",
      "tree": "7f431c42529fec77433d33490bd9f2a8c47ba091",
      "parents": [
        "1b135431abf5ea92e61bf4e91d93726c7b96da5f"
      ],
      "author": {
        "name": "Robert P. J. Day",
        "email": "rpjday@mindspring.com",
        "time": "Sat Feb 10 01:45:03 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sun Feb 11 10:51:27 2007 -0800"
      },
      "message": "[PATCH] Transform kmem_cache_alloc()+memset(0) -\u003e kmem_cache_zalloc().\n\nReplace appropriate pairs of \"kmem_cache_alloc()\" + \"memset(0)\" with the\ncorresponding \"kmem_cache_zalloc()\" call.\n\nSigned-off-by: Robert P. J. Day \u003crpjday@mindspring.com\u003e\nCc: \"Luck, Tony\" \u003ctony.luck@intel.com\u003e\nCc: Andi Kleen \u003cak@muc.de\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@steeleye.com\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nAcked-by: Joel Becker \u003cJoel.Becker@oracle.com\u003e\nCc: Steven Whitehouse \u003cswhiteho@redhat.com\u003e\nCc: Jan Kara \u003cjack@ucw.cz\u003e\nCc: Michael Halcrow \u003cmhalcrow@us.ibm.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Stephen Smalley \u003csds@tycho.nsa.gov\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Chris Wright \u003cchrisw@sous-sol.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "867fa491a2722cee6964a30dfda86e0e02dcb400",
      "tree": "ade467137c5a7b93e3e6562bd2ca4a397bf7b49f",
      "parents": [
        "a4669ed8ed982dab494c5d4f2b32921e5a6531d8"
      ],
      "author": {
        "name": "Josef \"Jeff\" Sipek",
        "email": "jsipek@cs.sunysb.edu",
        "time": "Fri Dec 08 02:36:47 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 08 08:28:43 2006 -0800"
      },
      "message": "[PATCH] configfs: change uses of f_{dentry, vfsmnt} to use f_path\n\nChange all the uses of f_{dentry,vfsmnt} to f_path.{dentry,mnt} in the\nconfigfs filesystem.\n\nSigned-off-by: Josef \"Jeff\" Sipek \u003cjsipek@cs.sunysb.edu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "58d206c2fa5cc0b35bf3ca48324d7633aa7d0412",
      "tree": "f0c9fe91c970734f17a35d22bd722d85b30b9986",
      "parents": [
        "25899deef46c226c49c53b42c00e0f032379c04b"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Mon Nov 20 03:24:00 2006 +0100"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Dec 01 18:29:12 2006 -0800"
      },
      "message": "configfs: make configfs_dirent_exists() static\n\nThis patch makes the needlessly global configfs_dirent_exists() static.\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "55ed16029d597622db8121270e687373b5e31722",
      "tree": "a8ffbd1fe4d867f48eada13fc24b6bbfc70f245d",
      "parents": [
        "1fabe1481fac9e01bf8bffa60a2307ef379aa5de"
      ],
      "author": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Oct 20 14:55:54 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Dec 01 18:28:34 2006 -0800"
      },
      "message": "configfs: mutex_lock_nested() fix\n\nconfigfs_unregister_subsystem() nests a pair of inode i_mutex acquisitions,\nand thus needs annotation via mutex_lock_nested().\n\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "d8c76e6f45c111c32a4b3e50a2adc9210737b0d8",
      "tree": "25521b59d48c6d8c9aec1af54dbe5008ad4b215b",
      "parents": [
        "9a53c3a783c2fa9b969628e65695c11c3e51e673"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "haveblue@us.ibm.com",
        "time": "Sat Sep 30 23:29:04 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 01 00:39:30 2006 -0700"
      },
      "message": "[PATCH] r/o bind mount prepwork: inc_nlink() helper\n\nThis is mostly included for parity with dec_nlink(), where we will have some\nmore hooks.  This one should stay pretty darn straightforward for now.\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nAcked-by: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b4c98f625fffee3a6f633082e9e4be3e952ca2ab",
      "tree": "ff7832706aeab7b16cbe18dd7976be7b56c49e55",
      "parents": [
        "e478bec0ba0a83a48a0f6982934b6de079e7e6b3"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Sep 13 11:01:19 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed Sep 20 15:46:14 2006 -0700"
      },
      "message": "configfs: Prevent duplicate subsystem names.\n\nFor all child objects, creation comes through mkdir(2), so duplicate names\nare prevented.\n\nSubsystems, though, are registered by client drivers at init_module()/__init\ntime.  This patch prevents duplicate subsystem names.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "e7515d065d09f6450c996a8fa206ad66569e183c",
      "tree": "fe9c2514c555b79c67ed29b7393b6c853b9d70f4",
      "parents": [
        "22dd0e88b70f5faa3a0101081e290431c3439189"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Fri Mar 10 11:42:30 2006 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Thu Jun 29 14:43:01 2006 -0700"
      },
      "message": "configfs: Clear up a few extra spaces where there should be TABs.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "f116629d03655adaf7832b93b03c99391d09d4a7",
      "tree": "526f689619817df3c23ab00e3228b4776bde2190",
      "parents": [
        "179e09172ab663b8587ecc46bb18a56a770304a9"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "mita@miraclelinux.com",
        "time": "Mon Jun 26 00:24:46 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jun 26 09:58:18 2006 -0700"
      },
      "message": "[PATCH] fs: use list_move()\n\nThis patch converts the combination of list_del(A) and list_add(A, B) to\nlist_move(A, B) under fs/.\n\nCc: Ian Kent \u003craven@themaw.net\u003e\nAcked-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCc: Neil Brown \u003cneilb@cse.unsw.edu.au\u003e\nCc: Hans Reiser \u003creiserfs-dev@namesys.com\u003e\nCc: Urban Widmark \u003curban@teststation.com\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\nSigned-off-by: Akinobu Mita \u003cmita@miraclelinux.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "eed7a0db460595b139428d252798a83f1e1ce1d3",
      "tree": "129db180cb8bac9810b6168802914c5ae2f619a3",
      "parents": [
        "84efad1a53dd05969094f9a2562b4e6666571c00"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Apr 11 21:37:20 2006 -0700"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed May 17 14:38:51 2006 -0700"
      },
      "message": "configfs: configfs_mkdir() failed to cleanup linkage.\n\nIf configfs_mkdir() errored in certain ways after the parent\u003c-\u003echild\nlinkage was already created, it would not undo the linkage.  Also,\ncomment the reference counting for clarity.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "84efad1a53dd05969094f9a2562b4e6666571c00",
      "tree": "15ddfe0250f5d59d56e989cd89c682096139c1f5",
      "parents": [
        "afae00ab45ea71d89086f924ebee6ca51c81e48e"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Mon Mar 27 18:46:09 2006 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Wed May 17 14:38:50 2006 -0700"
      },
      "message": "configfs: Fix a reference leak in configfs_mkdir().\n\nconfigfs_mkdir() failed to release the working parent reference in most\nexit paths.  Also changed the exit path for readability.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "cbca692c246874a3cc1b5a9b694add4c39e8bc18",
      "tree": "fd9ac8ed8387c72f444c7c78e57a1ff07427f0fb",
      "parents": [
        "a9e2ae39170d01937725e1fff2e606baaa71346c"
      ],
      "author": {
        "name": "Eric Sesterhenn",
        "email": "snakebyte@gmx.de",
        "time": "Thu Mar 23 00:36:54 2006 +0100"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Mon Apr 10 11:16:17 2006 -0700"
      },
      "message": "[PATCH] Bogus NULL pointer check in fs/configfs/dir.c\n\nWe check the \"group\" pointer after we dereference it.  This check is\nbogus, as it cannot be NULL coming in.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "4b6f5d20b04dcbc3d888555522b90ba6d36c4106",
      "tree": "420f271eaef7d3def7d4433b151c3cb6d7a54770",
      "parents": [
        "99ac48f54a91d02140c497edc31dc57d4bc5c85d"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@infradead.org",
        "time": "Tue Mar 28 01:56:42 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Mar 28 09:16:06 2006 -0800"
      },
      "message": "[PATCH] Make most file operations structs in fs/ const\n\nThis is a conversion to make the various file_operations structs in fs/\nconst.  Basically a regexp job, with a few manual fixups\n\nThe goal is both to increase correctness (harder to accidentally write to\nshared datastructures) and reducing the false sharing of cachelines with\nthings that get dirty in .data (while .rodata is nicely read only and thus\ncache clean)\n\nSigned-off-by: Arjan van de Ven \u003carjan@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3d0f89bb169482d26d5aa4e82e763077e7e9bc4d",
      "tree": "2d2317ce1417202322e3f715534fab80394bd5d2",
      "parents": [
        "62ca3d2603571dc2b1b4c1368e19d44b599062e2"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Wed Jan 25 13:31:07 2006 -0800"
      },
      "committer": {
        "name": "Mark Fasheh",
        "email": "mark.fasheh@oracle.com",
        "time": "Fri Feb 03 14:01:05 2006 -0800"
      },
      "message": "configfs: Add permission and ownership to configfs objects.\n\nconfigfs always made item and attribute ownership root.root and\npermissions based on a umask of 022.  Add -\u003esetattr() to allow\nchown(2)/chmod(2), and persist the changes for the lifetime of the\nitems and attributes.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\nSigned-off-by: Mark Fasheh \u003cmark.fasheh@oracle.com\u003e\n"
    },
    {
      "commit": "1b1dcc1b57a49136f118a0f16367256ff9994a69",
      "tree": "b0b36d4f41d28c9d6514fb309d33c1a084d6309b",
      "parents": [
        "794ee1baee1c26be40410233e6c20bceb2b03c08"
      ],
      "author": {
        "name": "Jes Sorensen",
        "email": "jes@sgi.com",
        "time": "Mon Jan 09 15:59:24 2006 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@hera.kernel.org",
        "time": "Mon Jan 09 15:59:24 2006 -0800"
      },
      "message": "[PATCH] mutex subsystem, semaphore to mutex: VFS, -\u003ei_sem\n\nThis patch converts the inode semaphore to a mutex. I have tested it on\nXFS and compiled as much as one can consider on an ia64. Anyway your\nluck with it might be different.\n\nModified-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n\n(finished the conversion)\n\nSigned-off-by: Jes Sorensen \u003cjes@sgi.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "7063fbf2261194f72ee75afca67b3b38b554b5fa",
      "tree": "7bfe4eeab8ce784b767cf30886623d456c384718",
      "parents": [
        "88026842b0a760145aa71d69e74fbc9ec118ca44"
      ],
      "author": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Thu Dec 15 14:29:43 2005 -0800"
      },
      "committer": {
        "name": "Joel Becker",
        "email": "joel.becker@oracle.com",
        "time": "Tue Jan 03 11:45:28 2006 -0800"
      },
      "message": "[PATCH] configfs: User-driven configuration filesystem\n\nConfigfs, a file system for userspace-driven kernel object configuration.\nThe OCFS2 stack makes extensive use of this for propagation of cluster\nconfiguration information into kernel.\n\nSigned-off-by: Joel Becker \u003cjoel.becker@oracle.com\u003e\n"
    }
  ]
}
