mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-27 07:08:25 -05:00
Merge tag 'for-6.3/dm-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm
Pull device mapper fixes from Mike Snitzer: - Fix two DM core bugs in the code that handles splitting "abnormal" IO (discards, write same and secure erase) and issuing that IO to the correct underlying devices (and offsets within those devices). * tag 'for-6.3/dm-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: dm: fix __send_duplicate_bios() to always allow for splitting IO dm: fix improper splitting for abnormal bios
This commit is contained in:
@@ -1467,7 +1467,8 @@ static void setup_split_accounting(struct clone_info *ci, unsigned int len)
|
||||
}
|
||||
|
||||
static void alloc_multiple_bios(struct bio_list *blist, struct clone_info *ci,
|
||||
struct dm_target *ti, unsigned int num_bios)
|
||||
struct dm_target *ti, unsigned int num_bios,
|
||||
unsigned *len)
|
||||
{
|
||||
struct bio *bio;
|
||||
int try;
|
||||
@@ -1478,7 +1479,7 @@ static void alloc_multiple_bios(struct bio_list *blist, struct clone_info *ci,
|
||||
if (try)
|
||||
mutex_lock(&ci->io->md->table_devices_lock);
|
||||
for (bio_nr = 0; bio_nr < num_bios; bio_nr++) {
|
||||
bio = alloc_tio(ci, ti, bio_nr, NULL,
|
||||
bio = alloc_tio(ci, ti, bio_nr, len,
|
||||
try ? GFP_NOIO : GFP_NOWAIT);
|
||||
if (!bio)
|
||||
break;
|
||||
@@ -1513,8 +1514,10 @@ static int __send_duplicate_bios(struct clone_info *ci, struct dm_target *ti,
|
||||
ret = 1;
|
||||
break;
|
||||
default:
|
||||
if (len)
|
||||
setup_split_accounting(ci, *len);
|
||||
/* dm_accept_partial_bio() is not supported with shared tio->len_ptr */
|
||||
alloc_multiple_bios(&blist, ci, ti, num_bios);
|
||||
alloc_multiple_bios(&blist, ci, ti, num_bios, len);
|
||||
while ((clone = bio_list_pop(&blist))) {
|
||||
dm_tio_set_flag(clone_to_tio(clone), DM_TIO_IS_DUPLICATE_BIO);
|
||||
__map_bio(clone);
|
||||
|
||||
Reference in New Issue
Block a user