diff options
Diffstat (limited to 'fs/nfsd/nfsfh.c')
| -rw-r--r-- | fs/nfsd/nfsfh.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c index ec8393418154..e883a5868be6 100644 --- a/fs/nfsd/nfsfh.c +++ b/fs/nfsd/nfsfh.c | |||
| @@ -162,7 +162,14 @@ static __be32 nfsd_set_fh_dentry(struct svc_rqst *rqstp, struct svc_fh *fhp) | |||
| 162 | /* deprecated, convert to type 3 */ | 162 | /* deprecated, convert to type 3 */ |
| 163 | len = key_len(FSID_ENCODE_DEV)/4; | 163 | len = key_len(FSID_ENCODE_DEV)/4; |
| 164 | fh->fh_fsid_type = FSID_ENCODE_DEV; | 164 | fh->fh_fsid_type = FSID_ENCODE_DEV; |
| 165 | fh->fh_fsid[0] = new_encode_dev(MKDEV(ntohl(fh->fh_fsid[0]), ntohl(fh->fh_fsid[1]))); | 165 | /* |
| 166 | * struct knfsd_fh uses host-endian fields, which are | ||
| 167 | * sometimes used to hold net-endian values. This | ||
| 168 | * confuses sparse, so we must use __force here to | ||
| 169 | * keep it from complaining. | ||
| 170 | */ | ||
| 171 | fh->fh_fsid[0] = new_encode_dev(MKDEV(ntohl((__force __be32)fh->fh_fsid[0]), | ||
| 172 | ntohl((__force __be32)fh->fh_fsid[1]))); | ||
| 166 | fh->fh_fsid[1] = fh->fh_fsid[2]; | 173 | fh->fh_fsid[1] = fh->fh_fsid[2]; |
| 167 | } | 174 | } |
| 168 | data_left -= len; | 175 | data_left -= len; |
| @@ -539,8 +546,7 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, | |||
| 539 | dentry); | 546 | dentry); |
| 540 | 547 | ||
| 541 | fhp->fh_dentry = dget(dentry); /* our internal copy */ | 548 | fhp->fh_dentry = dget(dentry); /* our internal copy */ |
| 542 | fhp->fh_export = exp; | 549 | fhp->fh_export = exp_get(exp); |
| 543 | cache_get(&exp->h); | ||
| 544 | 550 | ||
| 545 | if (fhp->fh_handle.fh_version == 0xca) { | 551 | if (fhp->fh_handle.fh_version == 0xca) { |
| 546 | /* old style filehandle please */ | 552 | /* old style filehandle please */ |
