Merge branch 'for-2.6.33' of git://linux-nfs.org/~bfields/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 7 Jan 2010 02:10:15 +0000 (18:10 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 7 Jan 2010 02:10:15 +0000 (18:10 -0800)
* 'for-2.6.33' of git://linux-nfs.org/~bfields/linux:
  sunrpc: fix peername failed on closed listener
  nfsd: make sure data is on disk before calling ->fsync
  nfsd: fix "insecure" export option

1  2 
fs/nfsd/vfs.c
net/sunrpc/svc_xprt.c

diff --combined fs/nfsd/vfs.c
@@@ -752,6 -752,8 +752,6 @@@ nfsd_open(struct svc_rqst *rqstp, struc
                            flags, current_cred());
        if (IS_ERR(*filp))
                host_err = PTR_ERR(*filp);
 -      else
 -              ima_counts_get(*filp);
  out_nfserr:
        err = nfserrno(host_err);
  out:
@@@ -780,12 -782,9 +780,9 @@@ static inline int nfsd_dosync(struct fi
        int (*fsync) (struct file *, struct dentry *, int);
        int err;
  
-       err = filemap_fdatawrite(inode->i_mapping);
+       err = filemap_write_and_wait(inode->i_mapping);
        if (err == 0 && fop && (fsync = fop->fsync))
                err = fsync(filp, dp, 0);
-       if (err == 0)
-               err = filemap_fdatawait(inode->i_mapping);
        return err;
  }
  
@@@ -2130,7 -2129,8 +2127,7 @@@ nfsd_permission(struct svc_rqst *rqstp
         */
        path.mnt = exp->ex_path.mnt;
        path.dentry = dentry;
 -      err = ima_path_check(&path, acc & (MAY_READ | MAY_WRITE | MAY_EXEC),
 -                           IMA_COUNT_LEAVE);
 +      err = ima_path_check(&path, acc & (MAY_READ | MAY_WRITE | MAY_EXEC));
  nfsd_out:
        return err? nfserrno(err) : 0;
  }
diff --combined net/sunrpc/svc_xprt.c
@@@ -127,8 -127,8 +127,8 @@@ static void svc_xprt_free(struct kref *
        struct svc_xprt *xprt =
                container_of(kref, struct svc_xprt, xpt_ref);
        struct module *owner = xprt->xpt_class->xcl_owner;
 -      if (test_bit(XPT_CACHE_AUTH, &xprt->xpt_flags)
 -          && xprt->xpt_auth_cache != NULL)
 +      if (test_bit(XPT_CACHE_AUTH, &xprt->xpt_flags) &&
 +          xprt->xpt_auth_cache != NULL)
                svcauth_unix_info_release(xprt->xpt_auth_cache);
        xprt->xpt_ops->xpo_free(xprt);
        module_put(owner);
@@@ -699,7 -699,8 +699,8 @@@ int svc_recv(struct svc_rqst *rqstp, lo
        spin_unlock_bh(&pool->sp_lock);
  
        len = 0;
-       if (test_bit(XPT_LISTENER, &xprt->xpt_flags)) {
+       if (test_bit(XPT_LISTENER, &xprt->xpt_flags) &&
+           !test_bit(XPT_CLOSE, &xprt->xpt_flags)) {
                struct svc_xprt *newxpt;
                newxpt = xprt->xpt_ops->xpo_accept(xprt);
                if (newxpt) {
@@@ -834,8 -835,8 +835,8 @@@ static void svc_age_temp_xprts(unsigne
                 * through, close it. */
                if (!test_and_set_bit(XPT_OLD, &xprt->xpt_flags))
                        continue;
 -              if (atomic_read(&xprt->xpt_ref.refcount) > 1
 -                  || test_bit(XPT_BUSY, &xprt->xpt_flags))
 +              if (atomic_read(&xprt->xpt_ref.refcount) > 1 ||
 +                  test_bit(XPT_BUSY, &xprt->xpt_flags))
                        continue;
                svc_xprt_get(xprt);
                list_move(le, &to_be_aged);