Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'dm-6.7/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 DM verity target's FEC support to always initialize IO before it
frees it. Also fix alignment of struct dm_verity_fec_io within the
per-bio-data

- Fix DM verity target to not FEC failed readahead IO

- Update DM flakey target to use MAX_ORDER rather than MAX_ORDER - 1

* tag 'dm-6.7/dm-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
dm-flakey: start allocating with MAX_ORDER
dm-verity: align struct dm_verity_fec_io properly
dm verity: don't perform FEC for failed readahead IO
dm verity: initialize fec io before freeing it

+8 -10
+1 -1
drivers/md/dm-flakey.c
··· 434 434 435 435 remaining_size = size; 436 436 437 - order = MAX_ORDER - 1; 437 + order = MAX_ORDER; 438 438 while (remaining_size) { 439 439 struct page *pages; 440 440 unsigned size_to_add, to_copy;
+2 -1
drivers/md/dm-verity-fec.c
··· 24 24 */ 25 25 static inline struct dm_verity_fec_io *fec_io(struct dm_verity_io *io) 26 26 { 27 - return (struct dm_verity_fec_io *) verity_io_digest_end(io->v, io); 27 + return (struct dm_verity_fec_io *) 28 + ((char *)io + io->v->ti->per_io_data_size - sizeof(struct dm_verity_fec_io)); 28 29 } 29 30 30 31 /*
+5 -2
drivers/md/dm-verity-target.c
··· 642 642 643 643 io->in_tasklet = false; 644 644 645 - verity_fec_init_io(io); 646 645 verity_finish_io(io, errno_to_blk_status(verity_verify_io(io))); 647 646 } 648 647 ··· 667 668 struct dm_verity_io *io = bio->bi_private; 668 669 669 670 if (bio->bi_status && 670 - (!verity_fec_is_enabled(io->v) || verity_is_system_shutting_down())) { 671 + (!verity_fec_is_enabled(io->v) || 672 + verity_is_system_shutting_down() || 673 + (bio->bi_opf & REQ_RAHEAD))) { 671 674 verity_finish_io(io, bio->bi_status); 672 675 return; 673 676 } ··· 792 791 bio->bi_end_io = verity_end_io; 793 792 bio->bi_private = io; 794 793 io->iter = bio->bi_iter; 794 + 795 + verity_fec_init_io(io); 795 796 796 797 verity_submit_prefetch(v, io); 797 798
-6
drivers/md/dm-verity.h
··· 115 115 return (u8 *)(io + 1) + v->ahash_reqsize + v->digest_size; 116 116 } 117 117 118 - static inline u8 *verity_io_digest_end(struct dm_verity *v, 119 - struct dm_verity_io *io) 120 - { 121 - return verity_io_want_digest(v, io) + v->digest_size; 122 - } 123 - 124 118 extern int verity_for_bv_block(struct dm_verity *v, struct dm_verity_io *io, 125 119 struct bvec_iter *iter, 126 120 int (*process)(struct dm_verity *v,