mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-07-27 06:18:13 +00:00
2177f80076
Duplicate patches between PSP and 3.2.17 have been dropped from the 3.2.17 series Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> Signed-off-by: Denys Dmytriyenko <denys@ti.com>
93 lines
2.5 KiB
Diff
93 lines
2.5 KiB
Diff
From 58c574420bacc1f5dc171dff6f0915ebc5749ee3 Mon Sep 17 00:00:00 2001
|
|
From: Al Viro <viro@zeniv.linux.org.uk>
|
|
Date: Fri, 13 Apr 2012 00:32:14 -0400
|
|
Subject: [PATCH 049/165] nfsd: fix compose_entry_fh() failure exits
|
|
|
|
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 <viro@zeniv.linux.org.uk>
|
|
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|
---
|
|
fs/nfsd/nfs3xdr.c | 22 ++++++++--------------
|
|
1 files changed, 8 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
|
|
index 08c6e36..43f46cd 100644
|
|
--- a/fs/nfsd/nfs3xdr.c
|
|
+++ b/fs/nfsd/nfs3xdr.c
|
|
@@ -803,13 +803,13 @@ encode_entry_baggage(struct nfsd3_readdirres *cd, __be32 *p, const char *name,
|
|
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 *cd, struct svc_fh *fhp,
|
|
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);
|
|
--
|
|
1.7.7.6
|
|
|