linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Trond Myklebust <trond.myklebust@hammerspace.com>,
	Sasha Levin <sashal@kernel.org>,
	linux-nfs@vger.kernel.org
Subject: [PATCH AUTOSEL 4.19 14/22] NFS: nfs_find_open_context() may only select open files
Date: Sat, 10 Jul 2021 19:51:35 -0400	[thread overview]
Message-ID: <20210710235143.3222129-14-sashal@kernel.org> (raw)
In-Reply-To: <20210710235143.3222129-1-sashal@kernel.org>

From: Trond Myklebust <trond.myklebust@hammerspace.com>

[ Upstream commit e97bc66377bca097e1f3349ca18ca17f202ff659 ]

If a file has already been closed, then it should not be selected to
support further I/O.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
[Trond: Fix an invalid pointer deref reported by Colin Ian King]
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 fs/nfs/inode.c         | 4 ++++
 include/linux/nfs_fs.h | 1 +
 2 files changed, 5 insertions(+)

diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index dc55ecc3bec4..2cdd8883b7c5 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -1038,6 +1038,7 @@ EXPORT_SYMBOL_GPL(nfs_inode_attach_open_context);
 void nfs_file_set_open_context(struct file *filp, struct nfs_open_context *ctx)
 {
 	filp->private_data = get_nfs_open_context(ctx);
+	set_bit(NFS_CONTEXT_FILE_OPEN, &ctx->flags);
 	if (list_empty(&ctx->list))
 		nfs_inode_attach_open_context(ctx);
 }
@@ -1057,6 +1058,8 @@ struct nfs_open_context *nfs_find_open_context(struct inode *inode, struct rpc_c
 			continue;
 		if ((pos->mode & (FMODE_READ|FMODE_WRITE)) != mode)
 			continue;
+		if (!test_bit(NFS_CONTEXT_FILE_OPEN, &pos->flags))
+			continue;
 		ctx = get_nfs_open_context(pos);
 		break;
 	}
@@ -1071,6 +1074,7 @@ void nfs_file_clear_open_context(struct file *filp)
 	if (ctx) {
 		struct inode *inode = d_inode(ctx->dentry);
 
+		clear_bit(NFS_CONTEXT_FILE_OPEN, &ctx->flags);
 		/*
 		 * We fatal error on write before. Try to writeback
 		 * every page again.
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
index a0831e9d19c9..0ff7dd2bf8a4 100644
--- a/include/linux/nfs_fs.h
+++ b/include/linux/nfs_fs.h
@@ -78,6 +78,7 @@ struct nfs_open_context {
 #define NFS_CONTEXT_RESEND_WRITES	(1)
 #define NFS_CONTEXT_BAD			(2)
 #define NFS_CONTEXT_UNLOCK	(3)
+#define NFS_CONTEXT_FILE_OPEN		(4)
 	int error;
 
 	struct list_head list;
-- 
2.30.2


  parent reply	other threads:[~2021-07-10 23:54 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-10 23:51 [PATCH AUTOSEL 4.19 01/22] pwm: spear: Don't modify HW state in .remove callback Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 02/22] power: supply: ab8500: Avoid NULL pointers Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 03/22] power: supply: max17042: Do not enforce (incorrect) interrupt trigger type Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 04/22] power: reset: gpio-poweroff: add missing MODULE_DEVICE_TABLE Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 05/22] ARM: 9087/1: kprobes: test-thumb: fix for LLVM_IAS=1 Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 06/22] watchdog: Fix possible use-after-free in wdt_startup() Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 07/22] watchdog: sc520_wdt: Fix possible use-after-free in wdt_turnoff() Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 08/22] watchdog: Fix possible use-after-free by calling del_timer_sync() Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 09/22] watchdog: iTCO_wdt: Account for rebooting on second timeout Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 10/22] x86/fpu: Return proper error codes from user access functions Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 11/22] PCI: tegra: Add missing MODULE_DEVICE_TABLE Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 12/22] orangefs: fix orangefs df output Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 13/22] ceph: remove bogus checks and WARN_ONs from ceph_set_page_dirty Sasha Levin
2021-07-10 23:51 ` Sasha Levin [this message]
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 15/22] power: supply: charger-manager: add missing MODULE_DEVICE_TABLE Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 16/22] power: supply: ab8500: " Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 17/22] pwm: tegra: Don't modify HW state in .remove callback Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 18/22] ACPI: AMBA: Fix resource name in /proc/iomem Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 19/22] ACPI: video: Add quirk for the Dell Vostro 3350 Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 20/22] virtio-blk: Fix memory leak among suspend/resume procedure Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 21/22] virtio_net: Fix error handling in virtnet_restore() Sasha Levin
2021-07-10 23:51 ` [PATCH AUTOSEL 4.19 22/22] virtio_console: Assure used length from device is limited Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210710235143.3222129-14-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=trond.myklebust@hammerspace.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).