return p;
}
-static inline u32 *
-decode_pathname(u32 *p, char **namp, int *lenp)
-{
- char *name;
- int i;
-
- if ((p = xdr_decode_string_inplace(p, namp, lenp, NFS3_MAXPATHLEN)) != NULL) {
- for (i = 0, name = *namp; i < *lenp; i++, name++) {
- if (*name == '\0')
- return NULL;
- }
- }
-
- return p;
-}
-
static inline u32 *
decode_sattr3(u32 *p, struct iattr *iap)
{
iap->ia_valid |= ATTR_GID;
gid = ntohl(*p++);
}
- iap->ia_uid = INOXID_UID(1, uid, gid);
- iap->ia_gid = INOXID_GID(1, uid, gid);
- iap->ia_xid = INOXID_XID(1, uid, gid, 0);
+ iap->ia_uid = INOXID_UID(XID_TAG_NFSD, uid, gid);
+ iap->ia_gid = INOXID_GID(XID_TAG_NFSD, uid, gid);
+ iap->ia_xid = INOXID_XID(XID_TAG_NFSD, uid, gid, 0);
if (*p++) {
u64 newsize;
if (isdotent(name, namlen)) {
if (namlen == 2) {
dchild = dget_parent(dparent);
+ if (dchild == dparent) {
+ /* filesystem root - cannot return filehandle for ".." */
+ dput(dchild);
+ return 1;
+ }
} else
dchild = dget(dparent);
} else