mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
fs/9p: Expand setup of writeback cache to all levels
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>
This commit is contained in:
parent
2a03472262
commit
344504e912
@ -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;
|
||||
|
@ -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.
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user