)]}'
{
  "log": [
    {
      "commit": "3077a260e9f316b611436b1506eec9cc5c4f8aa6",
      "tree": "43b7d5faa5f204904c713c463015792d9ff56b01",
      "parents": [
        "a242b44da6feb604c4c659b78f63dedb69b2d4a3"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Tue Aug 09 10:07:59 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Aug 09 12:08:22 2005 -0700"
      },
      "message": "[PATCH] cpuset release ABBA deadlock fix\n\nFix possible cpuset_sem ABBA deadlock if \u0027notify_on_release\u0027 set.\n\nFor a particular usage pattern, creating and destroying cpusets fairly\nfrequently using notify_on_release, on a very large system, this deadlock\ncan be seen every few days.  If you are not using the cpuset\nnotify_on_release feature, you will never see this deadlock.\n\nThe existing code, on task exit (or cpuset deletion) did:\n\n  get cpuset_sem\n  if cpuset marked notify_on_release and is ready to release:\n    compute cpuset path relative to /dev/cpuset mount point\n    call_usermodehelper() forks /sbin/cpuset_release_agent with path\n  drop cpuset_sem\n\nUnfortunately, the fork in call_usermodehelper can allocate memory, and\nallocating memory can require cpuset_sem, if the mems_generation values\nchanged in the interim.  This results in an ABBA deadlock, trying to obtain\ncpuset_sem when it is already held by the current task.\n\nTo fix this, I put the cpuset path (which must be computed while holding\ncpuset_sem) in a temporary buffer, to be used in the call_usermodehelper\ncall of /sbin/cpuset_release_agent only _after_ dropping cpuset_sem.\n\nSo the new logic is:\n\n  get cpuset_sem\n  if cpuset marked notify_on_release and is ready to release:\n    compute cpuset path relative to /dev/cpuset mount point\n    stash path in kmalloc\u0027d buffer\n  drop cpuset_sem\n  call_usermodehelper() forks /sbin/cpuset_release_agent with path\n  free path\n\nThe sharp eyed reader might notice that this patch does not contain any\ncalls to kmalloc.  The existing code in the check_for_release() routine was\nalready kmalloc\u0027ing a buffer to hold the cpuset path.  In the old code, it\njust held the buffer for a few lines, over the cpuset_release_agent() call\nthat in turn invoked call_usermodehelper().  In the new code, with the\napplication of this patch, it returns that buffer via the new char\n**ppathbuf parameter, for later use and freeing in cpuset_release_agent(),\nwhich is called after cpuset_sem is dropped.  Whereas the old code has just\none call to cpuset_release_agent(), right in the check_for_release()\nroutine, the new code has three calls to cpuset_release_agent(), from the\nvarious places that a cpuset can be released.\n\nThis patch has been build and booted on SN2, and passed a stress test that\npreviously hit the deadlock within a few seconds.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d9fd8a6d443b509147280f058d4e59f0b796a323",
      "tree": "427385e403fc0d4282be19732a00ddfd224c1461",
      "parents": [
        "207a7ba8dc000e1b13acac97f3736810dd86e8e2"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "rdunlap@xenotime.net",
        "time": "Wed Jul 27 11:45:11 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Jul 27 16:26:06 2005 -0700"
      },
      "message": "[PATCH] kernel/cpuset.c: add kerneldoc, fix typos\n\nAdd kerneldoc to kernel/cpuset.c\n\nFix cpuset typos in init/Kconfig\n\nSigned-off-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "85d7b94981e2e919697bc235aad7367b33c3864b",
      "tree": "79d7705a897abde11b5f2f967bf24487aaeea354",
      "parents": [
        "1a20ff27ef75d866730ee796acd811a925af762f"
      ],
      "author": {
        "name": "Dinakar Guniguntala",
        "email": "dino@in.ibm.com",
        "time": "Sat Jun 25 14:57:34 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Jun 25 16:24:45 2005 -0700"
      },
      "message": "[PATCH] Dynamic sched domains: cpuset changes\n\nAdds the core update_cpu_domains code and updated cpusets documentation\n\nSigned-off-by: Dinakar Guniguntala \u003cdino@in.ibm.com\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nAcked-by: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5f45f1a78fbac3cc859ec10c5366e97d20d40fa2",
      "tree": "bafacf11adbfb4eebf2d2d80d92e1fe2d9c02b18",
      "parents": [
        "ac20427ef6aa63da663bdc88b71d16f7394f5e23"
      ],
      "author": {
        "name": "Christoph Hellwig",
        "email": "hch@lst.de",
        "time": "Thu Jun 23 00:09:12 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Thu Jun 23 09:45:20 2005 -0700"
      },
      "message": "[PATCH] remove duplicate get_dentry functions in various places\n\nVarious filesystem drivers have grown a get_dentry() function that\u0027s a\nduplicate of lookup_one_len, except that it doesn\u0027t take a maximum length\nargument and doesn\u0027t check for \\0 or / in the passed in filename.\n\nSwitch all these places to use lookup_one_len.\n\nSigned-off-by: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2efe86b809d97debaaf9fcc13b041aedf15bd3d2",
      "tree": "87e039397918f4c5b0a21d798589a8ce517bfa2d",
      "parents": [
        "88c1834633341bbb94e315433067496338bff4ad"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri May 27 02:02:43 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Fri May 27 08:07:26 2005 -0700"
      },
      "message": "[PATCH] cpuset exit NULL dereference fix\n\nThere is a race in the kernel cpuset code, between the code\nto handle notify_on_release, and the code to remove a cpuset.\nThe notify_on_release code can end up trying to access a\ncpuset that has been removed.  In the most common case, this\ncauses a NULL pointer dereference from the routine cpuset_path.\nHowever all manner of bad things are possible, in theory at least.\n\nThe existing code decrements the cpuset use count, and if the\ncount goes to zero, processes the notify_on_release request,\nif appropriate.  However, once the count goes to zero, unless we\nare holding the global cpuset_sem semaphore, there is nothing to\nstop another task from immediately removing the cpuset entirely,\nand recycling its memory.\n\nThe obvious fix would be to always hold the cpuset_sem\nsemaphore while decrementing the use count and dealing with\nnotify_on_release.  However we don\u0027t want to force a global\nsemaphore into the mainline task exit path, as that might create\na scaling problem.\n\nThe actual fix is almost as easy - since this is only an issue\nfor cpusets using notify_on_release, which the top level big\ncpusets don\u0027t normally need to use, only take the cpuset_sem\nfor cpusets using notify_on_release.\n\nThis code has been run for hours without a hiccup, while running\na cpuset create/destroy stress test that could crash the existing\nkernel in seconds.  This patch applies to the current -linus\ngit kernel.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nAcked-by: Simon Derr \u003csimon.derr@bull.net\u003e\nAcked-by: Dinakar Guniguntala \u003cdino@in.ibm.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9a8488965dc4c42a4a1f84cab907c7d6c5cf1563",
      "tree": "58581a02cc06bb1a2991209c9e4d559353cbec6f",
      "parents": [
        "b52402c783d8c16b11f146a244bb21086a94bf84"
      ],
      "author": {
        "name": "Benoit Boissinot",
        "email": "benoit.boissinot@ens-lyon.org",
        "time": "Sat Apr 16 15:25:59 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:25:59 2005 -0700"
      },
      "message": "[PATCH] cpuset: remove function attribute const\n\ngcc-4 warns with\ninclude/linux/cpuset.h:21: warning: type qualifiers ignored on function\nreturn type\n\ncpuset_cpus_allowed is declared with const\nextern const cpumask_t cpuset_cpus_allowed(const struct task_struct *p);\n\nFirst const should be __attribute__((const)), but the gcc manual\nexplains that:\n\n\"Note that a function that has pointer arguments and examines the data\npointed to must not be declared const. Likewise, a function that calls a\nnon-const function usually must not be const. It does not make sense for\na const function to return void.\"\n\nThe following patch remove const from the function declaration.\n\nSigned-off-by: Benoit Boissinot \u003cbenoit.boissinot@ens-lyon.org\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
