[PATCH] knfsd: add some new fsid types
Add support for using a filesystem UUID to identify and export point in the filehandle. For NFSv2, this UUID is xor-ed down to 4 or 8 bytes so that it doesn't take up too much room. For NFSv3+, we use the full 16 bytes, and possibly also a 64bit inode number for exports beneath the root of a filesystem. When generating an fsid to return in 'stat' information, use the UUID (hashed down to size) if it is available and a small 'fsid' was not specifically provided. Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
982aedfd09
commit
af6a4e280e
@@ -1563,14 +1563,20 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
|
||||
if (exp->ex_fslocs.migrated) {
|
||||
WRITE64(NFS4_REFERRAL_FSID_MAJOR);
|
||||
WRITE64(NFS4_REFERRAL_FSID_MINOR);
|
||||
} else if (is_fsid(fhp, rqstp->rq_reffh)) {
|
||||
} else switch(fsid_source(fhp)) {
|
||||
case FSIDSOURCE_FSID:
|
||||
WRITE64((u64)exp->ex_fsid);
|
||||
WRITE64((u64)0);
|
||||
} else {
|
||||
break;
|
||||
case FSIDSOURCE_DEV:
|
||||
WRITE32(0);
|
||||
WRITE32(MAJOR(stat.dev));
|
||||
WRITE32(0);
|
||||
WRITE32(MINOR(stat.dev));
|
||||
break;
|
||||
case FSIDSOURCE_UUID:
|
||||
WRITEMEM(exp->ex_uuid, 16);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (bmval0 & FATTR4_WORD0_UNIQUE_HANDLES) {
|
||||
|
Reference in New Issue
Block a user