From patchwork Mon Sep 21 10:03:28 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kinglong Mee X-Patchwork-Id: 7228861 Return-Path: X-Original-To: patchwork-linux-nfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 3A6E6BEEC1 for ; Mon, 21 Sep 2015 10:03:46 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 344142074A for ; Mon, 21 Sep 2015 10:03:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0330B2073A for ; Mon, 21 Sep 2015 10:03:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756516AbbIUKDl (ORCPT ); Mon, 21 Sep 2015 06:03:41 -0400 Received: from mail-pa0-f43.google.com ([209.85.220.43]:33572 "EHLO mail-pa0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756492AbbIUKDj (ORCPT ); Mon, 21 Sep 2015 06:03:39 -0400 Received: by pacex6 with SMTP id ex6so112769574pac.0 for ; Mon, 21 Sep 2015 03:03:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:subject:to:cc:message-id:date:user-agent:mime-version :content-type:content-transfer-encoding; bh=K/yw8x5nuI7mzS9Y2Uo9fsMzCeUE71eIgGfynWZ4ujU=; b=OMqh13adwKJFus9tOy2GUfd0nZDJA+OutjH34VMj93QLoWwHqznF7SvKfGrNtWPigN znpK+UWLNkLAvRc6Isk8FKf8xuzKt6HHpEfqVTn8u5jgB3kjKJSKc0UYR118rf4I/ily UiUI9kth4geSUjsXw8a0FJfaCeOpnPTV+/5d7PT4SJkpeLcmOmHYD88soMd13SLwr6UH gsi+y5Xf5QF8dgBlPfBy5tjOMgx6hj3TNcGhIH/u66ElmBPY4fOWzyQN2vgg0GI2H5lX /sPZTEglrw+zeii2rRn4SDffcShmGq/Ng1LT0X/mR7nu6rMRy94ReYP8T08++2q1385Q WWPQ== X-Received: by 10.66.189.69 with SMTP id gg5mr24440502pac.28.1442829819004; Mon, 21 Sep 2015 03:03:39 -0700 (PDT) Received: from [192.168.99.6] ([104.143.41.79]) by smtp.googlemail.com with ESMTPSA id e6sm23670548pas.35.2015.09.21.03.03.34 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Sep 2015 03:03:38 -0700 (PDT) From: Kinglong Mee Subject: [PATCH] NFS: Skip checking ds_cinfo.buckets when lseg's commit_through_mds is set To: Trond Myklebust Cc: "linux-nfs@vger.kernel.org" , Weston Andros Adamson , kinglongmee@gmail.com Message-ID: <55FFD5F0.5030600@gmail.com> Date: Mon, 21 Sep 2015 18:03:28 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When lseg's commit_through_mds is set, pnfs client always WARN once in nfs_direct_select_verf when checking ds_cinfo.nbuckets. But, filelayout_alloc_commit_info will not initialize the ds_cinfo.nbuckets. It's wrong of checking ds_cinfo.nbuckets, client should skip it. [17844.666094] ------------[ cut here ]------------ [17844.667071] WARNING: CPU: 0 PID: 21758 at /root/source/linux-pnfs/fs/nfs/direct.c:174 nfs_direct_select_verf+0x5a/0x70 [nfs]() [17844.668650] Modules linked in: nfs_layout_nfsv41_files(OE) nfsv4(OE) nfs(OE) fscache(E) nfsd(OE) xfs libcrc32c btrfs ppdev coretemp crct10dif_pclmul auth_rpcgss crc32_pclmul crc32c_intel nfs_acl ghash_clmulni_intel lockd vmw_balloon xor vmw_vmci grace raid6_pq shpchp sunrpc parport_pc i2c_piix4 parport vmwgfx drm_kms_helper ttm drm serio_raw mptspi e1000 scsi_transport_spi mptscsih mptbase ata_generic pata_acpi [last unloaded: fscache] [17844.686676] CPU: 0 PID: 21758 Comm: kworker/0:1 Tainted: G W OE 4.3.0-rc1-pnfs+ #245 [17844.687352] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 05/20/2014 [17844.698502] Workqueue: nfsiod rpc_async_release [sunrpc] [17844.699212] 0000000000000009 0000000043e58010 ffff8800454fbc10 ffffffff813680c4 [17844.699990] ffff8800454fbc48 ffffffff8108b49d ffff88004eb20000 ffff88004eb20000 [17844.700844] ffff880062e26000 0000000000000000 0000000000000001 ffff8800454fbc58 [17844.701637] Call Trace: [17844.725252] [] dump_stack+0x19/0x25 [17844.732693] [] warn_slowpath_common+0x7d/0xb0 [17844.733855] [] warn_slowpath_null+0x1a/0x20 [17844.735015] [] nfs_direct_select_verf+0x5a/0x70 [nfs] [17844.735999] [] nfs_direct_set_hdr_verf+0x23/0x90 [nfs] [17844.736846] [] nfs_direct_write_completion+0x227/0x260 [nfs] [17844.737782] [] nfs_pgio_release+0x1c/0x20 [nfs] [17844.738597] [] pnfs_generic_rw_release+0x23/0x30 [nfsv4] [17844.739486] [] rpc_free_task+0x2a/0x70 [sunrpc] [17844.740326] [] rpc_async_release+0x15/0x20 [sunrpc] [17844.741173] [] process_one_work+0x21c/0x4c0 [17844.741984] [] ? process_one_work+0x16d/0x4c0 [17844.742837] [] worker_thread+0x4a/0x440 [17844.743639] [] ? process_one_work+0x4c0/0x4c0 [17844.744399] [] ? process_one_work+0x4c0/0x4c0 [17844.745176] [] kthread+0xf5/0x110 [17844.745927] [] ? kthread_create_on_node+0x240/0x240 [17844.747105] [] ret_from_fork+0x3f/0x70 [17844.747856] [] ? kthread_create_on_node+0x240/0x240 [17844.748642] ---[ end trace 336a2845d42b83f0 ]--- Signed-off-by: Kinglong Mee --- fs/nfs/direct.c | 2 +- fs/nfs/filelayout/filelayout.c | 5 ++++- include/linux/nfs_xdr.h | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 38678d9..df3b6f4 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c @@ -166,7 +166,7 @@ nfs_direct_select_verf(struct nfs_direct_req *dreq, struct nfs_writeverf *verfp = &dreq->verf; #ifdef CONFIG_NFS_V4_1 - if (ds_clp) { + if (ds_clp && !dreq->ds_cinfo.through_mds) { /* pNFS is in use, use the DS verf */ if (commit_idx >= 0 && commit_idx < dreq->ds_cinfo.nbuckets) verfp = &dreq->ds_cinfo.buckets[commit_idx].direct_verf; diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c index b34f2e2..a0ceedd 100644 --- a/fs/nfs/filelayout/filelayout.c +++ b/fs/nfs/filelayout/filelayout.c @@ -774,8 +774,10 @@ filelayout_alloc_commit_info(struct pnfs_layout_segment *lseg, struct pnfs_commit_bucket *buckets; int size, i; - if (fl->commit_through_mds) + if (fl->commit_through_mds) { + cinfo->ds->through_mds = true; return 0; + } size = (fl->stripe_type == STRIPE_SPARSE) ? fl->dsaddr->ds_num : fl->dsaddr->stripe_count; @@ -816,6 +818,7 @@ filelayout_alloc_commit_info(struct pnfs_layout_segment *lseg, } swap(cinfo->ds->buckets, buckets); cinfo->ds->nbuckets = size; + cinfo->ds->through_mds = false; out: spin_unlock(cinfo->lock); kfree(buckets); diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 52faf7e..fb49189 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h @@ -1161,6 +1161,7 @@ struct pnfs_commit_bucket { }; struct pnfs_ds_commit_info { + bool through_mds; int nwritten; int ncommitting; int nbuckets;