This is a note to let you know that I've just added the patch titled
nfsd: fix error values returned by nfsd4_lockt() when nfsd_open() fails
to the 3.3-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
nfsd-fix-error-values-returned-by-nfsd4_lockt-when.patch
and it can be found in the queue-3.3 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.
>From 04da6e9d63427b2d0fd04766712200c250b3278f Mon Sep 17 00:00:00 2001
From: Al Viro <[email protected]>
Date: Fri, 13 Apr 2012 00:00:04 -0400
Subject: nfsd: fix error values returned by nfsd4_lockt() when nfsd_open() fails
From: Al Viro <[email protected]>
commit 04da6e9d63427b2d0fd04766712200c250b3278f upstream.
nfsd_open() already returns an NFS error value; only vfs_test_lock()
result needs to be fed through nfserrno(). Broken by commit 55ef12
(nfsd: Ensure nfsv4 calls the underlying filesystem on LOCKT)
three years ago...
Signed-off-by: Al Viro <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
fs/nfsd/nfs4state.c | 23 +++++++++--------------
1 file changed, 9 insertions(+), 14 deletions(-)
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -4109,16 +4109,14 @@ out:
* vfs_test_lock. (Arguably perhaps test_lock should be done with an
* inode operation.)
*/
-static int nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct
file_lock *lock)
+static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp,
struct file_lock *lock)
{
struct file *file;
- int err;
-
- err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_READ, &file);
- if (err)
- return err;
- err = vfs_test_lock(file, lock);
- nfsd_close(file);
+ __be32 err = nfsd_open(rqstp, fhp, S_IFREG, NFSD_MAY_READ, &file);
+ if (!err) {
+ err = nfserrno(vfs_test_lock(file, lock));
+ nfsd_close(file);
+ }
return err;
}
@@ -4132,7 +4130,6 @@ nfsd4_lockt(struct svc_rqst *rqstp, stru
struct inode *inode;
struct file_lock file_lock;
struct nfs4_lockowner *lo;
- int error;
__be32 status;
if (locks_in_grace())
@@ -4178,12 +4175,10 @@ nfsd4_lockt(struct svc_rqst *rqstp, stru
nfs4_transform_lock_offset(&file_lock);
- status = nfs_ok;
- error = nfsd_test_lock(rqstp, &cstate->current_fh, &file_lock);
- if (error) {
- status = nfserrno(error);
+ status = nfsd_test_lock(rqstp, &cstate->current_fh, &file_lock);
+ if (status)
goto out;
- }
+
if (file_lock.fl_type != F_UNLCK) {
status = nfserr_denied;
nfs4_set_lock_denied(&file_lock, &lockt->lt_denied);
Patches currently in stable-queue which might be from [email protected]
are
queue-3.3/ocfs2-l_next_free_req-breakage-on-big-endian.patch
queue-3.3/btrfs-btrfs_root_readonly-broken-on-big-endian.patch
queue-3.3/ext4-fix-endianness-breakage-in-ext4_split_extent_at.patch
queue-3.3/nfsd-fix-b0rken-error-value-for-setattr-on-read-only-mount.patch
queue-3.3/lockd-fix-the-endianness-bug.patch
queue-3.3/ocfs-rl_used-breakage-on-big-endian.patch
queue-3.3/ocfs2-rl_count-endianness-breakage.patch
queue-3.3/nfsd-fix-endianness-breakage-in-test_stateid-handling.patch
queue-3.3/nfsd-fix-compose_entry_fh-failure-exits.patch
queue-3.3/nfsd-fix-error-values-returned-by-nfsd4_lockt-when.patch
queue-3.3/ocfs2-e_leaf_clusters-endianness-breakage.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html