]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 24 Feb 2017 22:42:19 +0000 (14:42 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 24 Feb 2017 22:42:19 +0000 (14:42 -0800)
Pull md updates from Shaohua Li:
 "Mainly fixes bugs and improves performance:

   - Improve scalability for raid1 from Coly

   - Improve raid5-cache read performance, disk efficiency and IO
     pattern from Song and me

   - Fix a race condition of disk hotplug for linear from Coly

   - A few cleanup patches from Ming and Byungchul

   - Fix a memory leak from Neil

   - Fix WRITE SAME IO failure from me

   - Add doc for raid5-cache from me"

* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md: (23 commits)
  md/raid1: fix write behind issues introduced by bio_clone_bioset_partial
  md/raid1: handle flush request correctly
  md/linear: shutup lockdep warnning
  md/raid1: fix a use-after-free bug
  RAID1: avoid unnecessary spin locks in I/O barrier code
  RAID1: a new I/O barrier implementation to remove resync window
  md/raid5: Don't reinvent the wheel but use existing llist API
  md: fast clone bio in bio_clone_mddev()
  md: remove unnecessary check on mddev
  md/raid1: use bio_clone_bioset_partial() in case of write behind
  md: fail if mddev->bio_set can't be created
  block: introduce bio_clone_bioset_partial()
  md: disable WRITE SAME if it fails in underlayer disks
  md/raid5-cache: exclude reclaiming stripes in reclaim check
  md/raid5-cache: stripe reclaim only counts valid stripes
  MD: add doc for raid5-cache
  Documentation: move MD related doc into a separate dir
  md: ensure md devices are freed before module is unloaded.
  md/r5cache: improve journal device efficiency
  md/r5cache: enable chunk_aligned_read with write back cache
  ...

1  2 
block/bio.c
drivers/md/linear.c
drivers/md/md.c
drivers/md/multipath.c
drivers/md/raid0.c
drivers/md/raid1.c
drivers/md/raid10.c
drivers/md/raid5.c

diff --cc block/bio.c
Simple merge
index f1c7bbac31a580bb6f708b614696f17404badc0d,5b06b0ddf7a36dcf1cb372da7b8bdddd116ffc0e..3e38e0207a3eb44339ad6431dc3557ae27d05612
@@@ -58,13 -64,15 +64,15 @@@ static int linear_congested(struct mdde
        struct linear_conf *conf;
        int i, ret = 0;
  
-       conf = mddev->private;
+       rcu_read_lock();
+       conf = rcu_dereference(mddev->private);
  
-       for (i = 0; i < mddev->raid_disks && !ret ; i++) {
+       for (i = 0; i < conf->raid_disks && !ret ; i++) {
                struct request_queue *q = bdev_get_queue(conf->disks[i].rdev->bdev);
 -              ret |= bdi_congested(&q->backing_dev_info, bits);
 +              ret |= bdi_congested(q->backing_dev_info, bits);
        }
  
+       rcu_read_unlock();
        return ret;
  }
  
diff --cc drivers/md/md.c
Simple merge
Simple merge
Simple merge
index 830ff2b203463ef075d53a6c7a2ae22e0ec2c7d9,d4e8796b45693222f3446f8d3edd131adb81a0c5..7453d94eeed700c8ac30da1b8d7857b4788fdbd5
@@@ -1385,8 -1515,7 +1512,7 @@@ static void raid1_write_request(struct 
                                   conf->mirrors[i].rdev->data_offset);
                mbio->bi_bdev = conf->mirrors[i].rdev->bdev;
                mbio->bi_end_io = raid1_end_write_request;
-               mbio->bi_opf = bio_op(bio) |
-                       (bio->bi_opf & (REQ_SYNC | REQ_PREFLUSH | REQ_FUA));
 -              bio_set_op_attrs(mbio, op, do_fua | do_sync);
++              mbio->bi_opf = bio_op(bio) | (bio->bi_opf & (REQ_SYNC | REQ_FUA));
                if (test_bit(FailFast, &conf->mirrors[i].rdev->flags) &&
                    !test_bit(WriteMostly, &conf->mirrors[i].rdev->flags) &&
                    conf->raid_disks - mddev->degraded > 1)
Simple merge
Simple merge