diff options
author | David S. Miller <davem@davemloft.net> | 2014-11-14 01:01:12 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-11-14 01:01:12 -0500 |
commit | 076ce4482569ea1a2c27b4ca71a309adaf91d398 (patch) | |
tree | 2ae9e42612f35be897f190983fc292d7af781cd2 /drivers/md/dm-raid.c | |
parent | d649a7a81f3b5bacb1d60abd7529894d8234a666 (diff) | |
parent | b23dc5a7cc6ebc9a0d57351da7a0e8454c9ffea3 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/chelsio/cxgb4vf/sge.c
drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
sge.c was overlapping two changes, one to use the new
__dev_alloc_page() in net-next, and one to use s->fl_pg_order in net.
ixgbe_phy.c was a set of overlapping whitespace changes.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/md/dm-raid.c')
-rw-r--r-- | drivers/md/dm-raid.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c index 4857fa4a5484..07c0fa0fa284 100644 --- a/drivers/md/dm-raid.c +++ b/drivers/md/dm-raid.c | |||
@@ -789,8 +789,7 @@ struct dm_raid_superblock { | |||
789 | __le32 layout; | 789 | __le32 layout; |
790 | __le32 stripe_sectors; | 790 | __le32 stripe_sectors; |
791 | 791 | ||
792 | __u8 pad[452]; /* Round struct to 512 bytes. */ | 792 | /* Remainder of a logical block is zero-filled when writing (see super_sync()). */ |
793 | /* Always set to 0 when writing. */ | ||
794 | } __packed; | 793 | } __packed; |
795 | 794 | ||
796 | static int read_disk_sb(struct md_rdev *rdev, int size) | 795 | static int read_disk_sb(struct md_rdev *rdev, int size) |
@@ -827,7 +826,7 @@ static void super_sync(struct mddev *mddev, struct md_rdev *rdev) | |||
827 | test_bit(Faulty, &(rs->dev[i].rdev.flags))) | 826 | test_bit(Faulty, &(rs->dev[i].rdev.flags))) |
828 | failed_devices |= (1ULL << i); | 827 | failed_devices |= (1ULL << i); |
829 | 828 | ||
830 | memset(sb, 0, sizeof(*sb)); | 829 | memset(sb + 1, 0, rdev->sb_size - sizeof(*sb)); |
831 | 830 | ||
832 | sb->magic = cpu_to_le32(DM_RAID_MAGIC); | 831 | sb->magic = cpu_to_le32(DM_RAID_MAGIC); |
833 | sb->features = cpu_to_le32(0); /* No features yet */ | 832 | sb->features = cpu_to_le32(0); /* No features yet */ |
@@ -862,7 +861,11 @@ static int super_load(struct md_rdev *rdev, struct md_rdev *refdev) | |||
862 | uint64_t events_sb, events_refsb; | 861 | uint64_t events_sb, events_refsb; |
863 | 862 | ||
864 | rdev->sb_start = 0; | 863 | rdev->sb_start = 0; |
865 | rdev->sb_size = sizeof(*sb); | 864 | rdev->sb_size = bdev_logical_block_size(rdev->meta_bdev); |
865 | if (rdev->sb_size < sizeof(*sb) || rdev->sb_size > PAGE_SIZE) { | ||
866 | DMERR("superblock size of a logical block is no longer valid"); | ||
867 | return -EINVAL; | ||
868 | } | ||
866 | 869 | ||
867 | ret = read_disk_sb(rdev, rdev->sb_size); | 870 | ret = read_disk_sb(rdev, rdev->sb_size); |
868 | if (ret) | 871 | if (ret) |
@@ -1169,8 +1172,12 @@ static void configure_discard_support(struct dm_target *ti, struct raid_set *rs) | |||
1169 | raid456 = (rs->md.level == 4 || rs->md.level == 5 || rs->md.level == 6); | 1172 | raid456 = (rs->md.level == 4 || rs->md.level == 5 || rs->md.level == 6); |
1170 | 1173 | ||
1171 | for (i = 0; i < rs->md.raid_disks; i++) { | 1174 | for (i = 0; i < rs->md.raid_disks; i++) { |
1172 | struct request_queue *q = bdev_get_queue(rs->dev[i].rdev.bdev); | 1175 | struct request_queue *q; |
1176 | |||
1177 | if (!rs->dev[i].rdev.bdev) | ||
1178 | continue; | ||
1173 | 1179 | ||
1180 | q = bdev_get_queue(rs->dev[i].rdev.bdev); | ||
1174 | if (!q || !blk_queue_discard(q)) | 1181 | if (!q || !blk_queue_discard(q)) |
1175 | return; | 1182 | return; |
1176 | 1183 | ||