1. 03 5月, 2010 2 次提交
    • N
      sunrpc: centralise most calls to svc_xprt_received · b48fa6b9
      Neil Brown 提交于
      svc_xprt_received must be called when ->xpo_recvfrom has finished
      receiving a message, so that the XPT_BUSY flag will be cleared and
      if necessary, requeued for further work.
      
      This call is currently made in each ->xpo_recvfrom function, often
      from multiple different points.  In each case it is the earliest point
      on a particular path where it is known that the protection provided by
      XPT_BUSY is no longer needed.
      
      However there are (still) some error paths which do not call
      svc_xprt_received, and requiring each ->xpo_recvfrom to make the call
      does not encourage robustness.
      
      So: move the svc_xprt_received call to be made just after the
      call to ->xpo_recvfrom(), and move it of the various ->xpo_recvfrom
      methods.
      
      This means that it may not be called at the earliest possible instant,
      but this is unlikely to be a measurable performance issue.
      
      Note that there are still other calls to svc_xprt_received as it is
      also needed when an xprt is newly created.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      b48fa6b9
    • J
      nfsd4: fix unlikely race in session replay case · 26c0c75e
      J. Bruce Fields 提交于
      In the replay case, the
      
      	renew_client(session->se_client);
      
      happens after we've droppped the sessionid_lock, and without holding a
      reference on the session; so there's nothing preventing the session
      being freed before we get here.
      
      Thanks to Benny Halevy for catching a bug in an earlier version of this
      patch.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      Acked-by: NBenny Halevy <bhalevy@panasas.com>
      26c0c75e
  2. 23 4月, 2010 2 次提交
  3. 22 4月, 2010 5 次提交
    • J
      nfsd4: complete enforcement of 4.1 op ordering · 57716355
      J. Bruce Fields 提交于
      Enforce the rules about compound op ordering.
      
      Motivated by implementing RECLAIM_COMPLETE, for which the client is
      implicit in the current session, so it is important to ensure a
      succesful SEQUENCE proceeds the RECLAIM_COMPLETE.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      57716355
    • J
      nfsd4: allow 4.0 clients to change callback path · 4b21d0de
      J. Bruce Fields 提交于
      The rfc allows a client to change the callback parameters, but we didn't
      previously implement it.
      
      Teach the callbacks to rerun themselves (by placing themselves on a
      workqueue) when they recognize that their rpc task has been killed and
      that the callback connection has changed.
      
      Then we can change the callback connection by setting up a new rpc
      client, modifying the nfs4 client to point at it, waiting for any work
      in progress to complete, and then shutting down the old client.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      4b21d0de
    • J
      nfsd4: rearrange cb data structures · 2bf23875
      J. Bruce Fields 提交于
      Mainly I just want to separate the arguments used for setting up the tcp
      client from the rest.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      2bf23875
    • J
      nfsd4: cl_count is unused · b12a05cb
      J. Bruce Fields 提交于
      Now that the shutdown sequence guarantees callbacks are shut down before
      the client is destroyed, we no longer have a use for cl_count.
      
      We'll probably reinstate a reference count on the client some day, but
      it will be held by users other than callbacks.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      b12a05cb
    • J
      nfsd4: don't sleep in lease-break callback · b5a1a81e
      J. Bruce Fields 提交于
      The NFSv4 server's fl_break callback can sleep (dropping the BKL), in
      order to allocate a new rpc task to send a recall to the client.
      
      As far as I can tell this doesn't cause any races in the current code,
      but the analysis is difficult.  Also, the sleep here may complicate the
      move away from the BKL.
      
      So, just schedule some work to do the job for us instead.  The work will
      later also prove useful for restarting a call after the callback
      information is changed.
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      b5a1a81e
  4. 20 4月, 2010 1 次提交
  5. 17 4月, 2010 1 次提交
  6. 03 4月, 2010 4 次提交
  7. 30 3月, 2010 1 次提交
  8. 24 3月, 2010 1 次提交
  9. 23 3月, 2010 1 次提交
    • J
      nfsd: don't break lease while servicing a COMMIT · 91885258
      Jeff Layton 提交于
      This is the second attempt to fix the problem whereby a COMMIT call
      causes a lease break and triggers a possible deadlock.
      
      The problem is that nfsd attempts to break a lease on a COMMIT call.
      This triggers a delegation recall if the lease is held for a delegation.
      If the client is the one holding the delegation and it's the same one on
      which it's issuing the COMMIT, then it can't return that delegation
      until the COMMIT is complete. But, nfsd won't complete the COMMIT until
      the delegation is returned. The client and server are essentially
      deadlocked until the state is marked bad (due to the client not
      responding on the callback channel).
      
      The first patch attempted to deal with this by eliminating the open of
      the file altogether and simply had nfsd_commit pass a NULL file pointer
      to the vfs_fsync_range. That would conflict with some work in progress
      by Christoph Hellwig to clean up the fsync interface, so this patch
      takes a different approach.
      
      This declares a new NFSD_MAY_NOT_BREAK_LEASE access flag that indicates
      to nfsd_open that it should not break any leases when opening the file,
      and has nfsd_commit set that flag on the nfsd_open call.
      
      For now, this patch leaves nfsd_commit opening the file with write
      access since I'm not clear on what sort of access would be more
      appropriate.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Cc: stable@kernel.org
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      91885258
  10. 17 3月, 2010 1 次提交
  11. 15 3月, 2010 3 次提交
    • N
      sunrpc: never return expired entries in sunrpc_cache_lookup · d202cce8
      NeilBrown 提交于
      If sunrpc_cache_lookup finds an expired entry, remove it from
      the cache and return a freshly created non-VALID entry instead.
      This ensures that we only ever get a usable entry, or an
      entry that will become usable once an update arrives.
      i.e. we will never need to repeat the lookup.
      
      This allows us to remove the 'is_expired' test from cache_check
      (i.e. from cache_is_valid).  cache_check should never get an expired
      entry as 'lookup' will never return one.  If it does happen - due to
      inconvenient timing - then just accept it as still valid, it won't be
      very much past it's use-by date.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      d202cce8
    • N
      sunrpc/cache: factor out cache_is_expired · 2f50d8b6
      NeilBrown 提交于
      This removes a tiny bit of code duplication, but more important
      prepares for following patch which will perform the expiry check in
      cache_lookup and the rest of the validity check in cache_check.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      2f50d8b6
    • N
      sunrpc: don't keep expired entries in the auth caches. · 3af4974e
      NeilBrown 提交于
      currently expired entries remain in the auth caches as long
      as there is a reference.
      This was needed long ago when the auth_domain cache used the same
      cache infrastructure.  But since that (being a very different sort
      of cache) was separated, this test is no longer needed.
      
      So remove the test on refcnt and tidy up the surrounding code.
      
      This allows the cache_dequeue call (which needed to be there to
      drop a potentially awkward reference) can be moved outside of the
      spinlock which is a better place for it.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      3af4974e
  12. 10 3月, 2010 1 次提交
  13. 09 3月, 2010 2 次提交
    • L
      Linux 2.6.34-rc1 · 57d54889
      Linus Torvalds 提交于
      57d54889
    • L
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 · e1015418
      Linus Torvalds 提交于
      * git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: (62 commits)
        msi-laptop: depends on RFKILL
        msi-laptop: Detect 3G device exists by standard ec command
        msi-laptop: Add resume method for set the SCM load again
        msi-laptop: Support some MSI 3G netbook that is need load SCM
        msi-laptop: Add threeg sysfs file for support query 3G state by standard 66/62 ec command
        msi-laptop: Support standard ec 66/62 command on MSI notebook and nebook
        Driver core: create lock/unlock functions for struct device
        sysfs: fix for thinko with sysfs_bin_attr_init()
        sysfs: Kill unused sysfs_sb variable.
        sysfs: Pass super_block to sysfs_get_inode
        driver core: Use sysfs_rename_link in device_rename
        sysfs: Implement sysfs_rename_link
        sysfs: Pack sysfs_dirent more tightly.
        sysfs: Serialize updates to the vfs inode
        sysfs: windfarm: init sysfs attributes
        sysfs: Use sysfs_attr_init and sysfs_bin_attr_init on module dynamic attributes
        sysfs: Document sysfs_attr_init and sysfs_bin_attr_init
        sysfs: Use sysfs_attr_init and sysfs_bin_attr_init on dynamic attributes
        sysfs: Use one lockdep class per sysfs attribute.
        sysfs: Only take active references on attributes.
        ...
      e1015418
  14. 08 3月, 2010 15 次提交