From patchwork Mon Mar 7 16:36:03 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "J. Bruce Fields" X-Patchwork-Id: 616031 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p27GaEL3026423 for ; Mon, 7 Mar 2011 16:36:14 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754141Ab1CGQgH (ORCPT ); Mon, 7 Mar 2011 11:36:07 -0500 Received: from fieldses.org ([174.143.236.118]:39720 "EHLO fieldses.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754168Ab1CGQgE (ORCPT ); Mon, 7 Mar 2011 11:36:04 -0500 Received: from bfields by fieldses.org with local (Exim 4.72) (envelope-from ) id 1PwdPf-0001rO-Qg for linux-nfs@vger.kernel.org; Mon, 07 Mar 2011 11:36:03 -0500 Date: Mon, 7 Mar 2011 11:36:03 -0500 To: linux-nfs@vger.kernel.org Subject: [PATCH] nfsd4: fix bad pointer on failure to find delegation Message-ID: <20110307163603.GB6718@fieldses.org> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-06-14) From: "J. Bruce Fields" Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Mon, 07 Mar 2011 16:36:14 +0000 (UTC) diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 54b60bf..7b566ec 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -2445,15 +2445,16 @@ nfs4_check_delegmode(struct nfs4_delegation *dp, int flags) static struct nfs4_delegation * find_delegation_file(struct nfs4_file *fp, stateid_t *stid) { - struct nfs4_delegation *dp = NULL; + struct nfs4_delegation *dp; spin_lock(&recall_lock); - list_for_each_entry(dp, &fp->fi_delegations, dl_perfile) { - if (dp->dl_stateid.si_stateownerid == stid->si_stateownerid) - break; - } + list_for_each_entry(dp, &fp->fi_delegations, dl_perfile) + if (dp->dl_stateid.si_stateownerid == stid->si_stateownerid) { + spin_unlock(&recall_lock); + return dp; + } spin_unlock(&recall_lock); - return dp; + return NULL; } int share_access_to_flags(u32 share_access)