Message ID | 8760mgvkh8.fsf@notabene.neil.brown.name (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> On Dec 18, 2016, at 19:19, NeilBrown <neilb@suse.com> wrote: > > > Various places assume that if nfs4_fl_prepare_ds() turns a non-NULL 'ds', > then ds->ds_clp will also be non-NULL. > > This is not necessasrily true in the case when the process received a fatal signal > while nfs4_pnfs_ds_connect is waiting in nfs4_wait_ds_connect(). > In that case ->ds_clp may not be set, and the devid may not recently have been marked > unavailable. > > So add a test for ds_clp == NULL and return NULL in that case. > > Fixes: c23266d532b4 ("NFS4.1 Fix data server connection race") > Signed-off-by: NeilBrown <neilb@suse.com> > Acked-by: Olga Kornievskaia <aglo@umich.edu> > Acked-by: Adamson, Andy <William.Adamson@netapp.com> > --- > > Hi Trond, > I just noticed that this wasn't in your 4.10 pull request. So I've > added Acked-bys from Andy and Olga and am resending. > Sorry for having missed their Acked-bys earlier… I’ll send this together with the other 10 patches tomorrow. Cheers Trond
diff --git a/fs/nfs/filelayout/filelayoutdev.c b/fs/nfs/filelayout/filelayoutdev.c index a5589b791439..f956ca20a8a3 100644 --- a/fs/nfs/filelayout/filelayoutdev.c +++ b/fs/nfs/filelayout/filelayoutdev.c @@ -282,7 +282,8 @@ nfs4_fl_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx) s->nfs_client->cl_minorversion); out_test_devid: - if (filelayout_test_devid_unavailable(devid)) + if (ret->ds_clp == NULL || + filelayout_test_devid_unavailable(devid)) ret = NULL; out: return ret;