From patchwork Mon Feb 21 22:30:37 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benny Halevy X-Patchwork-Id: 578621 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 p1LMTpfl022573 for ; Mon, 21 Feb 2011 22:30:42 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752001Ab1BUWam (ORCPT ); Mon, 21 Feb 2011 17:30:42 -0500 Received: from daytona.panasas.com ([67.152.220.89]:47186 "EHLO daytona.panasas.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751883Ab1BUWal (ORCPT ); Mon, 21 Feb 2011 17:30:41 -0500 Received: from lt.bhalevy.com.com ([172.17.33.184]) by daytona.panasas.com with Microsoft SMTPSVC(6.0.3790.4675); Mon, 21 Feb 2011 17:30:41 -0500 From: Benny Halevy To: linux-nfs@vger.kernel.org Cc: Benny Halevy Subject: [PATCH 6/9] pnfs: return NFS4ERR_DELAY from layoutrecall while waiting on lsegs Date: Mon, 21 Feb 2011 14:30:37 -0800 Message-Id: <1298327437-8675-1-git-send-email-bhalevy@panasas.com> X-Mailer: git-send-email 1.7.3.4 In-Reply-To: <4D62E6F3.8000304@panasas.com> References: <4D62E6F3.8000304@panasas.com> X-OriginalArrivalTime: 21 Feb 2011 22:30:41.0291 (UTC) FILETIME=[F8A5A5B0:01CBD216] 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, 21 Feb 2011 22:30:42 +0000 (UTC) diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c index 9547c34..5e4b5d1 100644 --- a/fs/nfs/callback_proc.c +++ b/fs/nfs/callback_proc.c @@ -186,6 +186,7 @@ void nfs_client_return_layouts(struct nfs_client *clp) { struct pnfs_cb_lrecall_info *cb_info; + dprintk("%s\n", __func__); spin_lock(&clp->cl_lock); while (true) { if (list_empty(&clp->cl_layoutrecalls)) { @@ -270,10 +271,13 @@ static int initiate_layout_draining(struct pnfs_cb_lrecall_info *cb_info) spin_lock(&lo->inode->i_lock); if (rv == NFS4_OK) { lo->plh_block_lgets++; - nfs4_asynch_forget_layouts(lo, &args->cbl_range, - cb_info->pcl_notify_bit, - &cb_info->pcl_count, - &free_me_list); + if (nfs4_asynch_forget_layouts(lo, &args->cbl_range, + cb_info->pcl_notify_bit, + &cb_info->pcl_count, + &free_me_list)) + rv = NFS4ERR_DELAY; + else + rv = NFS4ERR_NOMATCHING_LAYOUT; } pnfs_set_layout_stateid(lo, &args->cbl_stateid, true); spin_unlock(&lo->inode->i_lock); @@ -309,10 +313,13 @@ static int initiate_layout_draining(struct pnfs_cb_lrecall_info *cb_info) &recall_list, plh_bulk_recall) { spin_lock(&lo->inode->i_lock); set_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags); - nfs4_asynch_forget_layouts(lo, &range, - cb_info->pcl_notify_bit, - &cb_info->pcl_count, - &free_me_list); + if (nfs4_asynch_forget_layouts(lo, &range, + cb_info->pcl_notify_bit, + &cb_info->pcl_count, + &free_me_list)) + rv = NFS4ERR_DELAY; + else + rv = NFS4ERR_NOMATCHING_LAYOUT; list_del_init(&lo->plh_bulk_recall); spin_unlock(&lo->inode->i_lock); put_layout_hdr(lo);