Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 31 Jan 2014 04:08:20 +0000 (20:08 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 31 Jan 2014 04:08:20 +0000 (20:08 -0800)
Pull btrfs updates from Chris Mason:
 "This is a pretty big pull, and most of these changes have been
  floating in btrfs-next for a long time.  Filipe's properties work is a
  cool building block for inheriting attributes like compression down on
  a per inode basis.

  Jeff Mahoney kicked in code to export filesystem info into sysfs.

  Otherwise, lots of performance improvements, cleanups and bug fixes.

  Looks like there are still a few other small pending incrementals, but
  I wanted to get the bulk of this in first"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs: (149 commits)
  Btrfs: fix spin_unlock in check_ref_cleanup
  Btrfs: setup inode location during btrfs_init_inode_locked
  Btrfs: don't use ram_bytes for uncompressed inline items
  Btrfs: fix btrfs_search_slot_for_read backwards iteration
  Btrfs: do not export ulist functions
  Btrfs: rework ulist with list+rb_tree
  Btrfs: fix memory leaks on walking backrefs failure
  Btrfs: fix send file hole detection leading to data corruption
  Btrfs: add a reschedule point in btrfs_find_all_roots()
  Btrfs: make send's file extent item search more efficient
  Btrfs: fix to catch all errors when resolving indirect ref
  Btrfs: fix protection between walking backrefs and root deletion
  btrfs: fix warning while merging two adjacent extents
  Btrfs: fix infinite path build loops in incremental send
  btrfs: undo sysfs when open_ctree() fails
  Btrfs: fix snprintf usage by send's gen_unique_name
  btrfs: fix defrag 32-bit integer overflow
  btrfs: sysfs: list the NO_HOLES feature
  btrfs: sysfs: don't show reserved incompat feature
  btrfs: call permission checks earlier in ioctls and return EPERM
  ...

12 files changed:
1  2 
fs/btrfs/check-integrity.c
fs/btrfs/compression.c
fs/btrfs/ctree.h
fs/btrfs/disk-io.c
fs/btrfs/extent_io.c
fs/btrfs/file-item.c
fs/btrfs/inode.c
fs/btrfs/ioctl.c
fs/btrfs/scrub.c
fs/btrfs/volumes.c
fs/btrfs/xattr.c
lib/kobject.c

Simple merge
Simple merge
Simple merge
Simple merge
@@@ -2332,15 -2375,12 +2375,13 @@@ int end_extent_writepage(struct page *p
   */
  static void end_bio_extent_writepage(struct bio *bio, int err)
  {
 -      struct bio_vec *bvec = bio->bi_io_vec + bio->bi_vcnt - 1;
 +      struct bio_vec *bvec;
-       struct extent_io_tree *tree;
        u64 start;
        u64 end;
 +      int i;
  
 -      do {
 +      bio_for_each_segment_all(bvec, bio, i) {
                struct page *page = bvec->bv_page;
-               tree = &BTRFS_I(page->mapping->host)->io_tree;
  
                /* We always issue full-page reads, but if some block
                 * in a page fails to read, blk_update_request() will
Simple merge
@@@ -6895,11 -7066,10 +7067,11 @@@ static void btrfs_end_dio_bio(struct bi
        struct btrfs_dio_private *dip = bio->bi_private;
  
        if (err) {
-               printk(KERN_ERR "btrfs direct IO failed ino %llu rw %lu "
-                     "sector %#Lx len %u err no %d\n",
+               btrfs_err(BTRFS_I(dip->inode)->root->fs_info,
+                         "direct IO failed ino %llu rw %lu sector %#Lx len %u err no %d",
                      btrfs_ino(dip->inode), bio->bi_rw,
 -                    (unsigned long long)bio->bi_sector, bio->bi_size, err);
 +                    (unsigned long long)bio->bi_iter.bi_sector,
 +                    bio->bi_iter.bi_size, err);
                dip->errors = 1;
  
                /*
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc lib/kobject.c
@@@ -779,8 -758,58 +779,9 @@@ const struct sysfs_ops kobj_sysfs_ops 
        .show   = kobj_attr_show,
        .store  = kobj_attr_store,
  };
+ EXPORT_SYMBOL_GPL(kobj_sysfs_ops);
  
  /**
 - * kobj_completion_init - initialize a kobj_completion object.
 - * @kc: kobj_completion
 - * @ktype: type of kobject to initialize
 - *
 - * kobj_completion structures can be embedded within structures with different
 - * lifetime rules.  During the release of the enclosing object, we can
 - * wait on the release of the kobject so that we don't free it while it's
 - * still busy.
 - */
 -void kobj_completion_init(struct kobj_completion *kc, struct kobj_type *ktype)
 -{
 -      init_completion(&kc->kc_unregister);
 -      kobject_init(&kc->kc_kobj, ktype);
 -}
 -EXPORT_SYMBOL_GPL(kobj_completion_init);
 -
 -/**
 - * kobj_completion_release - release a kobj_completion object
 - * @kobj: kobject embedded in kobj_completion
 - *
 - * Used with kobject_release to notify waiters that the kobject has been
 - * released.
 - */
 -void kobj_completion_release(struct kobject *kobj)
 -{
 -      struct kobj_completion *kc = kobj_to_kobj_completion(kobj);
 -      complete(&kc->kc_unregister);
 -}
 -EXPORT_SYMBOL_GPL(kobj_completion_release);
 -
 -/**
 - * kobj_completion_del_and_wait - release the kobject and wait for it
 - * @kc: kobj_completion object to release
 - *
 - * Delete the kobject from sysfs and drop the reference count.  Then wait
 - * until any other outstanding references are also dropped.  This routine
 - * is only necessary once other references may have been taken on the
 - * kobject.  Typically this happens when the kobject has been published
 - * to sysfs via kobject_add.
 - */
 -void kobj_completion_del_and_wait(struct kobj_completion *kc)
 -{
 -      kobject_del(&kc->kc_kobj);
 -      kobject_put(&kc->kc_kobj);
 -      wait_for_completion(&kc->kc_unregister);
 -}
 -EXPORT_SYMBOL_GPL(kobj_completion_del_and_wait);
 -
 -/**
   * kset_register - initialize and add a kset.
   * @k: kset.
   */