This is a note to let you know that I've just added the patch titled
nfsd: fix compose_entry_fh() failure exits
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-compose_entry_fh-failure-exits.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 efe39651f08813180f37dc508d950fc7d92b29a8 Mon Sep 17 00:00:00 2001
From: Al Viro <[email protected]>
Date: Fri, 13 Apr 2012 00:32:14 -0400
Subject: nfsd: fix compose_entry_fh() failure exits
From: Al Viro <[email protected]>
commit efe39651f08813180f37dc508d950fc7d92b29a8 upstream.
Restore the original logics ("fail on mountpoints, negatives and in
case of fh_compose() failures"). Since commit 8177e (nfsd: clean up
readdirplus encoding) that got broken -
rv = fh_compose(fhp, exp, dchild, &cd->fh);
if (rv)
goto out;
if (!dchild->d_inode)
goto out;
rv = 0;
out:
is equivalent to
rv = fh_compose(fhp, exp, dchild, &cd->fh);
out:
and the second check has no effect whatsoever...
Signed-off-by: Al Viro <[email protected]>
Cc: "J. Bruce Fields" <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
fs/nfsd/nfs3xdr.c | 22 ++++++++--------------
1 file changed, 8 insertions(+), 14 deletions(-)
--- a/fs/nfsd/nfs3xdr.c
+++ b/fs/nfsd/nfs3xdr.c
@@ -803,13 +803,13 @@ encode_entry_baggage(struct nfsd3_readdi
return p;
}
-static int
+static __be32
compose_entry_fh(struct nfsd3_readdirres *cd, struct svc_fh *fhp,
const char *name, int namlen)
{
struct svc_export *exp;
struct dentry *dparent, *dchild;
- int rv = 0;
+ __be32 rv = nfserr_noent;
dparent = cd->fh.fh_dentry;
exp = cd->fh.fh_export;
@@ -817,26 +817,20 @@ compose_entry_fh(struct nfsd3_readdirres
if (isdotent(name, namlen)) {
if (namlen == 2) {
dchild = dget_parent(dparent);
- if (dchild == dparent) {
- /* filesystem root - cannot return filehandle
for ".." */
- dput(dchild);
- return -ENOENT;
- }
+ /* filesystem root - cannot return filehandle for ".."
*/
+ if (dchild == dparent)
+ goto out;
} else
dchild = dget(dparent);
} else
dchild = lookup_one_len(name, dparent, namlen);
if (IS_ERR(dchild))
- return -ENOENT;
- rv = -ENOENT;
+ return rv;
if (d_mountpoint(dchild))
goto out;
- rv = fh_compose(fhp, exp, dchild, &cd->fh);
- if (rv)
- goto out;
if (!dchild->d_inode)
goto out;
- rv = 0;
+ rv = fh_compose(fhp, exp, dchild, &cd->fh);
out:
dput(dchild);
return rv;
@@ -845,7 +839,7 @@ out:
static __be32 *encode_entryplus_baggage(struct nfsd3_readdirres *cd, __be32
*p, const char *name, int namlen)
{
struct svc_fh fh;
- int err;
+ __be32 err;
fh_init(&fh, NFS3_FHSIZE);
err = compose_entry_fh(cd, &fh, name, namlen);
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