Enable on-demand read mode by adding an optional parameter to the "bind"
command.

On-demand mode will be turned on when this parameter is "ondemand", i.e.
"bind ondemand". Otherwise cachefiles will work in the original mode.

Signed-off-by: Jeffle Xu <jeffl...@linux.alibaba.com>
---
 fs/cachefiles/daemon.c | 13 ++++++++-----
 fs/cachefiles/io.c     | 11 -----------
 2 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/fs/cachefiles/daemon.c b/fs/cachefiles/daemon.c
index 2e946e4eb65a..c8bde21ace6a 100644
--- a/fs/cachefiles/daemon.c
+++ b/fs/cachefiles/daemon.c
@@ -758,11 +758,6 @@ static int cachefiles_daemon_bind(struct cachefiles_cache 
*cache, char *args)
            cache->brun_percent  >= 100)
                return -ERANGE;
 
-       if (*args) {
-               pr_err("'bind' command doesn't take an argument\n");
-               return -EINVAL;
-       }
-
        if (!cache->rootdirname) {
                pr_err("No cache directory specified\n");
                return -EINVAL;
@@ -774,6 +769,14 @@ static int cachefiles_daemon_bind(struct cachefiles_cache 
*cache, char *args)
                return -EBUSY;
        }
 
+       if (IS_ENABLED(CONFIG_CACHEFILES_ONDEMAND) &&
+           !strcmp(args, "ondemand")) {
+               set_bit(CACHEFILES_ONDEMAND_MODE, &cache->flags);
+       } else if (*args) {
+               pr_err("'bind' command doesn't take an argument\n");
+               return -EINVAL;
+       }
+
        /* Make sure we have copies of the tag string */
        if (!cache->tag) {
                /*
diff --git a/fs/cachefiles/io.c b/fs/cachefiles/io.c
index ccf77a969653..000a28f46e59 100644
--- a/fs/cachefiles/io.c
+++ b/fs/cachefiles/io.c
@@ -95,7 +95,6 @@ static int cachefiles_read(struct netfs_cache_resources *cres,
               file, file_inode(file)->i_ino, start_pos, len,
               i_size_read(file_inode(file)));
 
-retry:
        /* If the caller asked us to seek for data before doing the read, then
         * we should do that now.  If we find a gap, we fill it with zeros.
         */
@@ -120,16 +119,6 @@ static int cachefiles_read(struct netfs_cache_resources 
*cres,
                        if (read_hole == NETFS_READ_HOLE_FAIL)
                                goto presubmission_error;
 
-                       if (read_hole == NETFS_READ_HOLE_ONDEMAND) {
-                               ret = cachefiles_ondemand_read(object, off, 
len);
-                               if (ret)
-                                       goto presubmission_error;
-
-                               /* fail the read if no progress achieved */
-                               read_hole = NETFS_READ_HOLE_FAIL;
-                               goto retry;
-                       }
-
                        iov_iter_zero(len, iter);
                        skipped = len;
                        ret = 0;
-- 
2.27.0

--
Linux-cachefs mailing list
Linux-cachefs@redhat.com
https://listman.redhat.com/mailman/listinfo/linux-cachefs

Reply via email to