Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1001448imu; Tue, 11 Dec 2018 10:58:30 -0800 (PST) X-Google-Smtp-Source: AFSGD/UsgmJKLMDWK34mTH0K6B+0uYD2nM+CjR1w5nScyIAr/jDq3dSss40bcbEQvsFMxMN9v78K X-Received: by 2002:a62:cdd:: with SMTP id 90mr17347791pfm.219.1544554710739; Tue, 11 Dec 2018 10:58:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544554710; cv=none; d=google.com; s=arc-20160816; b=0YrQ4OKHMmVHFQAa6asQvrNxYdvELTNhFjyr/3IukkO4U1hDagyxpgr/TIVu5cZPN4 EDiDiSWpaxuiEKar2KwQgkroihcUdzXmPNqV1njIYlrL4MoPio2ZnDALHSeeKxvHOnXk J6OThSD3lJqQDeIU0fgWNkXO7SIL2eK4pTbghaVfwJI3/e+oYQSd1CDZFSu+lrif9kYA WnOFh3aCDDEtN36NNMOgYe+x0pr2ir9STaME3m3dvzIyNEjN5x0mCnTZY0TXXCZ94uBY KQM/QvfJ/8onVDWu4ZHESLbkvwhWIVf0y8PcAJMSkBsRlN9UJVleUGYy7I5RoDYdBi6I 6ZbA== 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=yX2LlJBHMvi6oXwSBlMv6uM7Aw6CiSKmHOt3efypaCA=; b=myhRtlsVqOYcOESCxpiZQcsXZrdFMF6RRWJIecRFytnZtoHm3NTJfa9bXkyvF7aYI4 lyvrOkZIt+VvE+81zqM2KZm0lMVqFdpe72CaUUcC5qSkUc/kro6FjUCb6Q7CWJAz90rW oWV7ZpRGxT3R1CZkFKjwfs1afRk7ssmt6Qa1Zj+MBEUwkd6IsDY8jK+i8jg6k5V4pol0 1uai0S5/6onmQAktKAOPd75UCzH0vPE06gVktgYpVadWQIGn2Cls1v7iSCyRXYudp6xb PgXf2uNDmm5k7koBb7IJ6fuj6sjchDYYIA3f8I2SeUT/5GkrRw0nxIqI/RdqK5GfGlyB wbrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@desy.de header.s=default header.b="us5/Skef"; 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 q18si12920088pls.30.2018.12.11.10.58.04; Tue, 11 Dec 2018 10:58:30 -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="us5/Skef"; 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 S1726801AbeLKSzi (ORCPT + 99 others); Tue, 11 Dec 2018 13:55:38 -0500 Received: from smtp-o-1.desy.de ([131.169.56.154]:44017 "EHLO smtp-o-1.desy.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726350AbeLKSzi (ORCPT ); Tue, 11 Dec 2018 13:55:38 -0500 X-Greylist: delayed 419 seconds by postgrey-1.27 at vger.kernel.org; Tue, 11 Dec 2018 13:55:35 EST Received: from smtp-buf-1.desy.de (smtp-buf-1.desy.de [131.169.56.164]) by smtp-o-1.desy.de (DESY-O-1) with ESMTP id C78E32809D9 for ; Tue, 11 Dec 2018 19:48:34 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp-o-1.desy.de C78E32809D9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=desy.de; s=default; t=1544554114; bh=yX2LlJBHMvi6oXwSBlMv6uM7Aw6CiSKmHOt3efypaCA=; h=Date:From:To:Cc:In-Reply-To:References:Subject:From; b=us5/SkefiBWemUP8Nk9efm1+i55qnDvwLqhE9/L1FUcT0Xvp9zlbnv6DL6hFfnszf LMcC9Fp+8YhkFH0r0krIXVRV4grWp9ptkdCniIF9tyFaecISLwl4//yTtjokwhF9JH NO7Bl4qGmZ/0NjV/wdQfC3YBdd4p3ldTyowTMTKY= Received: from smtp-m-1.desy.de (smtp-m-1.desy.de [IPv6:2001:638:700:1038::1:81]) by smtp-buf-1.desy.de (Postfix) with ESMTP id BA480120856; Tue, 11 Dec 2018 19:48:34 +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-1.desy.de (DESY-INTRA-1) with ESMTP id 837213E901; Tue, 11 Dec 2018 19:48:34 +0100 (MET) Date: Tue, 11 Dec 2018 19:48:34 +0100 (CET) From: "Mkrtchyan, Tigran" To: Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, stable , Rick Macklem , Trond Myklebust , Sasha Levin Message-ID: <915991654.5303561.1544554114494.JavaMail.zimbra@desy.de> In-Reply-To: <20181211151631.719148510@linuxfoundation.org> References: <20181211151630.378216233@linuxfoundation.org> <20181211151631.719148510@linuxfoundation.org> Subject: Re: [PATCH 4.14 26/67] 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: vMQzWgOUiVe9PimcauPEYD64kmgRvg== 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@vger.kernel.org > Cc: "Greg Kroah-Hartman" , "stable" , "Tigran Mkrtchyan" > , "Rick Macklem" , "Trond Myklebust" , > "Sasha Levin" > Sent: Tuesday, December 11, 2018 4:41:26 PM > Subject: [PATCH 4.14 26/67] flexfiles: use per-mirror specified stateid for IO > 4.14-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 b0fa83a60754..13612a848378 100644 > --- a/fs/nfs/flexfilelayout/flexfilelayout.c > +++ b/fs/nfs/flexfilelayout/flexfilelayout.c > @@ -1365,12 +1365,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) > @@ -1539,12 +1534,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) > @@ -1734,6 +1724,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. > @@ -1796,6 +1790,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 679cb087ef3f..d6515f1584f3 100644 > --- a/fs/nfs/flexfilelayout/flexfilelayout.h > +++ b/fs/nfs/flexfilelayout/flexfilelayout.h > @@ -214,6 +214,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 d62279d3fc5d..9f69e83810ca 100644 > --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c > +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c > @@ -369,6 +369,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