Merge tag 'for-5.2/dm-fix-1' of git://git.kernel.org/pub/scm/linux/kernel/git/device...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 22 May 2019 15:10:35 +0000 (08:10 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 22 May 2019 15:10:35 +0000 (08:10 -0700)
Pull device mapper fix from Mike Snitzer:
 "Fix a particularly glaring oversight in a DM core commit from 5.1 that
  doesn't properly trim special IOs (e.g. discards) relative to
  corresponding target's max_io_len_target_boundary()"

* tag 'for-5.2/dm-fix-1' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
  dm: make sure to obey max_io_len_target_boundary

drivers/md/dm.c

index 1fb1333fefec12b881ec5e32f0a12bad8af6108c..997385c1ca5448f763f3b7d505d143617b67c8f2 100644 (file)
@@ -1469,7 +1469,7 @@ static unsigned get_num_write_zeroes_bios(struct dm_target *ti)
 static int __send_changing_extent_only(struct clone_info *ci, struct dm_target *ti,
                                       unsigned num_bios)
 {
-       unsigned len = ci->sector_count;
+       unsigned len;
 
        /*
         * Even though the device advertised support for this type of
@@ -1480,6 +1480,8 @@ static int __send_changing_extent_only(struct clone_info *ci, struct dm_target *
        if (!num_bios)
                return -EOPNOTSUPP;
 
+       len = min((sector_t)ci->sector_count, max_io_len_target_boundary(ci->sector, ti));
+
        __send_duplicate_bios(ci, ti, num_bios, &len);
 
        ci->sector += len;