From: Jingbo Xu <jefflexu@linux.alibaba.com>
To: dhowells@redhat.com, jlayton@kernel.org,
linux-cachefs@redhat.com, linux-erofs@lists.ozlabs.org
Cc: linux-cifs@vger.kernel.org, linux-nfs@vger.kernel.org,
linux-afs@lists.infradead.org, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH 7/9] fscache,netfs: define flags for prepare_read()
Date: Thu, 27 Oct 2022 16:35:45 +0800 [thread overview]
Message-ID: <20221027083547.46933-8-jefflexu@linux.alibaba.com> (raw)
In-Reply-To: <20221027083547.46933-1-jefflexu@linux.alibaba.com>
Decouple flags used in prepare_read() from netfs_io_subrequest flags to
make raw fscache APIs more neutral independent on libnetfs. Currently
only *REQ_[COPY_TO_CACHE|ONDEMAND] flags are exposed to fscache, thus
define these two flags for fscache variant, while keep other
netfs_io_subrequest flags untouched.
This is a cleanup without logic change.
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
---
fs/cachefiles/io.c | 10 +++++-----
fs/erofs/fscache.c | 5 +++--
fs/netfs/io.c | 14 ++++++++++----
include/linux/fscache.h | 3 +++
include/linux/netfs.h | 1 -
5 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/fs/cachefiles/io.c b/fs/cachefiles/io.c
index 9aace92a7503..a9c7463eb3e1 100644
--- a/fs/cachefiles/io.c
+++ b/fs/cachefiles/io.c
@@ -415,9 +415,9 @@ static enum fscache_io_source cachefiles_prepare_read(struct fscache_resources *
}
if (test_bit(FSCACHE_COOKIE_NO_DATA_TO_READ, &cookie->flags)) {
- __set_bit(NETFS_SREQ_COPY_TO_CACHE, _flags);
+ __set_bit(FSCACHE_REQ_COPY_TO_CACHE, _flags);
why = cachefiles_trace_read_no_data;
- if (!test_bit(NETFS_SREQ_ONDEMAND, _flags))
+ if (!test_bit(FSCACHE_REQ_ONDEMAND, _flags))
goto out_no_object;
}
@@ -487,11 +487,11 @@ static enum fscache_io_source cachefiles_prepare_read(struct fscache_resources *
goto out;
download_and_store:
- __set_bit(NETFS_SREQ_COPY_TO_CACHE, _flags);
- if (test_bit(NETFS_SREQ_ONDEMAND, _flags)) {
+ __set_bit(FSCACHE_REQ_COPY_TO_CACHE, _flags);
+ if (test_bit(FSCACHE_REQ_ONDEMAND, _flags)) {
rc = cachefiles_ondemand_read(object, start, len);
if (!rc) {
- __clear_bit(NETFS_SREQ_ONDEMAND, _flags);
+ __clear_bit(FSCACHE_REQ_ONDEMAND, _flags);
goto retry;
}
ret = FSCACHE_INVALID_READ;
diff --git a/fs/erofs/fscache.c b/fs/erofs/fscache.c
index 6fbdf067a669..e30a42a35ae7 100644
--- a/fs/erofs/fscache.c
+++ b/fs/erofs/fscache.c
@@ -148,6 +148,7 @@ static int erofs_fscache_read_folios_async(struct fscache_cookie *cookie,
struct iov_iter iter;
loff_t start = rreq->start;
size_t len = rreq->len;
+ unsigned long flags;
size_t done = 0;
int ret;
@@ -172,12 +173,12 @@ static int erofs_fscache_read_folios_async(struct fscache_cookie *cookie,
subreq->start = pstart + done;
subreq->len = len - done;
- subreq->flags = 1 << NETFS_SREQ_ONDEMAND;
list_add_tail(&subreq->rreq_link, &rreq->subrequests);
+ flags = 1 << FSCACHE_REQ_ONDEMAND;
source = cres->ops->prepare_read(cres, &subreq->start,
- &subreq->len, &subreq->flags, LLONG_MAX);
+ &subreq->len, &flags, LLONG_MAX);
if (WARN_ON(subreq->len == 0))
source = FSCACHE_INVALID_READ;
if (source != FSCACHE_READ_FROM_CACHE) {
diff --git a/fs/netfs/io.c b/fs/netfs/io.c
index 7fd2627e259a..13ac74f2e32f 100644
--- a/fs/netfs/io.c
+++ b/fs/netfs/io.c
@@ -485,10 +485,16 @@ static enum fscache_io_source netfs_cache_prepare_read(struct netfs_io_subreques
{
struct netfs_io_request *rreq = subreq->rreq;
struct fscache_resources *cres = &rreq->cache_resources;
-
- if (cres->ops)
- return cres->ops->prepare_read(cres, &subreq->start,
- &subreq->len, &subreq->flags, i_size);
+ enum fscache_io_source source;
+ unsigned long flags = 0;
+
+ if (cres->ops) {
+ source = cres->ops->prepare_read(cres, &subreq->start,
+ &subreq->len, &flags, i_size);
+ if (test_bit(FSCACHE_REQ_COPY_TO_CACHE, &flags))
+ __set_bit(NETFS_SREQ_COPY_TO_CACHE, &subreq->flags);
+ return source;
+ }
if (subreq->start >= rreq->i_size)
return FSCACHE_FILL_WITH_ZEROES;
return FSCACHE_DOWNLOAD_FROM_SERVER;
diff --git a/include/linux/fscache.h b/include/linux/fscache.h
index e955df30845b..9df2988be804 100644
--- a/include/linux/fscache.h
+++ b/include/linux/fscache.h
@@ -147,6 +147,9 @@ struct fscache_cookie {
};
};
+#define FSCACHE_REQ_COPY_TO_CACHE 0 /* Set if should copy the data to the cache */
+#define FSCACHE_REQ_ONDEMAND 1 /* Set if it's from on-demand read mode */
+
/*
* slow-path functions for when there is actually caching available, and the
* netfs does actually have a valid token
diff --git a/include/linux/netfs.h b/include/linux/netfs.h
index 91a4382cbd1f..146a13e6a9d2 100644
--- a/include/linux/netfs.h
+++ b/include/linux/netfs.h
@@ -160,7 +160,6 @@ struct netfs_io_subrequest {
#define NETFS_SREQ_SHORT_IO 2 /* Set if the I/O was short */
#define NETFS_SREQ_SEEK_DATA_READ 3 /* Set if ->read() should SEEK_DATA first */
#define NETFS_SREQ_NO_PROGRESS 4 /* Set if we didn't manage to read any data */
-#define NETFS_SREQ_ONDEMAND 5 /* Set if it's from on-demand read mode */
};
enum netfs_io_origin {
--
2.19.1.6.gb485710b
next prev parent reply other threads:[~2022-10-27 8:36 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-27 8:35 [PATCH 0/9] fscache,netfs: decouple raw fscache APIs from libnetfs Jingbo Xu
2022-10-27 8:35 ` [PATCH 1/9] fscache: decouple prepare_read() from netfs_io_subrequest Jingbo Xu
2022-10-27 8:35 ` [PATCH 2/9] fscache,netfs: rename netfs_io_source as fscache_io_source Jingbo Xu
2022-10-27 8:35 ` [PATCH 3/9] fscache,netfs: rename netfs_io_terminated_t as fscache_io_terminated_t Jingbo Xu
2022-10-27 8:35 ` [PATCH 4/9] fscache,netfs: rename netfs_read_from_hole as fscache_read_from_hole Jingbo Xu
2022-10-27 8:35 ` [PATCH 5/9] fscache,netfs: rename netfs_cache_ops as fscache_ops Jingbo Xu
2022-10-27 8:35 ` [PATCH 6/9] fscache,netfs: rename netfs_cache_resources as fscache_resources Jingbo Xu
2022-10-27 8:35 ` Jingbo Xu [this message]
2022-10-27 8:35 ` [PATCH 8/9] fscache,netfs: move PageFsCache() family helpers to fscache.h Jingbo Xu
2022-10-27 8:35 ` [PATCH 9/9] fscache,netfs: move "fscache_" prefixed structures " Jingbo Xu
2022-10-27 11:52 ` kernel test robot
2022-10-27 13:04 ` [PATCH 2/9] fscache,netfs: rename netfs_io_source as fscache_io_source David Howells
2022-10-27 13:06 ` [PATCH 8/9] fscache,netfs: move PageFsCache() family helpers to fscache.h David Howells
2022-10-27 13:06 ` [PATCH 3/9] fscache,netfs: rename netfs_io_terminated_t as fscache_io_terminated_t David Howells
2022-10-27 13:08 ` [PATCH 6/9] fscache,netfs: rename netfs_cache_resources as fscache_resources David Howells
2022-10-27 13:09 ` [PATCH 4/9] fscache,netfs: rename netfs_read_from_hole as fscache_read_from_hole David Howells
2022-10-27 13:10 ` [PATCH 5/9] fscache,netfs: rename netfs_cache_ops as fscache_ops David Howells
2022-10-27 13:11 ` [PATCH 7/9] fscache,netfs: define flags for prepare_read() David Howells
2022-10-27 13:13 ` [PATCH 9/9] fscache,netfs: move "fscache_" prefixed structures to fscache.h David Howells
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=20221027083547.46933-8-jefflexu@linux.alibaba.com \
--to=jefflexu@linux.alibaba.com \
--cc=dhowells@redhat.com \
--cc=jlayton@kernel.org \
--cc=linux-afs@lists.infradead.org \
--cc=linux-cachefs@redhat.com \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-erofs@lists.ozlabs.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
/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).