Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1000161imu; Tue, 11 Dec 2018 10:57:04 -0800 (PST) X-Google-Smtp-Source: AFSGD/U/PyjmHJrm2XN3H8t34toTTcpNhB8nln+gUhgKhLRu8YlriZQk8RzqRayk9nvRc/mNLiQ9 X-Received: by 2002:a17:902:8f97:: with SMTP id z23mr17306648plo.283.1544554624917; Tue, 11 Dec 2018 10:57:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544554624; cv=none; d=google.com; s=arc-20160816; b=vHFMSoRD7VFEN5OVLE2rAgzr/oRVfsCSbZ09syfCH3dsrEhidcKH4KMVrWmG0DU1vc /mxiWPkcwQ1bg38tInT1ClH5hF5+CwwHecNG6kcpoQLqPYoXaFb7H+RBjxDnLciud9Xl +gaIOjehSgclcN+XwgY8/fE9H3zxg2hzZ0RwXPTL2ZakRucEZZ4GmlEHOIA++7Pwu6/O 3jDqSLQXmotCLC5FpO3l788ZyCiISH38GD45hdFJRRXG69a7oIz/6ETIch8hthSa2FEz Nmmy5kcR4ujAgxEyhxiIolaD1+uLvA511uDy/Sx6b1z+CzjD8EJuYTpKAEjfV65Xous/ 3TwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:thread-index:thread-topic :content-transfer-encoding:mime-version:subject:references :in-reply-to:message-id:cc:to:from:date:dkim-signature:dkim-filter; bh=1YI1zqDrdppyHlD+9bp2tWVhFNMUgkfPdQqVg5E4xSg=; b=ZbltdZEHPC0VEd6mhcQtDEoQ0b5NPqbEuwOs8jzSx31CLYO6NfTZ5cDNgzEYYP1Tq9 LnpHyCUZ+DmlZkzyflbcr+qgaMYMOJbFzZc8MYJDNEj5Qba/OlmwRFJ0QhpmvE9N3M5u +kxdfeQxH/Mv9tDDoqmqMx5UeGBU6I7feigadkClwjN3EkWXgID5JVPiwZa1EP4x3oAW VJ2HpGPOtJ+mWIXiSneRBv/vij/nzvGR2HgQdNAhPsdgm9dGSEnwPBfYz0Lnqaua8yLQ cEkBsr20ZjGQSgWdqq9MRr0kBu7VlWHmlIWYbLzL0vXMJbdBPr0Q77DkVQLCm898hNrz KgDg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@desy.de header.s=default header.b=XqtsjXtY; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t11si12493683plo.293.2018.12.11.10.56.50; Tue, 11 Dec 2018 10:57:04 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@desy.de header.s=default header.b=XqtsjXtY; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726919AbeLKSzk (ORCPT + 99 others); Tue, 11 Dec 2018 13:55:40 -0500 Received: from smtp-o-3.desy.de ([131.169.56.156]:34340 "EHLO smtp-o-3.desy.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726508AbeLKSzj (ORCPT ); Tue, 11 Dec 2018 13:55:39 -0500 Received: from smtp-buf-3.desy.de (smtp-buf-3.desy.de [IPv6:2001:638:700:1038::1:a6]) by smtp-o-3.desy.de (DESY-O-3) with ESMTP id CE9F528079B for ; Tue, 11 Dec 2018 19:49:32 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp-o-3.desy.de CE9F528079B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=desy.de; s=default; t=1544554172; bh=1YI1zqDrdppyHlD+9bp2tWVhFNMUgkfPdQqVg5E4xSg=; h=Date:From:To:Cc:In-Reply-To:References:Subject:From; b=XqtsjXtY3Dtccjz767py/BF7FcVQv+cUmGuRzFD9JJ81lZEWKOVDQTXf3UDAH6gcU TUubxP08P+S+WAesxicv0CWftCWqlWe5haj1w2xo2g9If7I6arKydlJtzX5wBl5W/S 4vVsUt1rDFEDTav4j3E/MiV7NKbeD0ryCRs+1Of4= Received: from smtp-m-3.desy.de (smtp-m-3.desy.de [131.169.56.131]) by smtp-buf-3.desy.de (Postfix) with ESMTP id C6B91A0040; Tue, 11 Dec 2018 19:49:32 +0100 (CET) X-Virus-Scanned: amavisd-new at desy.de Received: from z-mbx-2.desy.de (z-mbx-2.desy.de [131.169.55.140]) by smtp-intra-3.desy.de (DESY-INTRA-3) with ESMTP id 135E11029; Tue, 11 Dec 2018 19:49:28 +0100 (MET) Date: Tue, 11 Dec 2018 19:49:27 +0100 (CET) From: "Mkrtchyan, Tigran" To: Greg Kroah-Hartman Cc: linux-kernel , stable , Rick Macklem , Trond Myklebust , Sasha Levin Message-ID: <922713302.5303567.1544554167994.JavaMail.zimbra@desy.de> In-Reply-To: <20181211151646.307760274@linuxfoundation.org> References: <20181211151644.216668863@linuxfoundation.org> <20181211151646.307760274@linuxfoundation.org> Subject: Re: [PATCH 4.19 051/118] flexfiles: use per-mirror specified stateid for IO MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Mailer: Zimbra 8.8.10_GA_3713 (ZimbraWebClient - FF63 (Linux)/8.8.10_GA_3041) Thread-Topic: flexfiles: use per-mirror specified stateid for IO Thread-Index: jj2s2lLwB2tLSTK0CnId6RIeRK/bmg== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Greg, Thanks for pushing this into sable as well. However, I think patch makes more sense with 320f35b7bf8cccf1997ca3126843535e1b95e9c4 Tigran. ----- Original Message ----- > From: "Greg Kroah-Hartman" > To: "linux-kernel" > Cc: "Greg Kroah-Hartman" , "stable" , "Tigran Mkrtchyan" > , "Rick Macklem" , "Trond Myklebust" , > "Sasha Levin" > Sent: Tuesday, December 11, 2018 4:41:10 PM > Subject: [PATCH 4.19 051/118] flexfiles: use per-mirror specified stateid for IO > 4.19-stable review patch. If anyone has any objections, please let me know. > > ------------------ > > [ Upstream commit bb21ce0ad227b69ec0f83279297ee44232105d96 ] > > rfc8435 says: > > For tight coupling, ffds_stateid provides the stateid to be used by > the client to access the file. > > However current implementation replaces per-mirror provided stateid with > by open or lock stateid. > > Ensure that per-mirror stateid is used by ff_layout_write_prepare_v4 and > nfs4_ff_layout_prepare_ds. > > Signed-off-by: Tigran Mkrtchyan > Signed-off-by: Rick Macklem > Signed-off-by: Trond Myklebust > Signed-off-by: Sasha Levin > --- > fs/nfs/flexfilelayout/flexfilelayout.c | 21 +++++++++------------ > fs/nfs/flexfilelayout/flexfilelayout.h | 4 ++++ > fs/nfs/flexfilelayout/flexfilelayoutdev.c | 19 +++++++++++++++++++ > 3 files changed, 32 insertions(+), 12 deletions(-) > > diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c > b/fs/nfs/flexfilelayout/flexfilelayout.c > index cae43333ef16..86ac2c5b93fe 100644 > --- a/fs/nfs/flexfilelayout/flexfilelayout.c > +++ b/fs/nfs/flexfilelayout/flexfilelayout.c > @@ -1361,12 +1361,7 @@ static void ff_layout_read_prepare_v4(struct rpc_task > *task, void *data) > task)) > return; > > - if (ff_layout_read_prepare_common(task, hdr)) > - return; > - > - if (nfs4_set_rw_stateid(&hdr->args.stateid, hdr->args.context, > - hdr->args.lock_context, FMODE_READ) == -EIO) > - rpc_exit(task, -EIO); /* lost lock, terminate I/O */ > + ff_layout_read_prepare_common(task, hdr); > } > > static void ff_layout_read_call_done(struct rpc_task *task, void *data) > @@ -1542,12 +1537,7 @@ static void ff_layout_write_prepare_v4(struct rpc_task > *task, void *data) > task)) > return; > > - if (ff_layout_write_prepare_common(task, hdr)) > - return; > - > - if (nfs4_set_rw_stateid(&hdr->args.stateid, hdr->args.context, > - hdr->args.lock_context, FMODE_WRITE) == -EIO) > - rpc_exit(task, -EIO); /* lost lock, terminate I/O */ > + ff_layout_write_prepare_common(task, hdr); > } > > static void ff_layout_write_call_done(struct rpc_task *task, void *data) > @@ -1742,6 +1732,10 @@ ff_layout_read_pagelist(struct nfs_pgio_header *hdr) > fh = nfs4_ff_layout_select_ds_fh(lseg, idx); > if (fh) > hdr->args.fh = fh; > + > + if (!nfs4_ff_layout_select_ds_stateid(lseg, idx, &hdr->args.stateid)) > + goto out_failed; > + > /* > * Note that if we ever decide to split across DSes, > * then we may need to handle dense-like offsets. > @@ -1804,6 +1798,9 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int > sync) > if (fh) > hdr->args.fh = fh; > > + if (!nfs4_ff_layout_select_ds_stateid(lseg, idx, &hdr->args.stateid)) > + goto out_failed; > + > /* > * Note that if we ever decide to split across DSes, > * then we may need to handle dense-like offsets. > diff --git a/fs/nfs/flexfilelayout/flexfilelayout.h > b/fs/nfs/flexfilelayout/flexfilelayout.h > index 411798346e48..de50a342d5a5 100644 > --- a/fs/nfs/flexfilelayout/flexfilelayout.h > +++ b/fs/nfs/flexfilelayout/flexfilelayout.h > @@ -215,6 +215,10 @@ unsigned int ff_layout_fetch_ds_ioerr(struct > pnfs_layout_hdr *lo, > unsigned int maxnum); > struct nfs_fh * > nfs4_ff_layout_select_ds_fh(struct pnfs_layout_segment *lseg, u32 mirror_idx); > +int > +nfs4_ff_layout_select_ds_stateid(struct pnfs_layout_segment *lseg, > + u32 mirror_idx, > + nfs4_stateid *stateid); > > struct nfs4_pnfs_ds * > nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx, > diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c > b/fs/nfs/flexfilelayout/flexfilelayoutdev.c > index 59aa04976331..a8df2f496898 100644 > --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c > +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c > @@ -370,6 +370,25 @@ out: > return fh; > } > > +int > +nfs4_ff_layout_select_ds_stateid(struct pnfs_layout_segment *lseg, > + u32 mirror_idx, > + nfs4_stateid *stateid) > +{ > + struct nfs4_ff_layout_mirror *mirror = FF_LAYOUT_COMP(lseg, mirror_idx); > + > + if (!ff_layout_mirror_valid(lseg, mirror, false)) { > + pr_err_ratelimited("NFS: %s: No data server for mirror offset index %d\n", > + __func__, mirror_idx); > + goto out; > + } > + > + nfs4_stateid_copy(stateid, &mirror->stateid); > + return 1; > +out: > + return 0; > +} > + > /** > * nfs4_ff_layout_prepare_ds - prepare a DS connection for an RPC call > * @lseg: the layout segment we're operating on > -- > 2.19.1