diff options
author | NeilBrown <neilb@suse.de> | 2007-02-14 03:33:12 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-02-14 11:09:53 -0500 |
commit | af6a4e280e3ff453653f39190b57b345ff0bec16 (patch) | |
tree | 4895c90613737db7354f43431ed10a55dc0c98f0 /fs/nfsd/nfs4xdr.c | |
parent | 982aedfd091e6d9831216f8519f12242091be4fd (diff) |
[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>
Diffstat (limited to 'fs/nfsd/nfs4xdr.c')
-rw-r--r-- | fs/nfsd/nfs4xdr.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 18aa9440df14..0efba557fb55 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c | |||
@@ -1563,14 +1563,20 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, | |||
1563 | if (exp->ex_fslocs.migrated) { | 1563 | if (exp->ex_fslocs.migrated) { |
1564 | WRITE64(NFS4_REFERRAL_FSID_MAJOR); | 1564 | WRITE64(NFS4_REFERRAL_FSID_MAJOR); |
1565 | WRITE64(NFS4_REFERRAL_FSID_MINOR); | 1565 | WRITE64(NFS4_REFERRAL_FSID_MINOR); |
1566 | } else if (is_fsid(fhp, rqstp->rq_reffh)) { | 1566 | } else switch(fsid_source(fhp)) { |
1567 | case FSIDSOURCE_FSID: | ||
1567 | WRITE64((u64)exp->ex_fsid); | 1568 | WRITE64((u64)exp->ex_fsid); |
1568 | WRITE64((u64)0); | 1569 | WRITE64((u64)0); |
1569 | } else { | 1570 | break; |
1571 | case FSIDSOURCE_DEV: | ||
1570 | WRITE32(0); | 1572 | WRITE32(0); |
1571 | WRITE32(MAJOR(stat.dev)); | 1573 | WRITE32(MAJOR(stat.dev)); |
1572 | WRITE32(0); | 1574 | WRITE32(0); |
1573 | WRITE32(MINOR(stat.dev)); | 1575 | WRITE32(MINOR(stat.dev)); |
1576 | break; | ||
1577 | case FSIDSOURCE_UUID: | ||
1578 | WRITEMEM(exp->ex_uuid, 16); | ||
1579 | break; | ||
1574 | } | 1580 | } |
1575 | } | 1581 | } |
1576 | if (bmval0 & FATTR4_WORD0_UNIQUE_HANDLES) { | 1582 | if (bmval0 & FATTR4_WORD0_UNIQUE_HANDLES) { |