linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: libaokun@huaweicloud.com
To: netfs@lists.linux.dev, dhowells@redhat.com, jlayton@kernel.org
Cc: hsiangkao@linux.alibaba.com, jefflexu@linux.alibaba.com,
	zhujia.zj@bytedance.com, linux-erofs@lists.ozlabs.org,
	brauner@kernel.org, linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org, libaokun@huaweicloud.com,
	yangerkun@huawei.com, houtao1@huawei.com, yukuai3@huawei.com,
	wozizhi@huawei.com, Baokun Li <libaokun1@huawei.com>
Subject: [PATCH v3 5/9] cachefiles: stop sending new request when dropping object
Date: Fri, 28 Jun 2024 14:29:26 +0800	[thread overview]
Message-ID: <20240628062930.2467993-6-libaokun@huaweicloud.com> (raw)
In-Reply-To: <20240628062930.2467993-1-libaokun@huaweicloud.com>

From: Baokun Li <libaokun1@huawei.com>

Added CACHEFILES_ONDEMAND_OBJSTATE_DROPPING indicates that the cachefiles
object is being dropped, and is set after the close request for the dropped
object completes, and no new requests are allowed to be sent after this
state.

This prepares for the later addition of cancel_work_sync(). It prevents
leftover reopen requests from being sent, to avoid processing unnecessary
requests and to avoid cancel_work_sync() blocking by waiting for daemon to
complete the reopen requests.

Signed-off-by: Baokun Li <libaokun1@huawei.com>
Acked-by: Jeff Layton <jlayton@kernel.org>
---
 fs/cachefiles/internal.h |  2 ++
 fs/cachefiles/ondemand.c | 10 ++++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/fs/cachefiles/internal.h b/fs/cachefiles/internal.h
index 6845a90cdfcc..a1a1d25e9514 100644
--- a/fs/cachefiles/internal.h
+++ b/fs/cachefiles/internal.h
@@ -48,6 +48,7 @@ enum cachefiles_object_state {
 	CACHEFILES_ONDEMAND_OBJSTATE_CLOSE, /* Anonymous fd closed by daemon or initial state */
 	CACHEFILES_ONDEMAND_OBJSTATE_OPEN, /* Anonymous fd associated with object is available */
 	CACHEFILES_ONDEMAND_OBJSTATE_REOPENING, /* Object that was closed and is being reopened. */
+	CACHEFILES_ONDEMAND_OBJSTATE_DROPPING, /* Object is being dropped. */
 };
 
 struct cachefiles_ondemand_info {
@@ -335,6 +336,7 @@ cachefiles_ondemand_set_object_##_state(struct cachefiles_object *object) \
 CACHEFILES_OBJECT_STATE_FUNCS(open, OPEN);
 CACHEFILES_OBJECT_STATE_FUNCS(close, CLOSE);
 CACHEFILES_OBJECT_STATE_FUNCS(reopening, REOPENING);
+CACHEFILES_OBJECT_STATE_FUNCS(dropping, DROPPING);
 
 static inline bool cachefiles_ondemand_is_reopening_read(struct cachefiles_req *req)
 {
diff --git a/fs/cachefiles/ondemand.c b/fs/cachefiles/ondemand.c
index bce005f2b456..8a3b52c3ebba 100644
--- a/fs/cachefiles/ondemand.c
+++ b/fs/cachefiles/ondemand.c
@@ -517,7 +517,8 @@ static int cachefiles_ondemand_send_req(struct cachefiles_object *object,
 		 */
 		xas_lock(&xas);
 
-		if (test_bit(CACHEFILES_DEAD, &cache->flags)) {
+		if (test_bit(CACHEFILES_DEAD, &cache->flags) ||
+		    cachefiles_ondemand_object_is_dropping(object)) {
 			xas_unlock(&xas);
 			ret = -EIO;
 			goto out;
@@ -568,7 +569,8 @@ static int cachefiles_ondemand_send_req(struct cachefiles_object *object,
 	 * If error occurs after creating the anonymous fd,
 	 * cachefiles_ondemand_fd_release() will set object to close.
 	 */
-	if (opcode == CACHEFILES_OP_OPEN)
+	if (opcode == CACHEFILES_OP_OPEN &&
+	    !cachefiles_ondemand_object_is_dropping(object))
 		cachefiles_ondemand_set_object_close(object);
 	kfree(req);
 	return ret;
@@ -667,8 +669,12 @@ int cachefiles_ondemand_init_object(struct cachefiles_object *object)
 
 void cachefiles_ondemand_clean_object(struct cachefiles_object *object)
 {
+	if (!object->ondemand)
+		return;
+
 	cachefiles_ondemand_send_req(object, CACHEFILES_OP_CLOSE, 0,
 			cachefiles_ondemand_init_close_req, NULL);
+	cachefiles_ondemand_set_object_dropping(object);
 }
 
 int cachefiles_ondemand_init_obj_info(struct cachefiles_object *object,
-- 
2.39.2


  parent reply	other threads:[~2024-06-28  6:31 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-28  6:29 [PATCH v3 0/9] cachefiles: random bugfixes libaokun
2024-06-28  6:29 ` [PATCH v3 1/9] netfs, fscache: export fscache_put_volume() and add fscache_try_get_volume() libaokun
2024-06-28  6:29 ` [PATCH v3 2/9] cachefiles: fix slab-use-after-free in fscache_withdraw_volume() libaokun
2024-06-28  6:29 ` [PATCH v3 3/9] cachefiles: fix slab-use-after-free in cachefiles_withdraw_cookie() libaokun
2024-06-28  6:29 ` [PATCH v3 4/9] cachefiles: propagate errors from vfs_getxattr() to avoid infinite loop libaokun
2024-06-28  7:30   ` Gao Xiang
2024-06-28  6:29 ` libaokun [this message]
2024-06-28  6:51   ` [PATCH v3 5/9] cachefiles: stop sending new request when dropping object Gao Xiang
2024-07-02 12:29   ` [External] " Jia Zhu
2024-06-28  6:29 ` [PATCH v3 6/9] cachefiles: cancel all requests for the object that is being dropped libaokun
2024-06-28  7:21   ` Gao Xiang
2024-07-02 12:31   ` [External] " Jia Zhu
2024-06-28  6:29 ` [PATCH v3 7/9] cachefiles: wait for ondemand_object_worker to finish when dropping object libaokun
2024-06-28  7:22   ` Gao Xiang
2024-06-28  6:29 ` [PATCH v3 8/9] cachefiles: cyclic allocation of msg_id to avoid reuse libaokun
2024-07-02 12:34   ` [External] " Jia Zhu
2024-06-28  6:29 ` [PATCH v3 9/9] cachefiles: add missing lock protection when polling libaokun
2024-06-28  7:39 ` [PATCH v3 0/9] cachefiles: random bugfixes Gao Xiang
2024-06-28 11:37   ` Baokun Li
2024-07-02 12:25 ` Baokun Li
2024-07-03  8:30 ` (subset) " Christian Brauner
2024-07-03  8:37 ` Christian Brauner

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=20240628062930.2467993-6-libaokun@huaweicloud.com \
    --to=libaokun@huaweicloud.com \
    --cc=brauner@kernel.org \
    --cc=dhowells@redhat.com \
    --cc=houtao1@huawei.com \
    --cc=hsiangkao@linux.alibaba.com \
    --cc=jefflexu@linux.alibaba.com \
    --cc=jlayton@kernel.org \
    --cc=libaokun1@huawei.com \
    --cc=linux-erofs@lists.ozlabs.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netfs@lists.linux.dev \
    --cc=wozizhi@huawei.com \
    --cc=yangerkun@huawei.com \
    --cc=yukuai3@huawei.com \
    --cc=zhujia.zj@bytedance.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).