From patchwork Tue Jun 21 21:34:49 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 9191439 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 520E16075E for ; Tue, 21 Jun 2016 21:35:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4251528342 for ; Tue, 21 Jun 2016 21:35:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 372A528383; Tue, 21 Jun 2016 21:35:34 +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.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,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 2745428342 for ; Tue, 21 Jun 2016 21:35:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751676AbcFUVf3 (ORCPT ); Tue, 21 Jun 2016 17:35:29 -0400 Received: from mail-it0-f66.google.com ([209.85.214.66]:36139 "EHLO mail-it0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751579AbcFUVfZ (ORCPT ); Tue, 21 Jun 2016 17:35:25 -0400 Received: by mail-it0-f66.google.com with SMTP id h190so4082804ith.3 for ; Tue, 21 Jun 2016 14:35:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=aSAmOKdW+6YbbCOzb0VJESGb7KW7C8gID25Ye4ALLTQ=; b=uNsNxLtMwhYOLrN9urTB+JfJ6RxradeYhifHcOrCRYlE8P5u0Byoh55j7i1YWBB9iu /cX0pKuV3cpTsmP7987UYJ8Tc3ul5IlHAeTfaKSk7XwxaitLX0z3K9rMt/zUAJTgW4Cv qGryd/n6KQVGSbDII1tHQHEDsf5SCz8KjiSPc+j5cAi5iBqcJ873lyr0DACSclRfpPzZ Mr4FB3Vr4BbpITklQCbzl83gvaFNW7TyJrQobU7MTXIxbdTDrXcSQLSkoDP3h9X9TeKL FbMiDw4MEiz001iOW5nFgNefOphL4uPYfIW5PYtO2ewGNfeC1MnMmVidPQHH8hDzyege FQIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=aSAmOKdW+6YbbCOzb0VJESGb7KW7C8gID25Ye4ALLTQ=; b=GAD6aE3TrxIQtgdotn40Qcvq69R3lBfAOFaXBBLDZCkXwmKUjiEXhCte07q9ApvCuS o1gqmJf2Um4OZfDa5xrO1y7eir9ePfzXpzZ0fZl6KtqpFa9kxhHI2/NEnhfy8c/SG2wQ 7MXvDQj72Hjiy7SxaZ8v9Yw9y4hqQICecZQNtmHCZso5FGueiGMGdIyPl/RveCjDmFm2 DueE1bBYFj4S9DD23oB3qYFOq/BVpy5IlSDGA5wazlkZHs9jXDDlJSmSNu2NxF2K12c5 LK79rYkXpV2WugcmckSTrxsDnEpyVtef0T+PRB5koDwaGP9bUfkuowRmf3E7A3LDeFt5 D/GQ== X-Gm-Message-State: ALyK8tLpVKDfFfy7e0CDu7PmJZE/1e2kO/YqrI2+tKddYiIJaCkggQGs0GLMtw1BcdIuDw== X-Received: by 10.36.29.199 with SMTP id 190mr8742707itj.99.1466544924189; Tue, 21 Jun 2016 14:35:24 -0700 (PDT) Received: from leira.trondhjem.org.localdomain (c-68-49-162-121.hsd1.mi.comcast.net. [68.49.162.121]) by smtp.gmail.com with ESMTPSA id k4sm1684983iok.19.2016.06.21.14.35.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Jun 2016 14:35:23 -0700 (PDT) From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH v2 08/12] NFS: Fix O_DIRECT verifier problems Date: Tue, 21 Jun 2016 17:34:49 -0400 Message-Id: <1466544893-12058-8-git-send-email-trond.myklebust@primarydata.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1466544893-12058-7-git-send-email-trond.myklebust@primarydata.com> References: <1466544893-12058-1-git-send-email-trond.myklebust@primarydata.com> <1466544893-12058-2-git-send-email-trond.myklebust@primarydata.com> <1466544893-12058-3-git-send-email-trond.myklebust@primarydata.com> <1466544893-12058-4-git-send-email-trond.myklebust@primarydata.com> <1466544893-12058-5-git-send-email-trond.myklebust@primarydata.com> <1466544893-12058-6-git-send-email-trond.myklebust@primarydata.com> <1466544893-12058-7-git-send-email-trond.myklebust@primarydata.com> 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 We should not be interested in looking at the value of the stable field, since that could take any value. Signed-off-by: Trond Myklebust --- fs/nfs/direct.c | 10 ++++++++-- fs/nfs/internal.h | 7 +++++++ fs/nfs/write.c | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 979b3c4dee6a..d6d43b5eafb3 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c @@ -196,6 +196,12 @@ static void nfs_direct_set_hdr_verf(struct nfs_direct_req *dreq, WARN_ON_ONCE(verfp->committed < 0); } +static int nfs_direct_cmp_verf(const struct nfs_writeverf *v1, + const struct nfs_writeverf *v2) +{ + return nfs_write_verifier_cmp(&v1->verifier, &v2->verifier); +} + /* * nfs_direct_cmp_hdr_verf - compare verifier for pgio header * @dreq - direct request possibly spanning multiple servers @@ -215,7 +221,7 @@ static int nfs_direct_set_or_cmp_hdr_verf(struct nfs_direct_req *dreq, nfs_direct_set_hdr_verf(dreq, hdr); return 0; } - return memcmp(verfp, &hdr->verf, sizeof(struct nfs_writeverf)); + return nfs_direct_cmp_verf(verfp, &hdr->verf); } /* @@ -238,7 +244,7 @@ static int nfs_direct_cmp_commit_data_verf(struct nfs_direct_req *dreq, if (verfp->committed < 0) return 1; - return memcmp(verfp, &data->verf, sizeof(struct nfs_writeverf)); + return nfs_direct_cmp_verf(verfp, &data->verf); } /** diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 5154fa65a2f2..150a8eb0f323 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h @@ -506,6 +506,13 @@ extern int nfs_migrate_page(struct address_space *, #define nfs_migrate_page NULL #endif +static inline int +nfs_write_verifier_cmp(const struct nfs_write_verifier *v1, + const struct nfs_write_verifier *v2) +{ + return memcmp(v1->data, v2->data, sizeof(v1->data)); +} + /* unlink.c */ extern struct rpc_task * nfs_async_rename(struct inode *old_dir, struct inode *new_dir, diff --git a/fs/nfs/write.c b/fs/nfs/write.c index b13d48881d3a..3087fb6f1983 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -1789,7 +1789,7 @@ static void nfs_commit_release_pages(struct nfs_commit_data *data) /* Okay, COMMIT succeeded, apparently. Check the verifier * returned by the server against all stored verfs. */ - if (!memcmp(&req->wb_verf, &data->verf.verifier, sizeof(req->wb_verf))) { + if (!nfs_write_verifier_cmp(&req->wb_verf, &data->verf.verifier)) { /* We have a match */ nfs_inode_remove_request(req); dprintk(" OK\n");