vserver 2.0 rc7
[linux-2.6.git] / fs / nfsd / nfs3xdr.c
index 0c133b9..f307000 100644 (file)
@@ -123,9 +123,9 @@ 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;
 
@@ -809,6 +809,11 @@ 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 1;
+                       }
                } else
                        dchild = dget(dparent);
        } else