]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
Merge commit 'v2.6.36-rc1' into HEAD
authorJ. Bruce Fields <bfields@redhat.com>
Thu, 26 Aug 2010 17:22:27 +0000 (13:22 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Thu, 26 Aug 2010 17:22:27 +0000 (13:22 -0400)
1  2 
fs/nfsd/nfs4state.c

diff --combined fs/nfsd/nfs4state.c
index 69b266db7f5cf18cfb42f4e71e1e9973bd634711,2e7357104cfdf3208a6abe357c91e92536d8e815..3dfef062396845d2b45cc42a22064ec4402ee05f
@@@ -2450,13 -2450,14 +2450,13 @@@ nfsd4_truncate(struct svc_rqst *rqstp, 
  static __be32
  nfs4_upgrade_open(struct svc_rqst *rqstp, struct nfs4_file *fp, struct svc_fh *cur_fh, struct nfs4_stateid *stp, struct nfsd4_open *open)
  {
 -      u32 op_share_access, new_access;
 +      u32 op_share_access = open->op_share_access & ~NFS4_SHARE_WANT_MASK;
 +      bool new_access;
        __be32 status;
  
 -      set_access(&new_access, stp->st_access_bmap);
 -      new_access = (~new_access) & open->op_share_access & ~NFS4_SHARE_WANT_MASK;
 -
 +      new_access = !test_bit(op_share_access, &stp->st_access_bmap);
        if (new_access) {
 -              status = nfs4_get_vfs_file(rqstp, fp, cur_fh, new_access);
 +              status = nfs4_get_vfs_file(rqstp, fp, cur_fh, op_share_access);
                if (status)
                        return status;
        }
                return status;
        }
        /* remember the open */
 -      op_share_access = open->op_share_access & ~NFS4_SHARE_WANT_MASK;
        __set_bit(op_share_access, &stp->st_access_bmap);
        __set_bit(open->op_share_deny, &stp->st_deny_bmap);
  
@@@ -2981,6 -2983,7 +2981,6 @@@ nfs4_preprocess_stateid_op(struct nfsd4
                                *filpp = find_readable_file(stp->st_file);
                        else
                                *filpp = find_writeable_file(stp->st_file);
 -                      BUG_ON(!*filpp); /* assured by check_openmode */
                }
        }
        status = nfs_ok;
@@@ -3558,8 -3561,7 +3558,8 @@@ nfsd4_lock(struct svc_rqst *rqstp, stru
        struct nfs4_stateowner *open_sop = NULL;
        struct nfs4_stateowner *lock_sop = NULL;
        struct nfs4_stateid *lock_stp;
 -      struct file *filp;
 +      struct nfs4_file *fp;
 +      struct file *filp = NULL;
        struct file_lock file_lock;
        struct file_lock conflock;
        __be32 status = 0;
                 * lock stateid.
                 */
                struct nfs4_stateid *open_stp = NULL;
 -              struct nfs4_file *fp;
                
                status = nfserr_stale_clientid;
                if (!nfsd4_has_session(cstate) &&
                if (status)
                        goto out;
                lock_sop = lock->lk_replay_owner;
 +              fp = lock_stp->st_file;
        }
        /* lock->lk_replay_owner and lock_stp have been created or found */
  
        switch (lock->lk_type) {
                case NFS4_READ_LT:
                case NFS4_READW_LT:
 -                      filp = find_readable_file(lock_stp->st_file);
 +                      if (find_readable_file(lock_stp->st_file)) {
 +                              nfs4_get_vfs_file(rqstp, fp, &cstate->current_fh, NFS4_SHARE_ACCESS_READ);
 +                              filp = find_readable_file(lock_stp->st_file);
 +                      }
                        file_lock.fl_type = F_RDLCK;
                        cmd = F_SETLK;
                break;
                case NFS4_WRITE_LT:
                case NFS4_WRITEW_LT:
 -                      filp = find_writeable_file(lock_stp->st_file);
 +                      if (find_writeable_file(lock_stp->st_file)) {
 +                              nfs4_get_vfs_file(rqstp, fp, &cstate->current_fh, NFS4_SHARE_ACCESS_WRITE);
 +                              filp = find_writeable_file(lock_stp->st_file);
 +                      }
                        file_lock.fl_type = F_WRLCK;
                        cmd = F_SETLK;
                break;
@@@ -4215,8 -4211,8 +4215,8 @@@ nfs4_state_shutdown(void
        nfs4_lock_state();
        nfs4_release_reclaim();
        __nfs4_state_shutdown();
-       nfsd4_destroy_callback_queue();
        nfs4_unlock_state();
+       nfsd4_destroy_callback_queue();
  }
  
  /*