kNFSd - Tidy up new filehandle type.
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): 20040305163625.1829.patches@notabene
PATCH 1/1 kNFSd - Tidy up new filehandle type.
Hi Andrew,
I would really like this patch to go into 2.6.4. I think it is ready - it
is fairly simple and tested. But if it is too late, so be it.
A change was made to nfsd filehandles about 6 months ago when the 32bit dev_t stuff went in which I wasn't consulted on and I don't like. It basically wastes 32bits of the filehandle when the filesystem is on a device with a new/large device number. Not only don't I like it, but it broken handling for 'fsid=' for such filesystems.
This patch fixes it in an upwards-compatable way (so people already serving files from such a filesystem with a 2.6.3 kernel should not notice any issues). NeilBrown
======================================
nfsd uses several different mechanisms for identifying the filesystem from the filehandle.
This patch:
Marks type 2 as deprecated - it wastes space, and space if the filehandle
is not unlimited
Adds type 3 which handles new, large device number in 32bits of space Tidies up the code for determining which type to use in a newly created filehandle - the addition type 2 broke this code.
----------- Diffstat output ------------
./fs/nfsd/export.c | 13 ++---- ./fs/nfsd/nfsfh.c | 80 +++++++++++++++++++++++++------------------ ./include/linux/nfsd/nfsfh.h | 21 ++++++++++- 3 files changed, 71 insertions(+), 43 deletions(-)
fs/nfsd/export.c renamed from fs/nfsd/export.c~current~ +4 -9
@@ -56,11 +56,6 @@ static int exp_verify_string(char *cp,#define EXPKEY_HASHMASK (EXPKEY_HASHMAX -1)static struct cache_head *expkey_table[EXPKEY_HASHMAX ]; -static inline int key_len (int type) -{ -return type ==0 ?8 : type ==1 ?4 :12 ; -} -static inline int svc_expkey_hash (struct svc_expkey *item) {int hash = item->ek_fsidtype;
@@ -547,8 +542,8 @@ exp_get_key(svc_client *clp, dev_t dev,mk_fsid_v0 (fsidv, dev, ino);return exp_find_key (clp,0 , fsidv,NULL ); } -mk_fsid_v2 (fsidv, dev, ino); -return exp_find_key (clp,2 , fsidv,NULL ); +mk_fsid_v3 (fsidv, dev, ino); +return exp_find_key (clp,3 , fsidv,NULL ); }/*
@@ -684,8 +679,8 @@ static int exp_hash(struct auth_domain *mk_fsid_v0 (fsid, dev, inode->i_ino);return exp_set_key (clp,0 , fsid, exp); } -mk_fsid_v2 (fsid, dev, inode->i_ino); -return exp_set_key (clp,2 , fsid, exp); +mk_fsid_v3 (fsid, dev, inode->i_ino); +return exp_set_key (clp,3 , fsid, exp); }static void exp_unhash (struct svc_export *exp)
fs/nfsd/nfsfh.c renamed from fs/nfsd/nfsfh.c~current~ +47 -33
122 lines not on this page · raw message
include/linux/nfsd/nfsfh.h renamed from include/linux/nfsd/nfsfh.h~current~ +20 -1
@@ -66,8 +66,9 @@ struct nfs_fhbase_old {* 0 - 4 byte device id (ms-2-bytes major, ls-2-bytes minor), 4byte inode number * NOTE: we cannot use the kdev_t device id value, because kdev_t.h * says we mustn't. We must break it up and reassemble. -* Possible future encodings: * 1 - 4 byte user specified identifier +* 2 - 4 byte major, 4 byte minor, 4 byte inode number - DEPRECATED +* 3 - 4 byte device id, encoded for user-space, 4 byte inode number * * The fileid_type identified how the file within the filesystem is encoded. * This is (will be) passed to, and set by, the underlying filesystem if it supports
@@ -114,6 +115,7 @@ struct knfsd_fh {#define fh_auth_type fh_base.fh_new.fb_auth_type#define fh_fileid_type fh_base.fh_new.fb_fileid_type#define fh_auth fh_base.fh_new.fb_auth +#define fh_fsid fh_base.fh_new.fb_auth#ifdef __KERNEL__
@@ -183,6 +185,23 @@ static inline void mk_fsid_v2(u32 *fsidv fsidv[2 ] =ino_t_to_u32 (ino); } +static inline void mk_fsid_v3 (u32 *fsidv,dev_t dev,ino_t ino) +{ + fsidv[0 ] =new_encode_dev (dev); + fsidv[1 ] =ino_t_to_u32 (ino); +} + +static inline int key_len (int type) +{ +switch (type) { +case 0 :return 8 ; +case 1 :return 4 ; +case 2 :return 12 ; +case 3 :return 8 ; +default :return 0 ; + } +} +/* * Shorthand for dprintk()'s */
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs