cachefiles: enable on-demand read mode
authorJeffle Xu <jefflexu@linux.alibaba.com>
Mon, 25 Apr 2022 12:21:28 +0000 (20:21 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Tue, 17 May 2022 16:11:18 +0000 (00:11 +0800)
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 <jefflexu@linux.alibaba.com>
Link: https://lore.kernel.org/r/20220509074028.74954-7-jefflexu@linux.alibaba.com
Acked-by: David Howells <dhowells@redhat.com>
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
fs/cachefiles/daemon.c

index 5b1d064..aa4efca 100644 (file)
@@ -755,11 +755,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;
@@ -771,6 +766,18 @@ static int cachefiles_daemon_bind(struct cachefiles_cache *cache, char *args)
                return -EBUSY;
        }
 
+       if (IS_ENABLED(CONFIG_CACHEFILES_ONDEMAND)) {
+               if (!strcmp(args, "ondemand")) {
+                       set_bit(CACHEFILES_ONDEMAND_MODE, &cache->flags);
+               } else if (*args) {
+                       pr_err("Invalid argument to the 'bind' command\n");
+                       return -EINVAL;
+               }
+       } 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) {
                /*