From patchwork Tue Sep 12 13:27:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 9949171 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 6EF1B6038F for ; Tue, 12 Sep 2017 13:27:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5F6B828FA9 for ; Tue, 12 Sep 2017 13:27:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5387528FA8; Tue, 12 Sep 2017 13:27:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BDCDD28FA8 for ; Tue, 12 Sep 2017 13:27:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751313AbdILN1x (ORCPT ); Tue, 12 Sep 2017 09:27:53 -0400 Received: from mail-io0-f193.google.com ([209.85.223.193]:38126 "EHLO mail-io0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751289AbdILN1x (ORCPT ); Tue, 12 Sep 2017 09:27:53 -0400 Received: by mail-io0-f193.google.com with SMTP id j141so8521745ioj.5 for ; Tue, 12 Sep 2017 06:27:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=ScnVyhzMlWtsveCf6cjewsinpKbO6XuRQBBoqhO1PM8=; b=RxZvB11vDEDF7+4QTURaoCj4GTWpmMF0EB7F93P/OjpRO9LXJmhit1XexkbnEJn2js b8NS/nlq7VU6NKtO3AvMNPU4gBddYhFBBkclz1gxRsEGd2NP3TEwpQdzAtxcSaL2SexS nsALMEvx8f9vnyO1kDHO05LkkMi41F/W7NpP8UicM61vZ7kspUkIGueuyYzN144HnvfV ju/lsatQDoO1lAIz3rl38Tgt7hfuRL6aAbKB5g7sodS3ZqC0eRqWXoBCe6LCWN6T4+7i 2xPinjOO5mqIqw2Eq8LYgSu2+1CSrfMAn1YodjN9Q2D/P2UUp17pktoQZTIrAhPjfCDT 8i1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :mime-version:content-transfer-encoding; bh=ScnVyhzMlWtsveCf6cjewsinpKbO6XuRQBBoqhO1PM8=; b=BISQBWnH8BjGhpxuvZS7BXEOsE9dKppLBCQzm0wy6QNpmzr3XErJ6SUTxC+2JgFYhI E+9m5MR+Wa6ga5XIbEasGOnqu5YXdrvpJz65lnIASLqCPjTi2CmwvLNEgX6Ij0jgEM9q 0HNyhLpoLeEKUkqR6uzE7eSvrJpETX8nuNJPEtC/7vKN9uDNRbIOUhtjjIi+zJmMq5+B k6bOngXDUlEk2LRh08VCk/y6SJZPPq8lLJQgPXt9sUDaGK1ZZij5/7T6jIiMhYfVv14M 9i1K3fDxfYJHLMV+XnDDpLfFYuXI6ZrRoIDwtRoIJa7K8+/WGm7/QkGzZQbHcFWU9oPq Hm7w== X-Gm-Message-State: AHPjjUikjqZtMbQIJ2+VO1QLpw5/zed5DWbFRFjmQXDvDtDTGtZh/fC0 L+K3PCGKQw6suou5djc= X-Google-Smtp-Source: AOwi7QCEuVl6ELy9b2AP3roP7cxTReSgGB0itq9vbGIGJJTeHOJtG2b+Y7kRGm80fV+H6Rtp0NugKw== X-Received: by 10.107.132.226 with SMTP id o95mr19750413ioi.79.1505222872198; Tue, 12 Sep 2017 06:27:52 -0700 (PDT) Received: from localhost.localdomain (c-68-49-162-121.hsd1.mi.comcast.net. [68.49.162.121]) by smtp.gmail.com with ESMTPSA id k9sm6156969iok.17.2017.09.12.06.27.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 12 Sep 2017 06:27:51 -0700 (PDT) From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH] pNFS: Use the standard I/O stateid when calling LAYOUTGET Date: Tue, 12 Sep 2017 09:27:48 -0400 Message-Id: <20170912132748.6403-1-trond.myklebust@primarydata.com> X-Mailer: git-send-email 2.13.5 MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Instead of having a private method for copying the open/delegation stateid, use the same call that is used for standard I/O through the MDS. Note that this means we transmit the stateid with a zero seqid, avoiding issues with NFS4ERR_OLD_STATEID. Signed-off-by: Trond Myklebust --- fs/nfs/pnfs.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 7879ed8ceb76..3bcd669a3152 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -1664,7 +1664,7 @@ pnfs_update_layout(struct inode *ino, .offset = pos, .length = count, }; - unsigned pg_offset, seq; + unsigned pg_offset; struct nfs_server *server = NFS_SERVER(ino); struct nfs_client *clp = server->nfs_client; struct pnfs_layout_hdr *lo = NULL; @@ -1754,10 +1754,14 @@ pnfs_update_layout(struct inode *ino, } first = true; - do { - seq = read_seqbegin(&ctx->state->seqlock); - nfs4_stateid_copy(&stateid, &ctx->state->stateid); - } while (read_seqretry(&ctx->state->seqlock, seq)); + if (nfs4_select_rw_stateid(ctx->state, + iomode == IOMODE_RW ? FMODE_WRITE : FMODE_READ, + NULL, &stateid, NULL) != 0) { + trace_pnfs_update_layout(ino, pos, count, + iomode, lo, lseg, + PNFS_UPDATE_LAYOUT_INVALID_OPEN); + goto out_unlock; + } } else { nfs4_stateid_copy(&stateid, &lo->plh_stateid); }