1. 26 2月, 2008 1 次提交
  2. 15 2月, 2008 1 次提交
    • J
      Embed a struct path into struct nameidata instead of nd->{dentry,mnt} · 4ac91378
      Jan Blunck 提交于
      This is the central patch of a cleanup series. In most cases there is no good
      reason why someone would want to use a dentry for itself. This series reflects
      that fact and embeds a struct path into nameidata.
      
      Together with the other patches of this series
      - it enforced the correct order of getting/releasing the reference count on
        <dentry,vfsmount> pairs
      - it prepares the VFS for stacking support since it is essential to have a
        struct path in every place where the stack can be traversed
      - it reduces the overall code size:
      
      without patch series:
         text    data     bss     dec     hex filename
      5321639  858418  715768 6895825  6938d1 vmlinux
      
      with patch series:
         text    data     bss     dec     hex filename
      5320026  858418  715768 6894212  693284 vmlinux
      
      This patch:
      
      Switch from nd->{dentry,mnt} to nd->path.{dentry,mnt} everywhere.
      
      [akpm@linux-foundation.org: coding-style fixes]
      [akpm@linux-foundation.org: fix cifs]
      [akpm@linux-foundation.org: fix smack]
      Signed-off-by: NJan Blunck <jblunck@suse.de>
      Signed-off-by: NAndreas Gruenbacher <agruen@suse.de>
      Acked-by: NChristoph Hellwig <hch@lst.de>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Casey Schaufler <casey@schaufler-ca.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      4ac91378
  3. 30 1月, 2008 9 次提交
  4. 03 1月, 2008 2 次提交
  5. 07 12月, 2007 1 次提交
  6. 20 10月, 2007 2 次提交
  7. 10 10月, 2007 12 次提交
  8. 01 9月, 2007 2 次提交
    • T
      NFSv4: Ensure that we pass the correct dentry to nfs4_intent_set_file · deee9369
      Trond Myklebust 提交于
      This patch fixes an Oops that was reported by Gabriel Barazer.
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      deee9369
    • T
      NFSv4: Fix a typo in _nfs4_do_open_reclaim · 65bbf6bd
      Trond Myklebust 提交于
      This should fix the following Oops reported by Jeff Garzik:
      
      kernel BUG at fs/nfs/nfs4xdr.c:1040!
      invalid opcode: 0000 [1] SMP 
      CPU 0 
      Modules linked in: nfs lockd sunrpc af_packet
      ipv6 cpufreq_ondemand acpi_cpufreq battery floppy nvram sg snd_hda_intel
      ata_generic snd_pcm_oss snd_mixer_oss snd_pcm i2c_i801 snd_page_alloc e1000
      firewire_ohci ata_piix i2c_core sr_mod cdrom sata_sil ahci libata sd_mod
      scsi_mod ext3 jbd ehci_hcd uhci_hcd
      Pid: 16353, comm: 10.10.10.1-recl Not tainted 2.6.23-rc3 #1
      RIP: 0010:[<ffffffff88240980>] [<ffffffff88240980>] :nfs:encode_open+0x1c0/0x330
      RSP: 0018:ffff8100467c5c60  EFLAGS: 00010202
      RAX: ffff81000f89b8b8 RBX: 00000000697a6f6d RCX: ffff81000f89b8b8
      RDX: 0000000000000004 RSI: 0000000000000004 RDI: ffff8100467c5c80
      RBP: ffff8100467c5c80 R08: ffff81000f89bc30 R09: ffff81000f89b83f
      R10: 0000000000000001 R11: ffffffff881e79e0 R12: ffff81003cbd1808
      R13: ffff81000f89b860 R14: ffff81005fc984e0 R15: ffffffff88240af0
      FS:  0000000000000000(0000) GS:ffffffff8052a000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
      CR2: 00002adb9e51a030 CR3: 000000007ea7e000 CR4: 00000000000006e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      Process 10.10.10.1-recl (pid: 16353, threadinfo ffff8100467c4000, task ffff8100038ce780)
      Stack:  ffff81004aeb6a40 ffff81003cbd1808 ffff81003cbd1808 ffffffff88240b5d
       ffff81000f89b8bc ffff81005fc984e8 ffff81000f89bc30 ffff81005fc984e8
       0000000300000000 0000000000000000 0000000000000000 ffff81003cbd1800
      Call Trace:
       [<ffffffff88240b5d>] :nfs:nfs4_xdr_enc_open_noattr+0x6d/0x90
       [<ffffffff881e74b7>] :sunrpc:rpcauth_wrap_req+0x97/0xf0
       [<ffffffff88240af0>] :nfs:nfs4_xdr_enc_open_noattr+0x0/0x90
       [<ffffffff881df57a>] :sunrpc:call_transmit+0x18a/0x290
       [<ffffffff881e5e7b>] :sunrpc:__rpc_execute+0x6b/0x290
       [<ffffffff881dff76>] :sunrpc:rpc_do_run_task+0x76/0xd0
       [<ffffffff882373f6>] :nfs:_nfs4_proc_open+0x76/0x230
       [<ffffffff88237a2e>] :nfs:nfs4_open_recover_helper+0x5e/0xc0
       [<ffffffff88237b74>] :nfs:nfs4_open_recover+0xe4/0x120
       [<ffffffff88238e14>] :nfs:nfs4_open_reclaim+0xa4/0xf0
       [<ffffffff882413c5>] :nfs:nfs4_reclaim_open_state+0x55/0x1b0
       [<ffffffff882417ea>] :nfs:reclaimer+0x2ca/0x390
       [<ffffffff88241520>] :nfs:reclaimer+0x0/0x390
       [<ffffffff8024e59b>] kthread+0x4b/0x80
       [<ffffffff8020cad8>] child_rip+0xa/0x12
       [<ffffffff8024e550>] kthread+0x0/0x80
       [<ffffffff8020cace>] child_rip+0x0/0x12
      
      
      Code: 0f 0b eb fe 48 89 ef c7 00 00 00 00 02 be 08 00 00 00 e8 79 
      RIP  [<ffffffff88240980>] :nfs:encode_open+0x1c0/0x330
       RSP <ffff8100467c5c60>
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      65bbf6bd
  9. 08 8月, 2007 1 次提交
    • T
      NFS: Fix NFSv4 open stateid regressions · 45328c35
      Trond Myklebust 提交于
      Do not allow cached open for O_RDONLY or O_WRONLY unless the file has been
      previously opened in these modes.
      
      Also Fix the calculation of the mode in nfs4_close_prepare. We should only
      issue an OPEN_DOWNGRADE if we're sure that we will still be holding the
      correct open modes. This may not be the case if we've been doing delegated
      opens.
      
      Finally, there is no need to adjust the open mode bit flags in
      nfs4_close_done(): that has already been done in nfs4_close_prepare().
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      45328c35
  10. 20 7月, 2007 5 次提交
  11. 11 7月, 2007 4 次提交
    • F
      NFSv4: Make sure unlock is really an unlock when cancelling a lock · 137d6aca
      Frank Filz 提交于
      I ran into a curious issue when a lock is being canceled. The
      cancellation results in a lock request to the vfs layer instead of an
      unlock request. This is particularly insidious when the process that
      owns the lock is exiting. In that case, sometimes the erroneous lock is
      applied AFTER the process has entered zombie state, preventing the lock
      from ever being released. Eventually other processes block on the lock
      causing a slow degredation of the system. In the 2.6.16 kernel this was
      investigated on, the problem is compounded by the fact that the cl_sem
      is held while blocking on the vfs lock, which results in most processes
      accessing the nfs file system in question hanging.
      
      In more detail, here is how the situation occurs:
      
      first _nfs4_do_setlk():
      
      static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *fl, int reclaim)
      ...
              ret = nfs4_wait_for_completion_rpc_task(task);
              if (ret == 0) {
      ...
              } else
                      data->cancelled = 1;
      
      then nfs4_lock_release():
      
      static void nfs4_lock_release(void *calldata)
      ...
              if (data->cancelled != 0) {
                      struct rpc_task *task;
                      task = nfs4_do_unlck(&data->fl, data->ctx, data->lsp,
                                      data->arg.lock_seqid);
      
      The problem is the same file_lock that was passed in to _nfs4_do_setlk()
      gets passed to nfs4_do_unlck() from nfs4_lock_release(). So the type is
      still F_RDLCK or FWRLCK, not F_UNLCK. At some point, when cancelling the
      lock, the type needs to be changed to F_UNLCK. It seemed easiest to do
      that in nfs4_do_unlck(), but it could be done in nfs4_lock_release().
      The concern I had with doing it there was if something still needed the
      original file_lock, though it turns out the original file_lock still
      needs to be modified by nfs4_do_unlck() because nfs4_do_unlck() uses the
      original file_lock to pass to the vfs layer, and a copy of the original
      file_lock for the RPC request.
      
      It seems like the simplest solution is to force all situations where
      nfs4_do_unlck() is being used to result in an unlock, so with that in
      mind, I made the following change:
      Signed-off-by: NFrank Filz <ffilzlnx@us.ibm.com>
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      137d6aca
    • T
      NFSv4: Fix up stateid locking... · 8bda4e4c
      Trond Myklebust 提交于
      We really don't need to grab both the state->so_owner and the
      inode->i_lock.
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      8bda4e4c
    • T
      NFSv4: Clean up the callers of nfs4_open_recover_helper() · 1ac7e2fd
      Trond Myklebust 提交于
      Rely on nfs4_try_open_cached() when appropriate.
      
      Also fix an RCU violation in _nfs4_do_open_reclaim()
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      1ac7e2fd
    • T
      NFSv4: Don't call OPEN if we already have an open stateid for a file · 6ee41268
      Trond Myklebust 提交于
      If we already have a stateid with the correct open mode for a given file,
      then we can reuse that stateid instead of re-issuing an OPEN call without
      violating the close-to-open caching semantics.
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      6ee41268