Merge branch 'for-linus-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/mason...
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 18 Jan 2016 20:44:40 +0000 (12:44 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 18 Jan 2016 20:44:40 +0000 (12:44 -0800)
Pull btrfs updates from Chris Mason:
 "This has our usual assortment of fixes and cleanups, but the biggest
  change included is Omar Sandoval's free space tree.  It's not the
  default yet, mounting -o space_cache=v2 enables it and sets a readonly
  compat bit.  The tree can actually be deleted and regenerated if there
  are any problems, but it has held up really well in testing so far.

  For very large filesystems (30T+) our existing free space caching code
  can end up taking a huge amount of time during commits.  The new tree
  based code is faster and less work overall to update as the commit
  progresses.

  Omar worked on this during the summer and we'll hammer on it in
  production here at FB over the next few months"

* 'for-linus-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs: (73 commits)
  Btrfs: fix fitrim discarding device area reserved for boot loader's use
  Btrfs: Check metadata redundancy on balance
  btrfs: statfs: report zero available if metadata are exhausted
  btrfs: preallocate path for snapshot creation at ioctl time
  btrfs: allocate root item at snapshot ioctl time
  btrfs: do an allocation earlier during snapshot creation
  btrfs: use smaller type for btrfs_path locks
  btrfs: use smaller type for btrfs_path lowest_level
  btrfs: use smaller type for btrfs_path reada
  btrfs: cleanup, use enum values for btrfs_path reada
  btrfs: constify static arrays
  btrfs: constify remaining structs with function pointers
  btrfs tests: replace whole ops structure for free space tests
  btrfs: use list_for_each_entry* in backref.c
  btrfs: use list_for_each_entry_safe in free-space-cache.c
  btrfs: use list_for_each_entry* in check-integrity.c
  Btrfs: use linux/sizes.h to represent constants
  btrfs: cleanup, remove stray return statements
  btrfs: zero out delayed node upon allocation
  btrfs: pass proper enum type to start_transaction()
  ...

1  2 
fs/btrfs/acl.c
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/file.c
fs/btrfs/inode.c
fs/btrfs/ioctl.c
fs/btrfs/super.c
fs/btrfs/xattr.c

diff --cc fs/btrfs/acl.c
Simple merge
Simple merge
Simple merge
diff --cc fs/btrfs/file.c
Simple merge
Simple merge
index e21997385d148c7ede78fd5874e594577ed8a9e9,e392dd67f0ba07dd943dcc650175a0ab8a79cceb..2a47a3148ec80df57150e3f5aa7d321abb8d1ccd
@@@ -3096,18 -3104,55 +3104,18 @@@ out_unlock
        return ret;
  }
  
- #define BTRFS_MAX_DEDUPE_LEN  (16 * 1024 * 1024)
+ #define BTRFS_MAX_DEDUPE_LEN  SZ_16M
  
 -static long btrfs_ioctl_file_extent_same(struct file *file,
 -                      struct btrfs_ioctl_same_args __user *argp)
 +ssize_t btrfs_dedupe_file_range(struct file *src_file, u64 loff, u64 olen,
 +                              struct file *dst_file, u64 dst_loff)
  {
 -      struct btrfs_ioctl_same_args *same = NULL;
 -      struct btrfs_ioctl_same_extent_info *info;
 -      struct inode *src = file_inode(file);
 -      u64 off;
 -      u64 len;
 -      int i;
 -      int ret;
 -      unsigned long size;
 +      struct inode *src = file_inode(src_file);
 +      struct inode *dst = file_inode(dst_file);
        u64 bs = BTRFS_I(src)->root->fs_info->sb->s_blocksize;
 -      bool is_admin = capable(CAP_SYS_ADMIN);
 -      u16 count;
 -
 -      if (!(file->f_mode & FMODE_READ))
 -              return -EINVAL;
 -
 -      ret = mnt_want_write_file(file);
 -      if (ret)
 -              return ret;
 -
 -      if (get_user(count, &argp->dest_count)) {
 -              ret = -EFAULT;
 -              goto out;
 -      }
 -
 -      size = offsetof(struct btrfs_ioctl_same_args __user, info[count]);
 -
 -      same = memdup_user(argp, size);
 -
 -      if (IS_ERR(same)) {
 -              ret = PTR_ERR(same);
 -              same = NULL;
 -              goto out;
 -      }
 +      ssize_t res;
  
 -      off = same->logical_offset;
 -      len = same->length;
 -
 -      /*
 -       * Limit the total length we will dedupe for each operation.
 -       * This is intended to bound the total time spent in this
 -       * ioctl to something sane.
 -       */
 -      if (len > BTRFS_MAX_DEDUPE_LEN)
 -              len = BTRFS_MAX_DEDUPE_LEN;
 +      if (olen > BTRFS_MAX_DEDUPE_LEN)
 +              olen = BTRFS_MAX_DEDUPE_LEN;
  
        if (WARN_ON_ONCE(bs < PAGE_CACHE_SIZE)) {
                /*
Simple merge
Simple merge