Merge tag 'fuse-update-5.2' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 14 May 2019 15:59:14 +0000 (08:59 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 14 May 2019 15:59:14 +0000 (08:59 -0700)
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

1  2 
fs/fuse/inode.c

diff --cc fs/fuse/inode.c
index f485d09d14df7c8ebb2aa7c6f90612050fee7ec4,2dfa5dcb1575b2d9433e0458cdfc398dda17a47e..4bb885b0f03224e9f793612ea05f74c1d9c0038e
@@@ -104,16 -102,25 +102,16 @@@ static struct inode *fuse_alloc_inode(s
                return NULL;
        }
  
-       return inode;
+       return &fi->inode;
  }
  
 -static void fuse_i_callback(struct rcu_head *head)
 -{
 -      struct inode *inode = container_of(head, struct inode, i_rcu);
 -      kmem_cache_free(fuse_inode_cachep, inode);
 -}
 -
 -static void fuse_destroy_inode(struct inode *inode)
 +static void fuse_free_inode(struct inode *inode)
  {
        struct fuse_inode *fi = get_fuse_inode(inode);
 -      if (S_ISREG(inode->i_mode) && !is_bad_inode(inode)) {
 -              WARN_ON(!list_empty(&fi->write_files));
 -              WARN_ON(!list_empty(&fi->queued_writes));
 -      }
 +
        mutex_destroy(&fi->mutex);
        kfree(fi->forget);
 -      call_rcu(&inode->i_rcu, fuse_i_callback);
 +      kmem_cache_free(fuse_inode_cachep, fi);
  }
  
  static void fuse_evict_inode(struct inode *inode)