fs/9p: Expand setup of writeback cache to all levels
authorEric Van Hensbergen <ericvh@kernel.org>
Thu, 8 Dec 2022 02:03:32 +0000 (02:03 +0000)
committerEric Van Hensbergen <ericvh@kernel.org>
Thu, 23 Feb 2023 22:39:36 +0000 (22:39 +0000)
If cache is enabled, make sure we are putting the right things
in place (mainly impacts mmap).  This also sets us up for more
cache levels.

Signed-off-by: Eric Van Hensbergen <ericvh@kernel.org>
Reviewed-by: Dominique Martinet <asmadeus@codewreck.org>
fs/9p/v9fs.c
fs/9p/vfs_addr.c
fs/9p/vfs_file.c
fs/9p/vfs_inode.c
fs/9p/vfs_inode_dotl.c

index 3a9c4517265fa27d4eb00b50f3684384243f260f..61a51b90600dc4aeac24835613904b7257546d48 100644 (file)
@@ -468,7 +468,7 @@ struct p9_fid *v9fs_session_init(struct v9fs_session_info *v9ses,
 
 #ifdef CONFIG_9P_FSCACHE
        /* register the session for caching */
-       if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) {
+       if (v9ses->cache == CACHE_FSCACHE) {
                rc = v9fs_cache_session_get_cookie(v9ses, dev_name);
                if (rc < 0)
                        goto err_clnt;
index 97599edbc300b0e6672f234bfdd3c3d1cd960b77..6f46d7e4c7509e05d64055eb749ff792efb29fed 100644 (file)
@@ -279,8 +279,6 @@ static int v9fs_write_begin(struct file *filp, struct address_space *mapping,
 
        p9_debug(P9_DEBUG_VFS, "filp %p, mapping %p\n", filp, mapping);
 
-       BUG_ON(!v9inode->writeback_fid);
-
        /* Prefetch area to be written into the cache if we're caching this
         * file.  We need to do this before we get a lock on the page in case
         * there's more than one writer competing for the same cache block.
index b740017634ef154747f22473bdd8b883134cb607..3b6458846a0b2bbe393385e5b60d14c944318442 100644 (file)
@@ -73,8 +73,7 @@ int v9fs_file_open(struct inode *inode, struct file *file)
        }
 
        mutex_lock(&v9inode->v_mutex);
-       if ((v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) &&
-           !v9inode->writeback_fid &&
+       if ((v9ses->cache) && !v9inode->writeback_fid &&
            ((file->f_flags & O_ACCMODE) != O_RDONLY)) {
                /*
                 * clone a fid and add it to writeback_fid
@@ -92,9 +91,11 @@ int v9fs_file_open(struct inode *inode, struct file *file)
                v9inode->writeback_fid = (void *) writeback_fid;
        }
        mutex_unlock(&v9inode->v_mutex);
-       if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE)
+#ifdef CONFIG_9P_FSCACHE
+       if (v9ses->cache == CACHE_FSCACHE)
                fscache_use_cookie(v9fs_inode_cookie(v9inode),
                                   file->f_mode & FMODE_WRITE);
+#endif
        v9fs_open_fid_add(inode, &fid);
        return 0;
 out_error:
index 27a04a226d973a42b57eeaadf589f9dddbbaf22d..33e521c60e2ccbf5fc762571cc67fa6b437f118f 100644 (file)
@@ -843,8 +843,7 @@ v9fs_vfs_atomic_open(struct inode *dir, struct dentry *dentry,
        inode = d_inode(dentry);
        v9inode = V9FS_I(inode);
        mutex_lock(&v9inode->v_mutex);
-       if ((v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) &&
-           !v9inode->writeback_fid &&
+       if ((v9ses->cache) && !v9inode->writeback_fid &&
            ((flags & O_ACCMODE) != O_RDONLY)) {
                /*
                 * clone a fid and add it to writeback_fid
index f806b3f116496858a224cce8e1955ae4dd3d9be1..bff37a312e64a81ca5f3017c54a7bc7273879386 100644 (file)
@@ -316,8 +316,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry,
 
        v9inode = V9FS_I(inode);
        mutex_lock(&v9inode->v_mutex);
-       if ((v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) &&
-           !v9inode->writeback_fid &&
+       if ((v9ses->cache) && !v9inode->writeback_fid &&
            ((flags & O_ACCMODE) != O_RDONLY)) {
                /*
                 * clone a fid and add it to writeback_fid
@@ -340,9 +339,11 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry,
        if (err)
                goto out;
        file->private_data = ofid;
-       if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE)
+#ifdef CONFIG_9P_FSCACHE
+       if (v9ses->cache == CACHE_FSCACHE)
                fscache_use_cookie(v9fs_inode_cookie(v9inode),
                                   file->f_mode & FMODE_WRITE);
+#endif
        v9fs_open_fid_add(inode, &ofid);
        file->f_mode |= FMODE_CREATED;
 out: