Messages in this thread | | | Date | Mon, 26 Mar 2007 00:07:13 -0700 | From | "Phy Prabab" <> | Subject | Re: Opps in 2.6.21-rc4 nfsd |
| |
Opps, forgot, this is for 2.6.20.x, guess I'll wait for the updated patch.
Thanks! Phy
On 3/25/07, Neil Brown <neilb@suse.de> wrote: > On Monday March 26, neilb@suse.de wrote: > > > > I'll try to have a patch for you to try on 2.6.21rc4 shortly. > > > > This patch should remove the Oops, but I have a suspicion that > something else is wrong, so I'd be very interested if you could run > with this for a few days and report the results. > > NeilBrown > > Signed-off-by: Neil Brown <neilb@suse.de> > > ### Diffstat output > ./fs/nfsd/nfsfh.c | 37 +++++++++++++++++++++++++++++++++++-- > 1 file changed, 35 insertions(+), 2 deletions(-) > > diff .prev/fs/nfsd/nfsfh.c ./fs/nfsd/nfsfh.c > --- .prev/fs/nfsd/nfsfh.c 2007-03-26 10:51:01.000000000 +1000 > +++ ./fs/nfsd/nfsfh.c 2007-03-26 11:04:20.000000000 +1000 > @@ -324,7 +324,7 @@ fh_compose(struct svc_fh *fhp, struct sv > * > */ > > - u8 version = 1; > + u8 version; > u8 fsid_type = 0; > struct inode * inode = dentry->d_inode; > struct dentry *parent = dentry->d_parent; > @@ -342,12 +342,45 @@ fh_compose(struct svc_fh *fhp, struct sv > * the reference filehandle (if it is in the same export) > * or the export options. > */ > + retry: > + version = 1; > if (ref_fh && ref_fh->fh_export == exp) { > version = ref_fh->fh_handle.fh_version; > if (version == 0xca) > fsid_type = FSID_DEV; > - else > + else { > fsid_type = ref_fh->fh_handle.fh_fsid_type; > + /* need to check that this type works for this > + * export point. As the lookup was done with > + * help from user-space, there is no guarantee > + */ > + if (ref_fh == fhp) > + fh_put(ref_fh); > + ref_fh = NULL; > + switch(fsid_type) { > + case FSID_DEV: > + if (!old_valid_dev(ex_dev)) > + goto retry; > + break; > + case FSID_NUM: > + if (! (exp->ex_flags & NFSEXP_FSID)) > + goto retry; > + break; > + case FSID_MAJOR_MINOR: > + case FSID_ENCODE_DEV: > + break; > + case FSID_UUID8: > + case FSID_UUID16: > + if (!root_export) > + goto retry; > + /* fall through */ > + case FSID_UUID4_INUM: > + case FSID_UUID16_INUM: > + if (exp->ex_uuid == NULL) > + goto retry; > + break; > + } > + } > /* We know this version/type works for this export > * so there is no need for further checks. > */ > - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |