2002-08-14 20:50:11

by Kendrick M. Smith

[permalink] [raw]
Subject: REPOST patch 28/38: SERVER: allow resfh==fhp in fh_compose()


Change fh_compose() so that it will do the right thing if fhp==res_fh.
(This is convenient in the NFSv4 LOOKUP operation, which _replaces_
CURRENT_FH with the filehandle obtained by lookup.)

--- old/fs/nfsd/nfsfh.c Sun Aug 11 22:55:51 2002
+++ new/fs/nfsd/nfsfh.c Sun Aug 11 23:03:57 2002
@@ -316,7 +316,8 @@ fh_compose(struct svc_fh *fhp, struct sv
* Then create a 32byte filehandle using nfs_fhbase_old
*
*/
-
+ u8 ref_fh_version = 1;
+ u8 ref_fh_fsid_type = 1;
struct inode * inode = dentry->d_inode;
struct dentry *parent = dentry->d_parent;
__u32 *datap;
@@ -326,6 +327,13 @@ fh_compose(struct svc_fh *fhp, struct sv
parent->d_name.name, dentry->d_name.name,
(inode ? inode->i_ino : 0));

+ if (ref_fh) {
+ ref_fh_version = ref_fh->fh_handle.fh_version;
+ ref_fh_fsid_type = ref_fh->fh_handle.fh_fsid_type;
+ if (ref_fh == fhp)
+ fh_put(ref_fh);
+ }
+
if (fhp->fh_locked || fhp->fh_dentry) {
printk(KERN_ERR "fh_compose: fh %s/%s not initialized!\n",
parent->d_name.name, dentry->d_name.name);
@@ -337,8 +345,7 @@ fh_compose(struct svc_fh *fhp, struct sv
fhp->fh_dentry = dentry; /* our internal copy */
fhp->fh_export = exp;

- if (ref_fh &&
- ref_fh->fh_handle.fh_version == 0xca) {
+ if (ref_fh_version == 0xca) {
/* old style filehandle please */
memset(&fhp->fh_handle.fh_base, 0, NFS_FHSIZE);
fhp->fh_handle.fh_size = NFS_FHSIZE;
@@ -354,7 +361,7 @@ fh_compose(struct svc_fh *fhp, struct sv
fhp->fh_handle.fh_auth_type = 0;
datap = fhp->fh_handle.fh_auth+0;
if ((exp->ex_flags & NFSEXP_FSID) &&
- (!ref_fh || ref_fh->fh_handle.fh_fsid_type == 1)) {
+ (ref_fh_fsid_type == 1)) {
fhp->fh_handle.fh_fsid_type = 1;
/* fsid_type 1 == 4 bytes filesystem id */
*datap++ = exp->ex_fsid;



-------------------------------------------------------
This sf.net email is sponsored by: Dice - The leading online job board
for high-tech professionals. Search and apply for tech jobs today!
http://seeker.dice.com/seeker.epl?rel_code=31
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs