From patchwork Mon Jun 22 19:04:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 11618717 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 203A1161F for ; Mon, 22 Jun 2020 19:06:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F11D02076A for ; Mon, 22 Jun 2020 19:06:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592852787; bh=YeUXTOlHiKko8EoRKaSI/3kgM3MOAo28FPKRikE8vDc=; h=From:To:Subject:Date:List-ID:From; b=ZotUn3PxGEECmg95xGug92LZGpRTSpPblzCWKDnYdjunX13xHBk63ZuOGn+lfj3AN 2aPUEF6Th1jOHtwp6MsoBp8DvS6gz5gc4TsWZS6x9SaWBh5LADxVnuhaxKjoBnEG+C gxYcPlWVYtwMvm/yUcAZDZRVOzcMVM4PDLzgTjXM= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730053AbgFVTG0 (ORCPT ); Mon, 22 Jun 2020 15:06:26 -0400 Received: from mail.kernel.org ([198.145.29.99]:51226 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730020AbgFVTG0 (ORCPT ); Mon, 22 Jun 2020 15:06:26 -0400 Received: from localhost.localdomain (c-68-36-133-222.hsd1.mi.comcast.net [68.36.133.222]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B731E20732 for ; Mon, 22 Jun 2020 19:06:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592852785; bh=YeUXTOlHiKko8EoRKaSI/3kgM3MOAo28FPKRikE8vDc=; h=From:To:Subject:Date:From; b=gaTw5St7SVpH5upqYOzByLiSSzcw6ZZ/dxJ7gar6GSTFQSJUTNg39mmkl9HUFafDR u8AeaKlEa33pzLUKRfj31m+5WAUK3WRhdR+RTL+ErjRfs6L/ULPR/FTKBGeYy56Z08 GExOkRbuNIQFcYhdr69B7+6t2X24OkJmjdMBdWoc= From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH 1/3] pNFS/flexfiles: Fix list corruption if the mirror count changes Date: Mon, 22 Jun 2020 15:04:15 -0400 Message-Id: <20200622190417.566077-1-trondmy@kernel.org> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust If the mirror count changes in the new layout we pick up inside ff_layout_pg_init_write(), then we can end up adding the request to the wrong mirror and corrupting the mirror->pg_list. Fixes: d600ad1f2bdb ("NFS41: pop some layoutget errors to application") Cc: stable@vger.kernel.org Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 7d399f72ebbb..de03e440b7ee 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -907,9 +907,8 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio, goto out_mds; /* Use a direct mapping of ds_idx to pgio mirror_idx */ - if (WARN_ON_ONCE(pgio->pg_mirror_count != - FF_LAYOUT_MIRROR_COUNT(pgio->pg_lseg))) - goto out_mds; + if (pgio->pg_mirror_count != FF_LAYOUT_MIRROR_COUNT(pgio->pg_lseg)) + goto out_eagain; for (i = 0; i < pgio->pg_mirror_count; i++) { mirror = FF_LAYOUT_COMP(pgio->pg_lseg, i); @@ -931,7 +930,10 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio, (NFS_MOUNT_SOFT|NFS_MOUNT_SOFTERR)) pgio->pg_maxretrans = io_maxretrans; return; - +out_eagain: + pnfs_generic_pg_cleanup(pgio); + pgio->pg_error = -EAGAIN; + return; out_mds: trace_pnfs_mds_fallback_pg_init_write(pgio->pg_inode, 0, NFS4_MAX_UINT64, IOMODE_RW, @@ -941,6 +943,7 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio, pgio->pg_lseg = NULL; pgio->pg_maxretrans = 0; nfs_pageio_reset_write_mds(pgio); + pgio->pg_error = -EAGAIN; } static unsigned int From patchwork Mon Jun 22 19:04:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 11618719 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BF53517C5 for ; Mon, 22 Jun 2020 19:06:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9EC3620767 for ; Mon, 22 Jun 2020 19:06:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592852787; bh=GljAy3mLCsFPWL2lr7wi9dQFipF3molBevQqJYVU3RE=; h=From:To:Subject:Date:In-Reply-To:References:List-ID:From; b=dtThu2c8XCSZUbND450BQEJnDnpueQVYlnUbGaBLw9ovWBSr6eZfmxJCYfkCmnYJH 1MEKDbUXNZGyloT1e9ocq/OEnmYrOiWmbYJ/gqW7+6yD/jkqbAk7ATs35mhRbqjlQ2 7n4oJ8YM3UmBX0gzuq66W/9UKG0nW1Vk6z1NK8bM= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730103AbgFVTG1 (ORCPT ); Mon, 22 Jun 2020 15:06:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:51232 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730020AbgFVTG0 (ORCPT ); Mon, 22 Jun 2020 15:06:26 -0400 Received: from localhost.localdomain (c-68-36-133-222.hsd1.mi.comcast.net [68.36.133.222]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 31FC820767 for ; Mon, 22 Jun 2020 19:06:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592852786; bh=GljAy3mLCsFPWL2lr7wi9dQFipF3molBevQqJYVU3RE=; h=From:To:Subject:Date:In-Reply-To:References:From; b=CptDIwEj34l57qkVeNeLgZxNKOsxzuS7zr9i7/GhkNc9DG9mu6gtZ4ipEx+YNLKgn opkK7xVOI0K1KTLWoLc8MmpBBE1p+RAJsFKyuj8BnPjhN2tLJ5PX8SBZmhI9fM0eyf uZlrLxoHOxwRhgyI7HlSQSV6KnuDhdQiWqzRZb5A= From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH 2/3] pNFS/flexfiles: Clean up redundant calls to pnfs_put_lseg() Date: Mon, 22 Jun 2020 15:04:16 -0400 Message-Id: <20200622190417.566077-2-trondmy@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200622190417.566077-1-trondmy@kernel.org> References: <20200622190417.566077-1-trondmy@kernel.org> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust Both nfs_pageio_reset_read_mds() and nfs_pageio_reset_write_mds() do call pnfs_generic_pg_cleanup() for us. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index de03e440b7ee..b3ec12e5fde1 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -844,8 +844,7 @@ ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio, if (!ds) { if (!ff_layout_no_fallback_to_mds(pgio->pg_lseg)) goto out_mds; - pnfs_put_lseg(pgio->pg_lseg); - pgio->pg_lseg = NULL; + pnfs_generic_pg_cleanup(pgio); /* Sleep for 1 second before retrying */ ssleep(1); goto retry; @@ -871,8 +870,6 @@ ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio, 0, NFS4_MAX_UINT64, IOMODE_READ, NFS_I(pgio->pg_inode)->layout, pgio->pg_lseg); - pnfs_put_lseg(pgio->pg_lseg); - pgio->pg_lseg = NULL; pgio->pg_maxretrans = 0; nfs_pageio_reset_read_mds(pgio); } @@ -916,8 +913,7 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio, if (!ds) { if (!ff_layout_no_fallback_to_mds(pgio->pg_lseg)) goto out_mds; - pnfs_put_lseg(pgio->pg_lseg); - pgio->pg_lseg = NULL; + pnfs_generic_pg_cleanup(pgio); /* Sleep for 1 second before retrying */ ssleep(1); goto retry; @@ -939,8 +935,6 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio, 0, NFS4_MAX_UINT64, IOMODE_RW, NFS_I(pgio->pg_inode)->layout, pgio->pg_lseg); - pnfs_put_lseg(pgio->pg_lseg); - pgio->pg_lseg = NULL; pgio->pg_maxretrans = 0; nfs_pageio_reset_write_mds(pgio); pgio->pg_error = -EAGAIN; From patchwork Mon Jun 22 19:04:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 11618721 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2B0D213B1 for ; Mon, 22 Jun 2020 19:06:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0A63E20767 for ; Mon, 22 Jun 2020 19:06:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592852788; bh=e5wgg5TEvvihEyD66YELmCyucF4vSE1fFeaXjkDmbbo=; h=From:To:Subject:Date:In-Reply-To:References:List-ID:From; b=qZEO6TLMJrPIOsnTjaPWQwUnnodiwFVY/am+9WFUOPeAutgyZCJlO2FG40+v4wPKU mmfZ2kT49EECRMalbbZZJ/KiyoqC9dChHWopyBRxAXde629oNpQqdmh4Y+IAMk/amT G7bx5pxvU/j02OienmXyVDAoFHk61pebVr3yVTiU= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730020AbgFVTG1 (ORCPT ); Mon, 22 Jun 2020 15:06:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:51234 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730098AbgFVTG1 (ORCPT ); Mon, 22 Jun 2020 15:06:27 -0400 Received: from localhost.localdomain (c-68-36-133-222.hsd1.mi.comcast.net [68.36.133.222]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A0A4220732 for ; Mon, 22 Jun 2020 19:06:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592852786; bh=e5wgg5TEvvihEyD66YELmCyucF4vSE1fFeaXjkDmbbo=; h=From:To:Subject:Date:In-Reply-To:References:From; b=I0zJWSAMjt1Hq1uYg8dN9vLCLYjtRNUO2+FRpuExifcQefcHkATXzmX0Csl3fLnoJ 1lu9zFJ04bT0S1tik5O0NP8PdtazQj1K+0PfIjR3byt2xu6M8AKUlcp/3LqE8QuhWT 4IVUG9fYfRQffNTjKM9+fMebYKmWiJL0QM8dCY18= From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH 3/3] pNFS/flexfiles: The mirror count could depend on the layout segment range Date: Mon, 22 Jun 2020 15:04:17 -0400 Message-Id: <20200622190417.566077-3-trondmy@kernel.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200622190417.566077-2-trondmy@kernel.org> References: <20200622190417.566077-1-trondmy@kernel.org> <20200622190417.566077-2-trondmy@kernel.org> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust Make sure we specify the layout segment range when calculating the mirror count. In theory, that number could depend on the range to which we're writing. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index b3ec12e5fde1..b26173d72735 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -947,8 +947,8 @@ ff_layout_pg_get_mirror_count_write(struct nfs_pageio_descriptor *pgio, if (!pgio->pg_lseg) { pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode, nfs_req_openctx(req), - 0, - NFS4_MAX_UINT64, + req_offset(req), + req->wb_bytes, IOMODE_RW, false, GFP_NOFS);