On Wed, Dec 14, 2011 at 2:39 PM, <bjschuma@xxxxxxxxxx> wrote: > From: Bryan Schumaker <bjschuma@xxxxxxxxxx> > > Otherwise the for loop could try to use a file recently removed from the > file_hashtbl list and oops. > > Signed-off-by: Bryan Schumaker <bjschuma@xxxxxxxxxx> > --- > fs/nfsd/nfs4state.c | 9 +++++---- > 1 files changed, 5 insertions(+), 4 deletions(-) > > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c > index 19ca9b5..7355fe4 100644 > --- a/fs/nfsd/nfs4state.c > +++ b/fs/nfsd/nfs4state.c > @@ -4505,18 +4505,19 @@ void nfsd_forget_openowners(u64 num) > int nfsd_process_n_delegations(u64 num, void (*deleg_func)(struct nfs4_delegation *)) > { > int i, count = 0; > - struct nfs4_file *fp; > - struct nfs4_delegation *dp, *next; > + struct nfs4_file *fp, *fnext; > + struct nfs4_delegation *dp, *dnext; > > for (i = 0; i < FILE_HASH_SIZE; i++) { > - list_for_each_entry(fp, &file_hashtbl[i], fi_hash) { > - list_for_each_entry_safe(dp, next, &fp->fi_delegations, dl_perfile) { > + list_for_each_entry_safe(fp, fnext, &file_hashtbl[i], fi_hash) { > + list_for_each_entry_safe(dp, dnext, &fp->fi_delegations, dl_perfile) { > deleg_func(dp); > if (++count == num) > return count; > } > } > } > + > return count; > } > > -- > 1.7.8 > Confirmed to fix the oops I was getting with fault injection. (tested without the previous patch, NFSD: Only reinitilize the recall_lru list under the recall lock) -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html