Merge tag 'fuse-update-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse
Pull fuse update from Miklos Szeredi: "Add more caching controls for userspace filesystems to use, as well as bug fixes and cleanups" * tag 'fuse-update-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse: fuse: clean up fuse_alloc_inode fuse: Add ioctl flag for x32 compat ioctl fuse: Convert fusectl to use the new mount API fuse: fix changelog entry for protocol 7.9 fuse: fix changelog entry for protocol 7.12 fuse: document fuse_fsync_in.fsync_flags fuse: Add FOPEN_STREAM to use stream_open() fuse: require /dev/fuse reads to have enough buffer capacity fuse: retrieve: cap requested size to negotiated max_write fuse: allow filesystems to have precise control over data cache fuse: convert printk -> pr_* fuse: honor RLIMIT_FSIZE in fuse_file_fallocate fuse: fix writepages on 32bit
This commit is contained in:
@@ -81,14 +81,12 @@ struct fuse_forget_link *fuse_alloc_forget(void)
|
||||
|
||||
static struct inode *fuse_alloc_inode(struct super_block *sb)
|
||||
{
|
||||
struct inode *inode;
|
||||
struct fuse_inode *fi;
|
||||
|
||||
inode = kmem_cache_alloc(fuse_inode_cachep, GFP_KERNEL);
|
||||
if (!inode)
|
||||
fi = kmem_cache_alloc(fuse_inode_cachep, GFP_KERNEL);
|
||||
if (!fi)
|
||||
return NULL;
|
||||
|
||||
fi = get_fuse_inode(inode);
|
||||
fi->i_time = 0;
|
||||
fi->inval_mask = 0;
|
||||
fi->nodeid = 0;
|
||||
@@ -100,11 +98,11 @@ static struct inode *fuse_alloc_inode(struct super_block *sb)
|
||||
spin_lock_init(&fi->lock);
|
||||
fi->forget = fuse_alloc_forget();
|
||||
if (!fi->forget) {
|
||||
kmem_cache_free(fuse_inode_cachep, inode);
|
||||
kmem_cache_free(fuse_inode_cachep, fi);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return inode;
|
||||
return &fi->inode;
|
||||
}
|
||||
|
||||
static void fuse_free_inode(struct inode *inode)
|
||||
@@ -233,7 +231,8 @@ void fuse_change_attributes(struct inode *inode, struct fuse_attr *attr,
|
||||
|
||||
if (oldsize != attr->size) {
|
||||
truncate_pagecache(inode, attr->size);
|
||||
inval = true;
|
||||
if (!fc->explicit_inval_data)
|
||||
inval = true;
|
||||
} else if (fc->auto_inval_data) {
|
||||
struct timespec64 new_mtime = {
|
||||
.tv_sec = attr->mtime,
|
||||
@@ -908,6 +907,8 @@ static void process_init_reply(struct fuse_conn *fc, struct fuse_req *req)
|
||||
fc->dont_mask = 1;
|
||||
if (arg->flags & FUSE_AUTO_INVAL_DATA)
|
||||
fc->auto_inval_data = 1;
|
||||
else if (arg->flags & FUSE_EXPLICIT_INVAL_DATA)
|
||||
fc->explicit_inval_data = 1;
|
||||
if (arg->flags & FUSE_DO_READDIRPLUS) {
|
||||
fc->do_readdirplus = 1;
|
||||
if (arg->flags & FUSE_READDIRPLUS_AUTO)
|
||||
@@ -969,7 +970,7 @@ static void fuse_send_init(struct fuse_conn *fc, struct fuse_req *req)
|
||||
FUSE_WRITEBACK_CACHE | FUSE_NO_OPEN_SUPPORT |
|
||||
FUSE_PARALLEL_DIROPS | FUSE_HANDLE_KILLPRIV | FUSE_POSIX_ACL |
|
||||
FUSE_ABORT_ERROR | FUSE_MAX_PAGES | FUSE_CACHE_SYMLINKS |
|
||||
FUSE_NO_OPENDIR_SUPPORT;
|
||||
FUSE_NO_OPENDIR_SUPPORT | FUSE_EXPLICIT_INVAL_DATA;
|
||||
req->in.h.opcode = FUSE_INIT;
|
||||
req->in.numargs = 1;
|
||||
req->in.args[0].size = sizeof(*arg);
|
||||
@@ -1393,8 +1394,8 @@ static int __init fuse_init(void)
|
||||
{
|
||||
int res;
|
||||
|
||||
printk(KERN_INFO "fuse init (API version %i.%i)\n",
|
||||
FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION);
|
||||
pr_info("init (API version %i.%i)\n",
|
||||
FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION);
|
||||
|
||||
INIT_LIST_HEAD(&fuse_conn_list);
|
||||
res = fuse_fs_init();
|
||||
@@ -1430,7 +1431,7 @@ static int __init fuse_init(void)
|
||||
|
||||
static void __exit fuse_exit(void)
|
||||
{
|
||||
printk(KERN_DEBUG "fuse exit\n");
|
||||
pr_debug("exit\n");
|
||||
|
||||
fuse_ctl_cleanup();
|
||||
fuse_sysfs_cleanup();
|
||||
|
Reference in New Issue
Block a user