)]}'
{
  "log": [
    {
      "commit": "40d24704091c8a29a4c99d25670f1996749aea6f",
      "tree": "511140e99865bd1610a6df1bd81c9321b7749005",
      "parents": [
        "9e08a3c5aec5b745e844328bcbc16458b6118faf"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Oct 08 09:24:22 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:20:47 2007 -0400"
      },
      "message": "NFS: Fix a connectathon regression in NFSv3 and NFSv4\n\nWe\u0027re failing basic test6 against Linux servers because they lack a correct\nchange attribute. The fix is to assume that we always want to invalidate\nthe readdir caches when we call update_changeattr and/or\nnfs_post_op_update_inode on a directory.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "9e08a3c5aec5b745e844328bcbc16458b6118faf",
      "tree": "0715485e16ddee34478cdf1ac8432944f6cc354e",
      "parents": [
        "220bcc2afd7011b3e0569fc178331fa983c92c1b"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Oct 08 14:10:31 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:20:45 2007 -0400"
      },
      "message": "NFS: Use nfs_refresh_inode() in ops that aren\u0027t expected to change the inode\n\nnfs_post_op_update_inode() is really only meant to be used if we expect the\ninode and its attributes to have changed in some way.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "d75340cc4de5c187fbf0bba234309ca86cf0a2fb",
      "tree": "aa53e3248bf3d61283f94187ffc83b18fa06bb7a",
      "parents": [
        "216d5d06883edfaf992ada0d72a2a22fdfdbd296"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Oct 01 21:42:01 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:20:06 2007 -0400"
      },
      "message": "NFSv4: Fix nfs_atomic_open() to set the verifier on negative dentries too\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "d4d9cdcb470784df76304f75d0ce88f20f15fa6a",
      "tree": "7066e4640947f078855b47501e69f76ff775a834",
      "parents": [
        "5724ab37872042176916441930e78fd353be1e5e"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 02 18:38:53 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:19:27 2007 -0400"
      },
      "message": "NFS: Don\u0027t hash the negative dentry when optimising for an O_EXCL open\n\nWe don\u0027t want to leave an unverified hashed negative dentry if the\nexclusive create fails to complete.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "70ca88521fc7bee8ef0fc22033a439d4b9a2c70d",
      "tree": "8e3943bfac55b59dc127393f8da0ecfc4aba424b",
      "parents": [
        "b64e8a5ef758888cb42b7c105dcfaaf51aab1baf"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sun Sep 30 15:21:24 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:19:15 2007 -0400"
      },
      "message": "NFS: Fake up \u0027wcc\u0027 attributes to prevent cache invalidation after write\n\nNFSv2 and v4 don\u0027t offer weak cache consistency attributes on WRITE calls.\nIn NFSv3, returning wcc data is optional. In all cases, we want to prevent\nthe client from invalidating our cached data whenever -\u003ewrite_done()\nattempts to update the inode attributes.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "8850df999cd16aa141098e2e8be04a590276f3cc",
      "tree": "de5d934bff3ae6595dcfcf6d725dd991bb242f21",
      "parents": [
        "c4812998398d9cbce8646494704c52297359ede0"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 28 17:20:07 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:19:06 2007 -0400"
      },
      "message": "NFS: Fix atime revalidation in read()\n\nNFSv3 will correctly update atime on a read() call, so there is no need to\nset the NFS_INO_INVALID_ATIME flag unless the call to nfs_refresh_inode()\nfails.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "c4812998398d9cbce8646494704c52297359ede0",
      "tree": "8c7b786779b03d1960c25800a7a27a10f8318e99",
      "parents": [
        "57fa76f2da05d0fee597b26bbc1f05242252beab"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 28 17:11:45 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:19:03 2007 -0400"
      },
      "message": "NFS: Fix atime revalidation in readdir()\n\nNFSv3 will correctly update atime on a readdir call, so there is no need to\nset the NFS_INO_INVALID_ATIME flag unless the call to nfs_refresh_inode()\nfails.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "17cadc95372e28024be0874e67329c1862912c5d",
      "tree": "0785ba140643d87c23e7bca67d1f2522214a0d12",
      "parents": [
        "e323ea46d95d7f8c789effd1194dfc120284dbbd"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Sep 27 10:07:31 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:18:55 2007 -0400"
      },
      "message": "NFS: Don\u0027t force a dcache revalidation if nfs_wcc_update_inode succeeds\n\nThe reason is that if the weak cache consistency update was successful,\nthen we know that our client must be the only one that changed the\ndirectory, and we\u0027ve already updated the dcache to reflect the change.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "76b32999dfff6e59252a8af17a5671a4cf3bcf9b",
      "tree": "6494e3a368e120668052e469c08c69a5d8d0b3f4",
      "parents": [
        "af22f94ae02ab9dd4fd7fe628c8434a59cc293be"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Aug 10 17:45:11 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:18:38 2007 -0400"
      },
      "message": "NFSv4: Make NFSv4 ACCESS calls return attributes too...\n\nIt doesn\u0027t really make sense to cache an access call without also\nrevalidating the attributes.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "af22f94ae02ab9dd4fd7fe628c8434a59cc293be",
      "tree": "e3794a90fc0720c33266dfa682e264a4041e7a14",
      "parents": [
        "cd3758e37ddea66fccca7d93c4b601e8a2e51926"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Aug 10 17:45:10 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:18:34 2007 -0400"
      },
      "message": "NFSv4: Simplify _nfs4_do_access()\n\nCurrently, _nfs4_do_access() is just a copy of nfs_do_access() with added\nconversion of the open flags into an access mask. This patch merges the\nduplicate functionality.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "cd3758e37ddea66fccca7d93c4b601e8a2e51926",
      "tree": "07566d3ee457524a97b534a4f214b9178b1278c8",
      "parents": [
        "c03025d55540bd648f2546659090140ecc835572"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Aug 10 17:44:32 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:18:31 2007 -0400"
      },
      "message": "NFS: Replace file-\u003eprivate_data with calls to nfs_file_open_context()\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "4e769b934e7638038e232c05b64f644e7269a90f",
      "tree": "6508c1d273f22d3704eb849fb90404bade7cb4a7",
      "parents": [
        "50e437d522a6cc34a882b2f740297f1b6b4c3af3"
      ],
      "author": {
        "name": "Peter Staubach",
        "email": "staubach@redhat.com",
        "time": "Fri Aug 03 15:07:10 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Oct 09 17:15:29 2007 -0400"
      },
      "message": "64 bit ino support for NFS client\n\nHi.\n\nAttached is a patch to modify the NFS client code to support\n64 bit ino\u0027s, as appropriate for the system and the NFS\nprotocol version.\n\nThe code basically just expand the NFS interfaces for routines\nwhich handle ino\u0027s from using ino_t to u64 and then uses the\nfileid in the nfs_inode instead of i_ino in the inode.  The\ncode paths that were updated are in the getattr method and\nthe readdir methods.\n\nThis should be no real change on 64 bit platforms.  Since\nthe ino_t is an unsigned long, it would already be 64 bits\nwide.\n\n    Thanx...\n\n           ps\n\nSigned-off-by: Peter Staubach \u003cstaubach@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "deee9369b993b52a8e2f25683b4a67be7a65e8ae",
      "tree": "d5d4f56c77ac21bc4f693ceaacdd3b6c87a00e56",
      "parents": [
        "65bbf6bdbba0f74e254f706bfb00fe533974f4f1"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Aug 27 11:33:00 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Sep 01 10:14:38 2007 -0400"
      },
      "message": "NFSv4: Ensure that we pass the correct dentry to nfs4_intent_set_file\n\nThis patch fixes an Oops that was reported by Gabriel Barazer.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "65bbf6bdbba0f74e254f706bfb00fe533974f4f1",
      "tree": "abf43f323a6320249e4dbe032fe32f2e403563cb",
      "parents": [
        "560aef74503e928f44ddbf481b8b02d9cef37dbf"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Aug 27 09:57:46 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Sep 01 10:14:37 2007 -0400"
      },
      "message": "NFSv4: Fix a typo in _nfs4_do_open_reclaim\n\nThis should fix the following Oops reported by Jeff Garzik:\n\nkernel BUG at fs/nfs/nfs4xdr.c:1040!\ninvalid opcode: 0000 [1] SMP \nCPU 0 \nModules linked in: nfs lockd sunrpc af_packet\nipv6 cpufreq_ondemand acpi_cpufreq battery floppy nvram sg snd_hda_intel\nata_generic snd_pcm_oss snd_mixer_oss snd_pcm i2c_i801 snd_page_alloc e1000\nfirewire_ohci ata_piix i2c_core sr_mod cdrom sata_sil ahci libata sd_mod\nscsi_mod ext3 jbd ehci_hcd uhci_hcd\nPid: 16353, comm: 10.10.10.1-recl Not tainted 2.6.23-rc3 #1\nRIP: 0010:[\u003cffffffff88240980\u003e] [\u003cffffffff88240980\u003e] :nfs:encode_open+0x1c0/0x330\nRSP: 0018:ffff8100467c5c60  EFLAGS: 00010202\nRAX: ffff81000f89b8b8 RBX: 00000000697a6f6d RCX: ffff81000f89b8b8\nRDX: 0000000000000004 RSI: 0000000000000004 RDI: ffff8100467c5c80\nRBP: ffff8100467c5c80 R08: ffff81000f89bc30 R09: ffff81000f89b83f\nR10: 0000000000000001 R11: ffffffff881e79e0 R12: ffff81003cbd1808\nR13: ffff81000f89b860 R14: ffff81005fc984e0 R15: ffffffff88240af0\nFS:  0000000000000000(0000) GS:ffffffff8052a000(0000) knlGS:0000000000000000\nCS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b\nCR2: 00002adb9e51a030 CR3: 000000007ea7e000 CR4: 00000000000006e0\nDR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\nDR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\nProcess 10.10.10.1-recl (pid: 16353, threadinfo ffff8100467c4000, task ffff8100038ce780)\nStack:  ffff81004aeb6a40 ffff81003cbd1808 ffff81003cbd1808 ffffffff88240b5d\n ffff81000f89b8bc ffff81005fc984e8 ffff81000f89bc30 ffff81005fc984e8\n 0000000300000000 0000000000000000 0000000000000000 ffff81003cbd1800\nCall Trace:\n [\u003cffffffff88240b5d\u003e] :nfs:nfs4_xdr_enc_open_noattr+0x6d/0x90\n [\u003cffffffff881e74b7\u003e] :sunrpc:rpcauth_wrap_req+0x97/0xf0\n [\u003cffffffff88240af0\u003e] :nfs:nfs4_xdr_enc_open_noattr+0x0/0x90\n [\u003cffffffff881df57a\u003e] :sunrpc:call_transmit+0x18a/0x290\n [\u003cffffffff881e5e7b\u003e] :sunrpc:__rpc_execute+0x6b/0x290\n [\u003cffffffff881dff76\u003e] :sunrpc:rpc_do_run_task+0x76/0xd0\n [\u003cffffffff882373f6\u003e] :nfs:_nfs4_proc_open+0x76/0x230\n [\u003cffffffff88237a2e\u003e] :nfs:nfs4_open_recover_helper+0x5e/0xc0\n [\u003cffffffff88237b74\u003e] :nfs:nfs4_open_recover+0xe4/0x120\n [\u003cffffffff88238e14\u003e] :nfs:nfs4_open_reclaim+0xa4/0xf0\n [\u003cffffffff882413c5\u003e] :nfs:nfs4_reclaim_open_state+0x55/0x1b0\n [\u003cffffffff882417ea\u003e] :nfs:reclaimer+0x2ca/0x390\n [\u003cffffffff88241520\u003e] :nfs:reclaimer+0x0/0x390\n [\u003cffffffff8024e59b\u003e] kthread+0x4b/0x80\n [\u003cffffffff8020cad8\u003e] child_rip+0xa/0x12\n [\u003cffffffff8024e550\u003e] kthread+0x0/0x80\n [\u003cffffffff8020cace\u003e] child_rip+0x0/0x12\n\n\nCode: 0f 0b eb fe 48 89 ef c7 00 00 00 00 02 be 08 00 00 00 e8 79 \nRIP  [\u003cffffffff88240980\u003e] :nfs:encode_open+0x1c0/0x330\n RSP \u003cffff8100467c5c60\u003e\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "45328c354e8ae16b67cb3adb72ab57459f9e5fd6",
      "tree": "f0c4271a0c9f6b8d9b499f22fffc1804419d49c8",
      "parents": [
        "ba683031fae115d61c6b5f4c675cc27f6e9576d2"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Jul 26 17:47:34 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Aug 07 15:13:19 2007 -0400"
      },
      "message": "NFS: Fix NFSv4 open stateid regressions\n\nDo not allow cached open for O_RDONLY or O_WRONLY unless the file has been\npreviously opened in these modes.\n\nAlso Fix the calculation of the mode in nfs4_close_prepare. We should only\nissue an OPEN_DOWNGRADE if we\u0027re sure that we will still be holding the\ncorrect open modes. This may not be the case if we\u0027ve been doing delegated\nopens.\n\nFinally, there is no need to adjust the open mode bit flags in\nnfs4_close_done(): that has already been done in nfs4_close_prepare().\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "e4eff1a622edd6ab7b73acd5d8763aa2fa3fee49",
      "tree": "257d6675733d4af122a77054281e1d7d5062d904",
      "parents": [
        "4fdc17b2a7f4d9db5b08e0f963d0027f714e4104"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Jul 14 15:39:58 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Jul 19 15:21:39 2007 -0400"
      },
      "message": "SUNRPC: Clean up the sillyrename code\n\nFix a couple of bugs:\n - Don\u0027t rely on the parent dentry still being valid when the call completes.\n   Fixes a race with shrink_dcache_for_umount_subtree()\n\n - Don\u0027t remove the file if the filehandle has been labelled as stale.\n\nFix a couple of inefficiencies\n - Remove the global list of sillyrenamed files. Instead we can cache the\n   sillyrename information in the dentry-\u003ed_fsdata\n - Move common code from unlink_setup/unlink_done into fs/nfs/unlink.c\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "4fdc17b2a7f4d9db5b08e0f963d0027f714e4104",
      "tree": "502aacc94e06962c2f3352b6ced1146245158be1",
      "parents": [
        "3062c532ad410fe0e8320566fe2879a396be6701"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Jul 14 15:39:57 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Jul 19 15:21:39 2007 -0400"
      },
      "message": "NFS: Introduce struct nfs_removeargs+nfs_removeres\n\nWe need a common structure for setting up an unlink() rpc call in order to\nfix the asynchronous unlink code.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "9936781d0147e13cbc6df02f5265e0b9999ce3cf",
      "tree": "a24b01b576cd04f5eb6b9f61da5cfed650d50603",
      "parents": [
        "56659e9926ef5996398924c799ecac39ca8b6223"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 17 21:52:41 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Jul 19 15:09:03 2007 -0400"
      },
      "message": "NFSv4: Try to recover from getfh failures in nfs4_xdr_dec_open\n\nTry harder to recover the open state if the server failed to return a\nfilehandle.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "56659e9926ef5996398924c799ecac39ca8b6223",
      "tree": "747690cbe44d8859090dedc6ba26d326d4ecac8d",
      "parents": [
        "365c8f589afbc27d8cf42d396475017bc1c462fd"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 17 21:52:39 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Jul 19 15:09:03 2007 -0400"
      },
      "message": "NFSv4: \u0027constify\u0027 lookup arguments.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "6f220ed5a84d87645a84ae22105dc565f3f248b5",
      "tree": "f7a9cc2a178da84c656f794248e1a55c6f5e09d3",
      "parents": [
        "8cd69e1bc7970bfb032b425043cc0d4e4345c74c"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 17 21:50:45 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Jul 19 15:09:03 2007 -0400"
      },
      "message": "NFSv4: Fix open state recovery\n\nEnsure that opendata-\u003estate is always initialised when we do state\nrecovery.\n\nEnsure that we set the filehandle in the case where we\u0027re doing an\n\"OPEN_CLAIM_PREVIOUS\" call due to a server reboot.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "137d6acaa64afa4cf3d977417424e731ea04705a",
      "tree": "ffafcc606d8b76c07873abd87ec176b75d79b870",
      "parents": [
        "c98451bdb2f3e6d6cc1e03adad641e9497512b49"
      ],
      "author": {
        "name": "Frank Filz",
        "email": "ffilzlnx@us.ibm.com",
        "time": "Mon Jul 09 15:32:29 2007 -0700"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:49 2007 -0400"
      },
      "message": "NFSv4: Make sure unlock is really an unlock when cancelling a lock\n\nI ran into a curious issue when a lock is being canceled. The\ncancellation results in a lock request to the vfs layer instead of an\nunlock request. This is particularly insidious when the process that\nowns the lock is exiting. In that case, sometimes the erroneous lock is\napplied AFTER the process has entered zombie state, preventing the lock\nfrom ever being released. Eventually other processes block on the lock\ncausing a slow degredation of the system. In the 2.6.16 kernel this was\ninvestigated on, the problem is compounded by the fact that the cl_sem\nis held while blocking on the vfs lock, which results in most processes\naccessing the nfs file system in question hanging.\n\nIn more detail, here is how the situation occurs:\n\nfirst _nfs4_do_setlk():\n\nstatic int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *fl, int reclaim)\n...\n        ret \u003d nfs4_wait_for_completion_rpc_task(task);\n        if (ret \u003d\u003d 0) {\n...\n        } else\n                data-\u003ecancelled \u003d 1;\n\nthen nfs4_lock_release():\n\nstatic void nfs4_lock_release(void *calldata)\n...\n        if (data-\u003ecancelled !\u003d 0) {\n                struct rpc_task *task;\n                task \u003d nfs4_do_unlck(\u0026data-\u003efl, data-\u003ectx, data-\u003elsp,\n                                data-\u003earg.lock_seqid);\n\nThe problem is the same file_lock that was passed in to _nfs4_do_setlk()\ngets passed to nfs4_do_unlck() from nfs4_lock_release(). So the type is\nstill F_RDLCK or FWRLCK, not F_UNLCK. At some point, when cancelling the\nlock, the type needs to be changed to F_UNLCK. It seemed easiest to do\nthat in nfs4_do_unlck(), but it could be done in nfs4_lock_release().\nThe concern I had with doing it there was if something still needed the\noriginal file_lock, though it turns out the original file_lock still\nneeds to be modified by nfs4_do_unlck() because nfs4_do_unlck() uses the\noriginal file_lock to pass to the vfs layer, and a copy of the original\nfile_lock for the RPC request.\n\nIt seems like the simplest solution is to force all situations where\nnfs4_do_unlck() is being used to result in an unlock, so with that in\nmind, I made the following change:\n\nSigned-off-by: Frank Filz \u003cffilzlnx@us.ibm.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "8bda4e4c98d14566fc1a354c62fb59d70cc49b97",
      "tree": "d137e784db33d1347a6b03d22044e9a41e10967f",
      "parents": [
        "1ac7e2fd35905f3d44df06568bca5f9d140369b3"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Jul 09 10:45:42 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:43 2007 -0400"
      },
      "message": "NFSv4: Fix up stateid locking...\n\nWe really don\u0027t need to grab both the state-\u003eso_owner and the\ninode-\u003ei_lock.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "1ac7e2fd35905f3d44df06568bca5f9d140369b3",
      "tree": "86b80e5d17169f801f19427563d68728b8e3385e",
      "parents": [
        "6ee412689027dc7954453aed392ab5c7599c0f73"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sun Jul 08 21:04:15 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:43 2007 -0400"
      },
      "message": "NFSv4: Clean up the callers of nfs4_open_recover_helper()\n\nRely on nfs4_try_open_cached() when appropriate.\n\nAlso fix an RCU violation in _nfs4_do_open_reclaim()\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "6ee412689027dc7954453aed392ab5c7599c0f73",
      "tree": "71f09219acaf905e779f9cecf2d0256ba34d6526",
      "parents": [
        "aac00a8d0a53097063da532cbdf0b8775a4dcd53"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sun Jul 08 14:11:36 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:43 2007 -0400"
      },
      "message": "NFSv4: Don\u0027t call OPEN if we already have an open stateid for a file\n\nIf we already have a stateid with the correct open mode for a given file,\nthen we can reuse that stateid instead of re-issuing an OPEN call without\nviolating the close-to-open caching semantics.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "aac00a8d0a53097063da532cbdf0b8775a4dcd53",
      "tree": "4a83d1a25dd23d63cbcb0fe5c40b2f857ebcc19e",
      "parents": [
        "3e309914a15333a5493058e4927e979c7434ae44"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Jul 05 19:02:21 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:43 2007 -0400"
      },
      "message": "NFSv4: Check for the existence of a delegation in nfs4_open_prepare()\n\nWe should not be calling open() on an inode that has a delegation unless\nwe\u0027re doing a reclaim.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "3e309914a15333a5493058e4927e979c7434ae44",
      "tree": "c9f5a86c7088313cf2c0648e313e4e918b4189d1",
      "parents": [
        "1b370bc28f90955bccda8be5e7d7047ad1381da7"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Jul 07 13:19:59 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:42 2007 -0400"
      },
      "message": "NFSv4: Clean up _nfs4_proc_open()\n\nUse a flag instead of the \u0027data-\u003erpc_status \u003d -ENOMEM hack.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "1b370bc28f90955bccda8be5e7d7047ad1381da7",
      "tree": "a63507ba14abd869a6645fc604e62f854a39af54",
      "parents": [
        "6f43ddccb31b5bd2297878f6f3735d45fd4dfce3"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Jul 07 08:04:47 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:42 2007 -0400"
      },
      "message": "NFSv4: Allow nfs4_opendata_to_nfs4_state to return errors.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "6f43ddccb31b5bd2297878f6f3735d45fd4dfce3",
      "tree": "2b21ec002ca6868df0d7d39a1044fff5ff97df87",
      "parents": [
        "003707c7225dbd4bf879b6c204743554de0a08d6"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sun Jul 08 16:49:11 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:42 2007 -0400"
      },
      "message": "NFSv4: Improve the debugging of bad sequence id errors...\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "003707c7225dbd4bf879b6c204743554de0a08d6",
      "tree": "b5ca79744badf011d15111d819f629cfc69452ba",
      "parents": [
        "0f9f95e0ad1f9d07d77832c5b60f7d30440602ee"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Jul 05 18:07:55 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:41 2007 -0400"
      },
      "message": "NFSv4: Always use the delegation if we have one\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "0f9f95e0ad1f9d07d77832c5b60f7d30440602ee",
      "tree": "7d46ab8497ccd0dbeb151a6e45113379da8f22f3",
      "parents": [
        "412c77cee6d6e73fbe1dc3d67f52163efed33fc4"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sun Jul 08 16:19:56 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:41 2007 -0400"
      },
      "message": "NFSv4: Clean up confirmation of sequence ids...\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "13437e12fb43cb7e285ff59248f781c91578eafe",
      "tree": "450c618a4655161b4c534d700b9111cf7c349e6f",
      "parents": [
        "901630278469c0d7610554227f39ed2d02d0d270"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jul 06 15:10:43 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:41 2007 -0400"
      },
      "message": "NFSv4: Support recalling delegations by stateid part 2\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "2ced46c27058710a6d731d6eca77f1dd14ccde75",
      "tree": "d505d922873c7b3ade6426d0e9924b1c0c380614",
      "parents": [
        "549d6ed5e85003370fe858e70864a71882491d28"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 03 23:48:13 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:40 2007 -0400"
      },
      "message": "NFSv4: Fix up a bug in nfs4_open_recover()\n\nDon\u0027t clobber the delegation info...\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "549d6ed5e85003370fe858e70864a71882491d28",
      "tree": "a5094cbce64f07560f0e3511279260e40c0ae669",
      "parents": [
        "1c816efa245111c52858fbe55d99474f3c149dd3"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 03 16:42:45 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:40 2007 -0400"
      },
      "message": "NFSv4: set the delegation in nfs4_opendata_to_nfs4_state\n\nThis ensures that nfs4_open_release() and nfs4_open_confirm_release()\ncan now handle an eventual delegation that was returned with out open.\nAs such, it fixes a delegation \"leak\" when the user breaks out of an open\ncall.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "1b45c46cf75d9c48eb611d5cc41607ac1f046606",
      "tree": "866cbb5a15aec70a3da159da663f435475a2db4f",
      "parents": [
        "9f958ab8858c75df800e0121b1920182820cbc39"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 03 13:04:56 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:40 2007 -0400"
      },
      "message": "NFSv4: Fix atomic open for execute...\n\nCurrently we do not check for the FMODE_EXEC flag as we should. For that\nparticular case, we need to perform an ACCESS call to the server in order\nto check that the file is executable.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "9f958ab8858c75df800e0121b1920182820cbc39",
      "tree": "754bb9d68aac077825b40796e2acf716bce5df08",
      "parents": [
        "88d9093997e1c73ca98db41b5605dbde7783845f"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Jul 02 13:58:33 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:39 2007 -0400"
      },
      "message": "NFSv4: Reduce the chances of an open_owner identifier collision\n\nCurrently we just use a 32-bit counter.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "4e56e082dd89266d320ccfbc7bd0102186a765ac",
      "tree": "634bd7183db3bf3c380f97cff886528bf15fbc8a",
      "parents": [
        "8a702bbb7ddaa2e78c17dbaaf48e3cd5943676f0"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sun Jul 01 18:13:52 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:38 2007 -0400"
      },
      "message": "NFSv4: Clean up _nfs4_proc_lookup() vs _nfs4_proc_lookupfh()\n\nThey differ only slightly in the arguments they take. Why have they not\nbeen merged?\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "c6d00e639bdec5f33460bc95bae4efda7177a6ed",
      "tree": "86c00c756f3212ea54203dc62619f5cd6b4f153e",
      "parents": [
        "3bec63db55463365110d00721ed60a31e4614cb6"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sun Jun 17 16:02:44 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:28 2007 -0400"
      },
      "message": "NFSv4: Convert struct nfs4_opendata to use struct kref\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "aa53ed541a1fec78a78d02afc8b042d040cc080d",
      "tree": "04d4c66b643e4ec9ec1277f3ad642b18f3f94990",
      "parents": [
        "fc6ae3cf482c385a6fe87ba119d399bb85aa670b"
      ],
      "author": {
        "name": "Jeff Layton",
        "email": "jlayton@redhat.com",
        "time": "Tue Jun 05 14:49:03 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:25 2007 -0400"
      },
      "message": "NFS4: on a O_EXCL OPEN make sure SETATTR sets the fields holding the verifier\n\nThe Linux NFS4 client simply skips over the bitmask in an O_EXCL open\ncall and so it doesn\u0027t bother to reset any fields that may be holding\nthe verifier. This patch has us save the first two words of the bitmask\n(which is all the current client has #defines for). The client then\nlater checks this bitmask and turns on the appropriate flags in the\nsattr-\u003eia_verify field for the following SETATTR call.\n\nThis patch only currently checks to see if the server used the atime\nand mtime slots for the verifier (which is what the Linux server uses\nfor this). I\u0027m not sure of what other fields the server could\nreasonably use, but adding checks for others should be trivial.\n\nSigned-off-by: Jeff Layton \u003cjlayton@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "b39e625b6e75aa70e26c13f9378756bb5f2af032",
      "tree": "acf17b925b359b051f476c7e9500c4f4d60f5d0c",
      "parents": [
        "4a35bd41aff5714deb41c8f14766df3871e2e8f7"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Jun 11 23:05:07 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:24 2007 -0400"
      },
      "message": "NFSv4: Clean up nfs4_call_async()\n\nUse rpc_run_task() instead of doing it ourselves.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "4a35bd41aff5714deb41c8f14766df3871e2e8f7",
      "tree": "3542c76b1e0aabcd0ee6bb76fdd8228e6f3b5479",
      "parents": [
        "ad389da79f7bf9dc12dbc79c9c2740f9ed2f13d1"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jun 05 10:31:33 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:24 2007 -0400"
      },
      "message": "NFSv4: Ensure that nfs4_do_close() doesn\u0027t race with umount\n\nnfs4_do_close() does not currently have any way to ensure that the user\nwon\u0027t attempt to unmount the partition while the asynchronous RPC call\nis completing. This again may cause Oopses in nfs_update_inode().\n\nAdd a vfsmount argument to nfs4_close_state to ensure that the partition\nremains mounted while we\u0027re closing the file.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "ad389da79f7bf9dc12dbc79c9c2740f9ed2f13d1",
      "tree": "9fd51d8a43aaba790a87f721d2796e36ab9f66e7",
      "parents": [
        "539cd03a5708c9861a3e738e6f363ad743c85ddf"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jun 05 12:30:00 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:24 2007 -0400"
      },
      "message": "NFSv4: Ensure asynchronous open() calls always pin the mountpoint\n\nA number of race conditions may currently ensue if the user presses ^C\nand then unmounts the partition while an asynchronous open() is in\nprogress.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "539cd03a5708c9861a3e738e6f363ad743c85ddf",
      "tree": "3d786675f645621b9a04c7b7aad2bbbca9cc5241",
      "parents": [
        "88be9f990fe70f0f177ef44a16a477599e91f825"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jun 05 11:46:42 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:24 2007 -0400"
      },
      "message": "NFSv4: Cleanup: pass the nfs_open_context to open recovery code\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "88be9f990fe70f0f177ef44a16a477599e91f825",
      "tree": "d48ed0c934fc20dc3f7cacfc3b1eca3058246b65",
      "parents": [
        "de05a0cc2a2ae16eb8d8dbf88fe728ace45beb9a"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jun 05 10:42:27 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Jul 10 23:40:23 2007 -0400"
      },
      "message": "NFS: Replace vfsmount and dentry in nfs_open_context with struct path\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "10afec9081fee7e48995fa396fba22c7de4b99d4",
      "tree": "edf1e3abf62d95eeef178dc8060cf033cc7940df",
      "parents": [
        "9c9cc93ad2a5d9972672e03685af20e8cea1e5a4"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon May 14 17:16:04 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon May 14 19:33:46 2007 -0400"
      },
      "message": "NFS: Fix some \u0027sparse\u0027 warnings...\n\n - fs/nfs/dir.c:610:8: warning: symbol \u0027nfs_llseek_dir\u0027 was not declared.\n   Should it be static?\n - fs/nfs/dir.c:636:5: warning: symbol \u0027nfs_fsync_dir\u0027 was not declared.\n   Should it be static?\n - fs/nfs/write.c:925:19: warning: symbol \u0027req\u0027 shadows an earlier one\n - fs/nfs/write.c:61:6: warning: symbol \u0027nfs_commit_rcu_free\u0027 was not\n   declared. Should it be static?\n - fs/nfs/nfs4proc.c:793:5: warning: symbol \u0027nfs4_recover_expired_lease\u0027\n   was not declared. Should it be static?\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "2d56d3c43cc97ae48586745556f5a5b564d61582",
      "tree": "28f2edc1e69b79e94d99023041dd0358861b6956",
      "parents": [
        "0f9008ef38d5a6305d94bbdd8f20d68fc75c63b6",
        "586759f03e2e9031ac5589912a51a909ed53c30a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon May 07 12:34:24 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon May 07 12:34:24 2007 -0700"
      },
      "message": "Merge branch \u0027server-cluster-locking-api\u0027 of git://linux-nfs.org/~bfields/linux\n\n* \u0027server-cluster-locking-api\u0027 of git://linux-nfs.org/~bfields/linux:\n  gfs2: nfs lock support for gfs2\n  lockd: add code to handle deferred lock requests\n  lockd: always preallocate block in nlmsvc_lock()\n  lockd: handle test_lock deferrals\n  lockd: pass cookie in nlmsvc_testlock\n  lockd: handle fl_grant callbacks\n  lockd: save lock state on deferral\n  locks: add fl_grant callback for asynchronous lock return\n  nfsd4: Convert NFSv4 to new lock interface\n  locks: add lock cancel command\n  locks: allow {vfs,posix}_lock_file to return conflicting lock\n  locks: factor out generic/filesystem switch from setlock code\n  locks: factor out generic/filesystem switch from test_lock\n  locks: give posix_test_lock same interface as -\u003elock\n  locks: make -\u003elock release private data before returning in GETLK case\n  locks: create posix-to-flock helper functions\n  locks: trivial removal of unnecessary parentheses\n"
    },
    {
      "commit": "70cc6487a4e08b8698c0e2ec935fb48d10490162",
      "tree": "3dbf00694a5fcbea48233b78697a50effdcc80c9",
      "parents": [
        "c2fa1b8a6c059dd08a802545fed3badc8df2adc1"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@citi.umich.edu",
        "time": "Thu Feb 22 18:48:53 2007 -0500"
      },
      "committer": {
        "name": "J. Bruce Fields",
        "email": "bfields@citi.umich.edu",
        "time": "Sun May 06 17:38:19 2007 -0400"
      },
      "message": "locks: make -\u003elock release private data before returning in GETLK case\n\nThe file_lock argument to -\u003elock is used to return the conflicting lock\nwhen found.  There\u0027s no reason for the filesystem to return any private\ninformation with this conflicting lock, but nfsv4 is.\n\nFix nfsv4 client, and modify locks.c to stop calling fl_release_private\nfor it in this case.\n\nSigned-off-by: \"J. Bruce Fields\" \u003cbfields@citi.umich.edu\u003e\nCc: \"Trond Myklebust\" \u003cTrond.Myklebust@netapp.com\u003e\"\n"
    },
    {
      "commit": "08efa202eb398ce7939885a4a01df370fd392068",
      "tree": "e3de771d6a356b1539a31c1ae6c4e47350d37c74",
      "parents": [
        "83672d392f7bcf556f7920d6715e4174d9373ee0"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@citi.umich.edu",
        "time": "Tue May 01 10:56:25 2007 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed May 02 07:36:09 2007 -0700"
      },
      "message": "NFS4: invalidate cached acl on setacl\n\nThe ACL that the server sets may not be exactly the one we set--for\nexample, it may silently turn off bits that it does not support.  So we\nshould remove any cached ACL so that any subsequent request for the ACL\nwill go to the server.\n\nSigned-off-by: \"J. Bruce Fields\" \u003cbfields@citi.umich.edu\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "d9bc125caf592b7d081021f32ce5b717efdf70c8",
      "tree": "263b7066ba22ddce21db610c0300f6eaac6f2064",
      "parents": [
        "43d78ef2ba5bec26d0315859e8324bfc0be23766",
        "ec2f9d1331f658433411c58077871e1eef4ee1b4"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Feb 12 22:43:25 2007 -0800"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Feb 12 22:43:25 2007 -0800"
      },
      "message": "Merge branch \u0027master\u0027 of /home/trondmy/kernel/linux-2.6/\n\nConflicts:\n\n\tnet/sunrpc/auth_gss/gss_krb5_crypto.c\n\tnet/sunrpc/auth_gss/gss_spkm3_token.c\n\tnet/sunrpc/clnt.c\n\nMerge with mainline and fix conflicts.\n"
    },
    {
      "commit": "92e1d5be91a0e3ffa5c4697eeb09b2aa22792122",
      "tree": "4eb22a9f6c38e9f4cc2a5100cd6659b0af08b7ae",
      "parents": [
        "754661f143e70d66eae6c48532ca245aa05dec0e"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Mon Feb 12 00:55:39 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 2\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": "e148582e10a2c1a23dfc09210df4a18bc6cca4e9",
      "tree": "a6a1aac3b2dda50dc34e41a3e78afee4e4bae58e",
      "parents": [
        "a6a352e93dfa78db8903f0e3610abb76efbf7fc9"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Dec 13 16:43:13 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Feb 03 15:35:08 2007 -0800"
      },
      "message": "NFSv4: Add lockdep checks to nfs4_wait_clnt_recover()\n\nAttempt to detect deadlocks due to caller holding locks on clp-\u003ecl_sem\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "a6a352e93dfa78db8903f0e3610abb76efbf7fc9",
      "tree": "841b538d544444ab6f65102d5c444f72b4ecd869",
      "parents": [
        "7c85d9007d05436e71d2b805b96c1e36a8193bd4"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Dec 13 16:43:06 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Feb 03 15:35:08 2007 -0800"
      },
      "message": "NFSv4: Don\u0027t start state recovery in nfs4_close_done()\n\nWe might not even have any open files at this point...\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "8e0969f0451eaf7cf32f2ec3946196d8d0b1cb2c",
      "tree": "66f3e1ca0761d77e21ac3d24bacc1574189cfc64",
      "parents": [
        "c228fd3aeef55637354167faead74c579d5da28b"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Dec 13 15:23:44 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Feb 03 15:35:06 2007 -0800"
      },
      "message": "NFS: Remove nfs_readpage_sync()\n\nIt makes no sense to maintain 2 parallel systems for reading in pages.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "c228fd3aeef55637354167faead74c579d5da28b",
      "tree": "44abf437f19a3f182e00a42de6cf853fef8cc0f6",
      "parents": [
        "faebf4e2bb0efad9dda396ea13d5c6ad15d7d7fb"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Jan 13 02:28:11 2007 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Feb 03 15:35:06 2007 -0800"
      },
      "message": "NFSv4: Cleanups for fs_locations code.\n\nStart long arduous project...  What the hell is\n\n\tstruct dentry \u003d {};\n\nall about?\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "5cbded585d129d0226cb48ac4202b253c781be26",
      "tree": "fb24edc194a57ee81a3bf8a4dd8a95030dd0ad22",
      "parents": [
        "0743b86800cf1dfbf96df4a438938127bbe4476c"
      ],
      "author": {
        "name": "Robert P. J. Day",
        "email": "rpjday@mindspring.com",
        "time": "Wed Dec 13 00:35:56 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Wed Dec 13 09:05:58 2006 -0800"
      },
      "message": "[PATCH] getting rid of all casts of k[cmz]alloc() calls\n\nRun this:\n\n\t#!/bin/sh\n\tfor f in $(grep -Erl \"\\([^\\)]*\\) *k[cmz]alloc\" *) ; do\n\t  echo \"De-casting $f...\"\n\t  perl -pi -e \"s/ ?\u003d ?\\([^\\)]*\\) *(k[cmz]alloc) *\\(/ \u003d \\1\\(/\" $f\n\tdone\n\nAnd then go through and reinstate those cases where code is casting pointers\nto non-pointers.\n\nAnd then drop a few hunks which conflicted with outstanding work.\n\nCc: Russell King \u003crmk@arm.linux.org.uk\u003e, Ian Molton \u003cspyro@f2s.com\u003e\nCc: Mikael Starvik \u003cstarvik@axis.com\u003e\nCc: Yoshinori Sato \u003cysato@users.sourceforge.jp\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: Geert Uytterhoeven \u003cgeert@linux-m68k.org\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Kyle McMartin \u003ckyle@mcmartin.ca\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Jeff Dike \u003cjdike@addtoit.com\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Paul Fulghum \u003cpaulkf@microgate.com\u003e\nCc: Alan Cox \u003calan@lxorguk.ukuu.org.uk\u003e\nCc: Karsten Keil \u003ckkeil@suse.de\u003e\nCc: Mauro Carvalho Chehab \u003cmchehab@infradead.org\u003e\nCc: Jeff Garzik \u003cjeff@garzik.org\u003e\nCc: James Bottomley \u003cJames.Bottomley@steeleye.com\u003e\nCc: Ian Kent \u003craven@themaw.net\u003e\nCc: Steven French \u003csfrench@us.ibm.com\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Neil Brown \u003cneilb@cse.unsw.edu.au\u003e\nCc: Jaroslav Kysela \u003cperex@suse.cz\u003e\nCc: Takashi Iwai \u003ctiwai@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "200baa2112012dd8a13db9da3ee6885403f9c013",
      "tree": "261f9c2b85927c2dfaaecfb7ab808d353bd84da4",
      "parents": [
        "e21195a740533348e77efa8a2e2cf03bb4092b2b"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Dec 05 00:35:40 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Dec 06 10:46:38 2006 -0500"
      },
      "message": "NFS: Remove nfs_writepage_sync()\n\nMaintaining two parallel ways of doing synchronous writes is rather\npointless. This patch gets rid of the legacy nfs_writepage_sync(), and\nreplaces it with the faster asynchronous writes.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "cae823c4c089d2c7c2a90f39f20376ccd85f9893",
      "tree": "9bf9f70d3ddefe049818fd4cc1a604c749bb85b2",
      "parents": [
        "a99b71c9c43499bf2312c64f5c1d367aaf559dc4"
      ],
      "author": {
        "name": "Frank Filz",
        "email": "ffilzlnx@us.ibm.com",
        "time": "Tue Oct 17 10:24:38 2006 -0700"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Dec 06 10:46:31 2006 -0500"
      },
      "message": "NFS: Remove use of the Big Kernel Lock around calls to rpc_call_sync\n\nRemove use of the Big Kernel Lock around calls to rpc_call_sync.\n\nSigned-off-by: Frank Filz \u003cffilz@us.ibm.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "e6b3c4db6fbcd0d33720696f37790d6b8be12313",
      "tree": "24ad4a93b00ba7236b9a2d896fd6cb59a1dc2334",
      "parents": [
        "cc4dc59e5580d6c0de1685a25b74d32175f43434"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Sat Nov 11 22:18:03 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Dec 06 10:46:25 2006 -0500"
      },
      "message": "Fix a second potential rpc_wakeup race...\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "bc4785cd475a11ba125df7af674e16c6ea1cfc30",
      "tree": "4f552e0736d1e81460768f689fb6c4b500684066",
      "parents": [
        "5704fdeb41c9fb282ae576516f221ea0b8f64b2b"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ftp.linux.org.uk",
        "time": "Thu Oct 19 23:28:51 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 20 10:26:40 2006 -0700"
      },
      "message": "[PATCH] nfs: verifier is network-endian\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nAcked-by: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nAcked-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0dbb4c6799cf8fa8c5ba1926153a30960117477d",
      "tree": "9d8f75f2f407a5758fa4ef3d8c03694f138c3304",
      "parents": [
        "8687b63afbe42103730bff4d3f7bfff3463c303e"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ftp.linux.org.uk",
        "time": "Thu Oct 19 23:28:49 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 20 10:26:40 2006 -0700"
      },
      "message": "[PATCH] xdr annotations: NFS readdir entries\n\non-the-wire data is big-endian\n\n[in large part pulled from Alexey\u0027s patch]\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nAcked-by: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nAcked-by: Neil Brown \u003cneilb@suse.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b87c0adfeaaf8d8310c4f790d76072a5961b3518",
      "tree": "1c3f2395436f6ec3c8abc94af8266709860b0839",
      "parents": [
        "85233a7a436a48a0b98e7976a66797e5da79c9d6"
      ],
      "author": {
        "name": "Chuck Lever",
        "email": "chuck.lever@oracle.com",
        "time": "Thu Oct 19 23:28:42 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 20 10:26:39 2006 -0700"
      },
      "message": "[PATCH] NFS: remove unused check in nfs4_open_revalidate\n\nCoverity spotted a superfluous error check in nfs4_open_revalidate().  Remove\nit.\n\nCoverity: #cid 847\n\nTest plan:\nCode inspection; another pass through Coverity.\n\nSigned-off-by: Chuck Lever \u003cchuck.lever@oracle.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2066fe89b459c3c787c811b3369df191cddd93d8",
      "tree": "0eca930bb5dd17671b49d09e2aad13c6bdee801b",
      "parents": [
        "c514983d8d2260020543a81589a2b8c7d4bdab4e"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 15 08:30:46 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:25:04 2006 -0400"
      },
      "message": "NFSv4: Poll more aggressively when handling NFS4ERR_DELAY\n\nChange the initial retry delay from 1s to 0.1s (and then back off\nexponentially).\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "c514983d8d2260020543a81589a2b8c7d4bdab4e",
      "tree": "6151b2a7bb74c6209f7861d0748b35261e53c15e",
      "parents": [
        "6b30954ebb569fa1b2abdb21f2f4290eec76bf80"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 15 08:25:04 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:25:03 2006 -0400"
      },
      "message": "NFSv4: Handle the condition NFS4ERR_FILE_OPEN\n\nRetry a few times before we give up: the error is usually due to ordering\nissues with asynchronous RPC calls.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "6b30954ebb569fa1b2abdb21f2f4290eec76bf80",
      "tree": "8d342c0709eeb7c0b442db29b6b3754572e75689",
      "parents": [
        "97db8f41792839a6912fd21be8b61dd6c50db58f"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Sep 14 14:03:14 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:25:03 2006 -0400"
      },
      "message": "NFSv4: Retry lease recovery if it failed during a synchronous operation.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "94a6d75320b3681e6e728b70e18bd186cb55e682",
      "tree": "0957071549d76ceb3857e419998818b11bce7269",
      "parents": [
        "873101b33776780d32610fc4c90c7358a5e98f51"
      ],
      "author": {
        "name": "Chuck Lever",
        "email": "chuck.lever@oracle.com",
        "time": "Tue Aug 22 20:06:23 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:53 2006 -0400"
      },
      "message": "NFS: Use cached page as buffer for NFS symlink requests\n\nNow that we have a copy of the symlink path in the page cache, we can pass\na struct page down to the XDR routines instead of a string buffer.\n\nTest plan:\nConnectathon, all NFS versions.\n\nSigned-off-by: Chuck Lever \u003cchuck.lever@oracle.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "4f390c152bc87165da4b1f5b7d870b46fb106d4e",
      "tree": "643b5d12f76bd7d3688380fbaf69f607a34a06bf",
      "parents": [
        "d3db90e270791b21cd00d3c094884bffa907cc9e"
      ],
      "author": {
        "name": "Chuck Lever",
        "email": "chuck.lever@oracle.com",
        "time": "Tue Aug 22 20:06:22 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:52 2006 -0400"
      },
      "message": "NFS: Fix double d_drop in nfs_instantiate() error path\n\nIf the LOOKUP or GETATTR in nfs_instantiate fail, nfs_instantiate will do a\nd_drop before returning.  But some callers already do a d_drop in the case\nof an error return.  Make certain we do only one d_drop in all error paths.\n\nThis issue was introduced because over time, the symlink proc API diverged\nslightly from the create/mkdir/mknod proc API.  To prevent other coding\nmistakes of this type, change the symlink proc API to be more like\ncreate/mkdir/mknod and move the nfs_instantiate call into the symlink proc\nroutines so it is used in exactly the same way for create, mkdir, mknod,\nand symlink.\n\nTest plan:\nConnectathon, all versions of NFS.\n\nSigned-off-by: Chuck Lever \u003cchuck.lever@oracle.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "54ceac4515986030c2502960be620198dd8fe25b",
      "tree": "b4ae4305c5652c0fe883ef5ea3243da91dbd2b34",
      "parents": [
        "cf6d7b5de8535a9f0088c5cc28ee2dae87371b4a"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 22 20:06:13 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:37 2006 -0400"
      },
      "message": "NFS: Share NFS superblocks per-protocol per-server per-FSID\n\nThe attached patch makes NFS share superblocks between mounts from the same\nserver and FSID over the same protocol.\n\nIt does this by creating each superblock with a false root and returning the\nreal root dentry in the vfsmount presented by get_sb(). The root dentry set\nstarts off as an anonymous dentry if we don\u0027t already have the dentry for its\ninode, otherwise it simply returns the dentry we already have.\n\nWe may thus end up with several trees of dentries in the superblock, and if at\nsome later point one of anonymous tree roots is discovered by normal filesystem\nactivity to be located in another tree within the superblock, the anonymous\nroot is named and materialises attached to the second tree at the appropriate\npoint.\n\nWhy do it this way? Why not pass an extra argument to the mount() syscall to\nindicate the subpath and then pathwalk from the server root to the desired\ndirectory? You can\u0027t guarantee this will work for two reasons:\n\n (1) The root and intervening nodes may not be accessible to the client.\n\n     With NFS2 and NFS3, for instance, mountd is called on the server to get\n     the filehandle for the tip of a path. mountd won\u0027t give us handles for\n     anything we don\u0027t have permission to access, and so we can\u0027t set up NFS\n     inodes for such nodes, and so can\u0027t easily set up dentries (we\u0027d have to\n     have ghost inodes or something).\n\n     With this patch we don\u0027t actually create dentries until we get handles\n     from the server that we can use to set up their inodes, and we don\u0027t\n     actually bind them into the tree until we know for sure where they go.\n\n (2) Inaccessible symbolic links.\n\n     If we\u0027re asked to mount two exports from the server, eg:\n\n\tmount warthog:/warthog/aaa/xxx /mmm\n\tmount warthog:/warthog/bbb/yyy /nnn\n\n     We may not be able to access anything nearer the root than xxx and yyy,\n     but we may find out later that /mmm/www/yyy, say, is actually the same\n     directory as the one mounted on /nnn. What we might then find out, for\n     example, is that /warthog/bbb was actually a symbolic link to\n     /warthog/aaa/xxx/www, but we can\u0027t actually determine that by talking to\n     the server until /warthog is made available by NFS.\n\n     This would lead to having constructed an errneous dentry tree which we\n     can\u0027t easily fix. We can end up with a dentry marked as a directory when\n     it should actually be a symlink, or we could end up with an apparently\n     hardlinked directory.\n\n     With this patch we need not make assumptions about the type of a dentry\n     for which we can\u0027t retrieve information, nor need we assume we know its\n     place in the grand scheme of things until we actually see that place.\n\nThis patch reduces the possibility of aliasing in the inode and page caches for\ninodes that may be accessed by more than one NFS export. It also reduces the\nnumber of superblocks required for NFS where there are many NFS exports being\nused from a server (home directory server + autofs for example).\n\nThis in turn makes it simpler to do local caching of network filesystems, as it\ncan then be guaranteed that there won\u0027t be links from multiple inodes in\nseparate superblocks to the same cache file.\n\nObviously, cache aliasing between different levels of NFS protocol could still\nbe a problem, but at least that gives us another key to use when indexing the\ncache.\n\nThis patch makes the following changes:\n\n (1) The server record construction/destruction has been abstracted out into\n     its own set of functions to make things easier to get right.  These have\n     been moved into fs/nfs/client.c.\n\n     All the code in fs/nfs/client.c has to do with the management of\n     connections to servers, and doesn\u0027t touch superblocks in any way; the\n     remaining code in fs/nfs/super.c has to do with VFS superblock management.\n\n (2) The sequence of events undertaken by NFS mount is now reordered:\n\n     (a) A volume representation (struct nfs_server) is allocated.\n\n     (b) A server representation (struct nfs_client) is acquired.  This may be\n     \t allocated or shared, and is keyed on server address, port and NFS\n     \t version.\n\n     (c) If allocated, the client representation is initialised.  The state\n     \t member variable of nfs_client is used to prevent a race during\n     \t initialisation from two mounts.\n\n     (d) For NFS4 a simple pathwalk is performed, walking from FH to FH to find\n     \t the root filehandle for the mount (fs/nfs/getroot.c).  For NFS2/3 we\n     \t are given the root FH in advance.\n\n     (e) The volume FSID is probed for on the root FH.\n\n     (f) The volume representation is initialised from the FSINFO record\n     \t retrieved on the root FH.\n\n     (g) sget() is called to acquire a superblock.  This may be allocated or\n     \t shared, keyed on client pointer and FSID.\n\n     (h) If allocated, the superblock is initialised.\n\n     (i) If the superblock is shared, then the new nfs_server record is\n     \t discarded.\n\n     (j) The root dentry for this mount is looked up from the root FH.\n\n     (k) The root dentry for this mount is assigned to the vfsmount.\n\n (3) nfs_readdir_lookup() creates dentries for each of the entries readdir()\n     returns; this function now attaches disconnected trees from alternate\n     roots that happen to be discovered attached to a directory being read (in\n     the same way nfs_lookup() is made to do for lookup ops).\n\n     The new d_materialise_unique() function is now used to do this, thus\n     permitting the whole thing to be done under one set of locks, and thus\n     avoiding any race between mount and lookup operations on the same\n     directory.\n\n (4) The client management code uses a new debug facility: NFSDBG_CLIENT which\n     is set by echoing 1024 to /proc/net/sunrpc/nfs_debug.\n\n (5) Clone mounts are now called xdev mounts.\n\n (6) Use the dentry passed to the statfs() op as the handle for retrieving fs\n     statistics rather than the root dentry of the superblock (which is now a\n     dummy).\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "8fa5c000d7f986ef9cdc6d95f9f7fcee20e0a7d6",
      "tree": "356b811803db9775fd9c870d189a9ff75885ae6c",
      "parents": [
        "1f163415dc05983830bcc47b33c155b2528b1574"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 22 20:06:12 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:35 2006 -0400"
      },
      "message": "NFS: Move rpc_ops from nfs_server to nfs_client\n\nMove the rpc_ops from the nfs_server struct to the nfs_client struct as they\u0027re\ncommon to all server records of a particular NFS protocol version.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "1f163415dc05983830bcc47b33c155b2528b1574",
      "tree": "e4180da9947f8b802b6927726cda9d0949f8e00f",
      "parents": [
        "27951bd26031f6c27d38df9e94623bbe208a2464"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 22 20:06:11 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:35 2006 -0400"
      },
      "message": "NFS: Make better use of inode* dereferencing macros\n\nMake better use of inode* dereferencing macros to hide dereferencing chains\n(including NFS_PROTO and NFS_CLIENT).\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "509de8111656a7d89b4a1a5f430f4460ce510f0f",
      "tree": "94ec0130ab74a5c80956ca3edd3298999b3b9897",
      "parents": [
        "0c7d90cfed91a283228017ba6faf37ee0bcd32b1"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 22 20:06:11 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:34 2006 -0400"
      },
      "message": "NFS: Add extra const qualifiers\n\nAdd some extra const qualifiers into NFS.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "24c8dbbb5f777187d660393599641ab3307b4b97",
      "tree": "9d50fdd57c7593d925a21e4bb049095a4e4ead6f",
      "parents": [
        "e9326dcab413848e70ab746c7c5363da13e5f801"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 22 20:06:10 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:33 2006 -0400"
      },
      "message": "NFS: Generalise the nfs_client structure\n\nGeneralise the nfs_client structure by:\n\n (1) Moving nfs_client to a more general place (nfs_fs_sb.h).\n\n (2) Renaming its maintenance routines to be non-NFS4 specific.\n\n (3) Move those maintenance routines to a new non-NFS4 specific file (client.c)\n     and move the declarations to internal.h.\n\n (4) Make nfs_find/get_client() take a full sockaddr_in to include the port\n     number (will be required for NFS2/3).\n\n (5) Make nfs_find/get_client() take the NFS protocol version (again will be\n     required to differentiate NFS2, 3 \u0026 4 client records).\n\nAlso:\n\n (6) Make nfs_client construction proceed akin to inodes, marking them as under\n     construction and providing a function to indicate completion.\n\n (7) Make nfs_get_client() wait interruptibly if it finds a client that it can\n     share, but that client is currently being constructed.\n\n (8) Make nfs4_create_client() use (6) and (7) instead of locking cl_sem.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "e9326dcab413848e70ab746c7c5363da13e5f801",
      "tree": "594a1e4ac32fd0620f0b91442d5d1b65fd9cc743",
      "parents": [
        "2b3de4411b3ccaeb00018c99d1bbe7203554cf7f"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 22 20:06:10 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:33 2006 -0400"
      },
      "message": "NFS: Add a server capabilities NFS RPC op\n\nAdd a set_capabilities NFS RPC op so that the server capabilities can be set.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "2b3de4411b3ccaeb00018c99d1bbe7203554cf7f",
      "tree": "cb49ea1fe64835fdbb8335a55049e70b3d87c5ae",
      "parents": [
        "b7162792b5c0e0f6e91b8997f8e6bbc76ec5420a"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 22 20:06:09 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:32 2006 -0400"
      },
      "message": "NFS: Add a lookupfh NFS RPC op\n\nAdd a lookup filehandle NFS RPC op so that a file handle can be looked up\nwithout requiring dentries and inodes and other VFS stuff when doing an NFS4\npathwalk during mounting.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "7539bbab8062aadc1db95a22b377146843cfa88f",
      "tree": "697983ea016cbe378e4f2128846edebd78e468b9",
      "parents": [
        "adfa6f980bd46974e6b32b22dd0c45e3f52063f4"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 22 20:06:09 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:32 2006 -0400"
      },
      "message": "NFS: Rename nfs_server::nfs4_state\n\nRename nfs_server::nfs4_state to nfs_client as it will be used to represent the\nclient state for NFS2 and NFS3 also.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "adfa6f980bd46974e6b32b22dd0c45e3f52063f4",
      "tree": "7dbc86985faa0fce0e73103979262c1593ea3a3b",
      "parents": [
        "5ae1fbce142b67bf59e15fb1af96e88a96abde7b"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Tue Aug 22 20:06:08 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 22 23:24:31 2006 -0400"
      },
      "message": "NFS: Rename struct nfs4_client to struct nfs_client\n\nRename struct nfs4_client to struct nfs_client so that it can become the basis\nfor a general client record for NFS2 and NFS3 in addition to NFS4.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "76723de0cf5b186afe2f329eeef304c321d52bf8",
      "tree": "677768d360a5288086aa6965ce4db67d556fac03",
      "parents": [
        "7a52411107e1ac8f5be6967936ec237f40a1c7e4"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Sep 15 08:11:51 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Sep 19 11:54:53 2006 -0400"
      },
      "message": "NFSv4: Fix incorrect semaphore release in _nfs4_do_open()\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "16b4289c7460ba9c04af40c574949dcca9029658",
      "tree": "b0c1b47e82306d23e326d6a6a59d251eccb85e81",
      "parents": [
        "e8896495bca8490a427409e0886d63d05419ec65"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Aug 24 12:27:15 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Aug 24 15:54:13 2006 -0400"
      },
      "message": "NFSv4: Add v4 exception handling for the ACL functions.\n\nThis is needed in order to handle any NFS4ERR_DELAY errors that might be\nreturned by the server. It also ensures that we map the NFSv4 errors before\nthey are returned to userland.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n(cherry picked from 71c12b3f0abc7501f6ed231a6d17bc9c05a238dc commit)\n"
    },
    {
      "commit": "01c3b861cd77b28565a2d18c7caa3ce7f938e35c",
      "tree": "1445669572dd5f0e97ec0690da88eefd8bbf5acb",
      "parents": [
        "f07f18dd6f29f11887b8d9cf7ecb736bf2f7dc62"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Jun 29 16:38:39 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Jul 05 13:13:18 2006 -0400"
      },
      "message": "NLM,NFSv4: Wait on local locks before we put RPC calls on the wire\n\nUse FL_ACCESS flag to test and/or wait for local locks before we try\nrequesting a lock from the server\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "42a2d13eee3c895d22e9d1a52b96d15ca49adabc",
      "tree": "42e2195fa5ee1ed867418aedf42ee17624553c5f",
      "parents": [
        "9b07357490e5c7a1c3c2b6f4679d7ee4b4185ecd"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Jun 29 16:38:36 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Jul 05 13:13:18 2006 -0400"
      },
      "message": "NFSv4: Ensure nfs4_lock_expired() caches delegated locks\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "9b07357490e5c7a1c3c2b6f4679d7ee4b4185ecd",
      "tree": "020b1e8ed07374d45ae2691cae8ed550ef123137",
      "parents": [
        "f475ae957db66650db66916c62604ac27409d884"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu Jun 29 16:38:34 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Jul 05 13:13:17 2006 -0400"
      },
      "message": "NLM,NFSv4: Don\u0027t put UNLOCK requests on the wire unless we hold a lock\n\nUse the new behaviour of {flock,posix}_file_lock(F_UNLCK) to determine if\nwe held a lock, and only send the RPC request to the server if this was the\ncase.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "f7b422b17ee5ee4920e8ae24a6ad04bf3481ce72",
      "tree": "4ae8372762efc092ceb4f884b57cad1efe6594de",
      "parents": [
        "4e5ccf60c5aa79d325c123f47d288a068166f389"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jun 09 09:34:33 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jun 09 09:34:33 2006 -0400"
      },
      "message": "NFS: Split fs/nfs/inode.c\n\nAs fs/nfs/inode.c is rather large, heterogenous and unwieldy, the attached\npatch splits it up into a number of files:\n\n (*) fs/nfs/inode.c\n\n     Strictly inode specific functions.\n\n (*) fs/nfs/super.c\n\n     Superblock management functions for NFS and NFS4, normal access, clones\n     and referrals.  The NFS4 superblock functions _could_ move out into a\n     separate conditionally compiled file, but it\u0027s probably not worth it as\n     there\u0027re so many common bits.\n\n (*) fs/nfs/namespace.c\n\n     Some namespace-specific functions have been moved here.\n\n (*) fs/nfs/nfs4namespace.c\n\n     NFS4-specific namespace functions (this could be merged into the previous\n     file).  This file is conditionally compiled.\n\n (*) fs/nfs/internal.h\n\n     Inter-file declarations, plus a few simple utility functions moved from\n     fs/nfs/inode.c.\n\n     Additionally, all the in-.c-file externs have been moved here, and those\n     files they were moved from now includes this file.\n\nFor the most part, the functions have not been changed, only some multiplexor\nfunctions have changed significantly.\n\nI\u0027ve also:\n\n (*) Added some extra banner comments above some functions.\n\n (*) Rearranged the function order within the files to be more logical and\n     better grouped (IMO), though someone may prefer a different order.\n\n (*) Reduced the number of #ifdefs in .c files.\n\n (*) Added missing __init and __exit directives.\n\nSigned-Off-By: David Howells \u003cdhowells@redhat.com\u003e\n"
    },
    {
      "commit": "6b97fd3da1eab2cc490cfe884c7d4956522eaf8b",
      "tree": "055f5f603101a15f783ae52081e4714ddc3edc96",
      "parents": [
        "9cdb3883c38f883436a84c2353a4cf964ff890a2"
      ],
      "author": {
        "name": "Manoj Naik",
        "email": "manoj@almaden.ibm.com",
        "time": "Fri Jun 09 09:34:29 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jun 09 09:34:29 2006 -0400"
      },
      "message": "NFSv4: Follow a referral\n\nRespond to a moved error on NFS lookup by setting up the referral.\nNote: We don\u0027t actually follow the referral during lookup/getattr, but\nlater when we detect fsid mismatch in inode revalidation (similar to the\nprocessing done for cloning submounts). Referrals will have fake attributes\nuntil they are actually followed or traversed.\n\nSigned-off-by: Manoj Naik \u003cmanoj@almaden.ibm.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "830b8e33fe1900b87c8eb7ec5c646117a9f298d6",
      "tree": "8e4aa4c7ecd0485a288254433edf76305852c846",
      "parents": [
        "361e624f6d8bfbeac53769603d995d47535cfd46"
      ],
      "author": {
        "name": "Manoj Naik",
        "email": "manoj@almaden.ibm.com",
        "time": "Fri Jun 09 09:34:25 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jun 09 09:34:25 2006 -0400"
      },
      "message": "NFSv4: Define an fs_locations bitmap\n\nThis is (similar to getattr bitmap) but includes fs_locations and\nmounted_on_fileid attributes. Use this bitmap for encoding in fs_locations\nrequests.\nNote: We can probably do better by requesting locations as part of fsinfo\nitself.\n\nSigned-off-by: Manoj Naik \u003cmanoj@almaden.ibm.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "361e624f6d8bfbeac53769603d995d47535cfd46",
      "tree": "9cf400058ff4c4960a4e573b3753baff41cb5cf0",
      "parents": [
        "99baf625d3b9b8944920acc7c2d06079a37458c5"
      ],
      "author": {
        "name": "Manoj Naik",
        "email": "manoj@almaden.ibm.com",
        "time": "Fri Jun 09 09:34:24 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jun 09 09:34:24 2006 -0400"
      },
      "message": "NFSv4: GETATTR attributes on referral\n\nPer referral draft, only fs_locations, fsid, and mounted_on_fileid can be\nrequested in a GETATTR on referrals.\n\nSigned-off-by: Manoj Naik \u003cmanoj@almaden.ibm.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "7aaa0b3bd4d215d9ce4d62b6c2043a63ba650f93",
      "tree": "122b502bc56a00dcb60d2de211e5ea6eeac9e028",
      "parents": [
        "683b57b435326eb512c7305892683b6205669448"
      ],
      "author": {
        "name": "Manoj Naik",
        "email": "manoj@almaden.ibm.com",
        "time": "Fri Jun 09 09:34:23 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jun 09 09:34:23 2006 -0400"
      },
      "message": "NFSv4: convert fs-locations-components to conform to RFC3530\n\nUse component4-style formats for decoding list of servers and pathnames in\nfs_locations.\n\nSigned-off-by: Manoj Naik \u003cmanoj@almaden.ibm.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "683b57b435326eb512c7305892683b6205669448",
      "tree": "ca1e526ab5b27993c0c143c37bb31e18889eeb61",
      "parents": [
        "8b23ea7bedb8b45a5bb56745fa3ff11018acf04e"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jun 09 09:34:22 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jun 09 09:34:22 2006 -0400"
      },
      "message": "NFSv4: Implement the fs_locations function call\n\nNFSv4 allows for the fact that filesystems may be replicated across\nseveral servers or that they may be migrated to a backup server in case of\nfailure of the primary server.\nfs_locations is an NFSv4 operation for retrieving information about the\nlocation of migrated and/or replicated filesystems.\n\nBased on an initial implementation by Jiaying Zhang \u003cjiayingz@citi.umich.edu\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "55a975937d40cac582e981ddc8ed783b3dcc043c",
      "tree": "13507eaebdab5e9c9dd615fe373ec6c0ddcbade4",
      "parents": [
        "8b4bdcf8995dd92b23d2ec22b32aee8fbbb50e1c"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jun 09 09:34:19 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jun 09 09:34:19 2006 -0400"
      },
      "message": "NFS: Ensure the client submounts, when it crosses a server mountpoint.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "38478b24e37587f1c4fedf8ac070ca54f052ed28",
      "tree": "da4d900a8bfe27f1243fb0e037b51fae2a7e3256",
      "parents": [
        "f1bb0b92ba2cdfffe6e437f7a7da53138cf08d52"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu May 25 01:40:57 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jun 09 09:34:09 2006 -0400"
      },
      "message": "NFS: More page cache revalidation fixups\n\nWhenever the directory changes, we want to make sure that we always\ninvalidate its page cache. Fix up update_changeattr() and\nnfs_mark_for_revalidate() so that they do so.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "73a3d07c1082145a3b78407bb5252df290470c4c",
      "tree": "58ae6256401e19750f2d5f916c1ca5636a14905b",
      "parents": [
        "9d1e9232223a7f065be7f956a7b749a4cbbbe16d"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Thu May 25 01:40:47 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Fri Jun 09 09:34:04 2006 -0400"
      },
      "message": "NFS: Clean up inode metadata updates\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "95cf959b245832ad49bb333bf88f9805244b225d",
      "tree": "956205e6be9f70d39124faa464111c2a821f75e4",
      "parents": [
        "d4a30e7e66c004da26dfe5229af7c10fe9853a7a"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Tue Apr 18 13:14:06 2006 -0400"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Wed Apr 19 12:43:46 2006 -0400"
      },
      "message": "VFS: Fix another open intent Oops\n\nIf the call to nfs_intent_set_file() fails to open a file in\nnfs4_proc_create(), we should return an error.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "096455a22acac06fb6d0d75f276170ab72d55ba6",
      "tree": "ba2f522da3e248720b919bc94193f791a239821c",
      "parents": [
        "9e57b302cf0f27063184196def620f39ca7a5fc6"
      ],
      "author": {
        "name": "J. Bruce Fields",
        "email": "bfields@fieldses.org",
        "time": "Mon Mar 20 23:23:42 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 23:23:42 2006 -0500"
      },
      "message": "NFSv4: Dont list system.nfs4_acl for filesystems that don\u0027t support it.\n\nThanks to Frank Filz for pointing out that we list system.nfs4_acl extended\nattribute even on filesystems where we don\u0027t actually support nfs4_acl.\nThis is inconsistent with the e.g. ext3 POSIX ACL behaviour, and seems to\nannoy cp.\n\nSigned-off-by: J. Bruce Fields \u003cbfields@citi.umich.edu\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "7a1218a277c45cba1fb8d7089407a1769c645c43",
      "tree": "c59634979c53606696993ef06297045015791d6e",
      "parents": [
        "43ac3f2961b8616da26114ec6dc76ac2a61f76ad"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 18:11:10 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 18:11:10 2006 -0500"
      },
      "message": "SUNRPC: Ensure rpc_call_async() always calls tk_ops-\u003erpc_release()\n\nCurrently this will not happen if we exit before rpc_new_task() was called.\nAlso fix up rpc_run_task() to do the same (for consistency).\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "03f28e3a2059fc466761d872122f30acb7be61ae",
      "tree": "d478e553b79520c34bb3d06e75b59609de2993f4",
      "parents": [
        "01d0ae8beaee75d954900109619b700fe68707d9"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:48 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:48 2006 -0500"
      },
      "message": "NFS: Make nfs_fhget() return appropriate error values\n\nCurrently it returns NULL, which usually gets interpreted as ENOMEM. In\nfact it can mean a host of issues.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "51581f3bf922512880f52a7777923fd6dcfc792b",
      "tree": "91e9c6c6a89705e76ec07574d296967c3bde24a9",
      "parents": [
        "3e4f6290ca4df7464ee066123f2bca4298c2dab4"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:47 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:47 2006 -0500"
      },
      "message": "NFSv4: SETCLIENTID_CONFIRM should handle NFS4ERR_DELAY/NFS4ERR_RESOURCE\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "3e4f6290ca4df7464ee066123f2bca4298c2dab4",
      "tree": "a8a2b32348be0df1a886ca0960112d23e1458572",
      "parents": [
        "f25bc34967d76610d17bc70769d7c220976eeeb1"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:46 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:46 2006 -0500"
      },
      "message": "NFSv4: Send the delegation stateid for SETATTR calls\n\nIn the case where we hold a delegation stateid, use that in for inside\nSETATTR calls.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "ec06c096edec0755534c7126f4caded69de131c2",
      "tree": "1f5b219c09dea1d9886cefe3ea3f7cef560a5e9a",
      "parents": [
        "788e7a89a03e364855583c0ab4649b94925efbb9"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:27 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:27 2006 -0500"
      },
      "message": "NFS: Cleanup of NFS read code\n\nSame callback hierarchy inversion as for the NFS write calls. This patch is\nnot strictly speaking needed by the O_DIRECT code, but avoids confusing\ndifferences between the asynchronous read and write code.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "788e7a89a03e364855583c0ab4649b94925efbb9",
      "tree": "4434c93af133a92f550ba0ecc8d3254cb222e72d",
      "parents": [
        "7117bf3dfb10b534a017260d9fc643bc1d0afd2a"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:27 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:27 2006 -0500"
      },
      "message": "NFS: Cleanup of NFS write code in preparation for asynchronous o_direct\n\nThis patch inverts the callback hierarchy for NFS write calls.\n\nInstead of having the NFSv2/v3/v4-specific code set up the RPC callback\nops, we allow the original caller to do so. This allows for more\nflexibility w.r.t. how to set up and tear down the nfs_write_data\nstructure while still allowing the NFSv3/v4 code to perform error\nhandling.\n\nThe greater flexibility is needed by the asynchronous O_DIRECT code, which\nwants to be able to hold on to the original nfs_write_data structures after\nthe WRITE RPC call has completed in order to be able to replay them if the\nCOMMIT call determines that the server has rebooted.\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "006ea73e5fa82915d0ac7a3f15ee7c688433236d",
      "tree": "0f522982fe3d01a74f1ad9f5f713cbd10a6b09bd",
      "parents": [
        "91d5b47023b608227d605d1e916b29dd0215bff7"
      ],
      "author": {
        "name": "Chuck Lever",
        "email": "cel@netapp.com",
        "time": "Mon Mar 20 13:44:14 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:14 2006 -0500"
      },
      "message": "NFS: add hooks to account for NFSERR_JUKEBOX errors\n\nMake an inode or an nfs_server struct available in the logic that handles\nJUKEBOX/DELAY type errors so the NFS client can account for them.\n\nThis patch is split out from the main nfs iostat patch to highlight minor\narchitectural changes required to support this statistic.\n\nTest plan:\nNone.\n\nSigned-off-by: Chuck Lever \u003ccel@netapp.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "a162a6b804b48c605d1fd35e1861a5d32d00ad3f",
      "tree": "50b6aa7f5da5e4c34da2f9d34b93c667c5d6c054",
      "parents": [
        "967b9281361481aecf323563886ef972ee88c681"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:10 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:10 2006 -0500"
      },
      "message": "NFSv4: Kill braindead gcc warnings\n\nnfs4_open_revalidate: \u0027res\u0027 may be used uninitialized\nnfs4_callback_compound: ‘hdr_res.nops’ may be used uninitialized\n\t\t\t\u0027op_nr’ may be used uninitialized\nencode_getattr_res: ‘savep’ may be used uninitialized\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "c8d149f3dbd582a101aa7da7bdd6c3316efd11b4",
      "tree": "51f1d97f02ffb7e02d6f7534ab9c9fce5fa6dc20",
      "parents": [
        "ca62b9c3f7b8679ada4de94d2ab7098c6860c3d7"
      ],
      "author": {
        "name": "Jesper Juhl",
        "email": "jesper.juhl@gmail.com",
        "time": "Mon Mar 20 13:44:07 2006 -0500"
      },
      "committer": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 20 13:44:07 2006 -0500"
      },
      "message": "NFS: \"const static\" vs \"static const\" in nfs4\n\nMy previous \"const static\" vs \"static const\" cleanup missed a single case,\npatch below takes care of it.\n\nSigned-off-by: Jesper Juhl \u003cjesper.juhl@gmail.com\u003e\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\n"
    },
    {
      "commit": "c12e87f4652b1ba3be168b4f63a440399b941928",
      "tree": "aa8c0ca6a6ea60042975d1ec9437620269df0182",
      "parents": [
        "712917d1c002f820b177683f4fd491289bde3c32"
      ],
      "author": {
        "name": "Trond Myklebust",
        "email": "Trond.Myklebust@netapp.com",
        "time": "Mon Mar 13 21:20:47 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Mar 14 07:57:18 2006 -0800"
      },
      "message": "[PATCH] NFSv4: fix mount segfault on errors returned that are \u003c -1000\n\nIt turns out that nfs4_proc_get_root() may return raw NFSv4 errors instead of\nmapping them to kernel errors.  Problem spotted by Neil Horman\n\u003cnhorman@tuxdriver.com\u003e\n\nSigned-off-by: Trond Myklebust \u003cTrond.Myklebust@netapp.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    }
  ],
  "next": "fa178f29c0f8a0dce748181a5351f4a92fd4f455"
}
