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

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'dm-4.2-fixes-4' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm

Pull device mapper fixes from Mike Snitzer:

- stable fix for a dm_merge_bvec() regression on 32 bit Fedora systems.

- fix for a 4.2 DM thinp discard regression due to inability to
properly delete a range of blocks in a data mapping btree.

* tag 'dm-4.2-fixes-4' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
dm btree remove: fix bug in remove_one()
dm: fix dm_merge_bvec regression on 32 bit systems

+11 -17
+10 -17
drivers/md/dm.c
··· 1729 1729 struct mapped_device *md = q->queuedata; 1730 1730 struct dm_table *map = dm_get_live_table_fast(md); 1731 1731 struct dm_target *ti; 1732 - sector_t max_sectors, max_size = 0; 1732 + sector_t max_sectors; 1733 + int max_size = 0; 1733 1734 1734 1735 if (unlikely(!map)) 1735 1736 goto out; ··· 1743 1742 * Find maximum amount of I/O that won't need splitting 1744 1743 */ 1745 1744 max_sectors = min(max_io_len(bvm->bi_sector, ti), 1746 - (sector_t) queue_max_sectors(q)); 1745 + (sector_t) BIO_MAX_SECTORS); 1747 1746 max_size = (max_sectors << SECTOR_SHIFT) - bvm->bi_size; 1748 - 1749 - /* 1750 - * FIXME: this stop-gap fix _must_ be cleaned up (by passing a sector_t 1751 - * to the targets' merge function since it holds sectors not bytes). 1752 - * Just doing this as an interim fix for stable@ because the more 1753 - * comprehensive cleanup of switching to sector_t will impact every 1754 - * DM target that implements a ->merge hook. 1755 - */ 1756 - if (max_size > INT_MAX) 1757 - max_size = INT_MAX; 1747 + if (max_size < 0) 1748 + max_size = 0; 1758 1749 1759 1750 /* 1760 1751 * merge_bvec_fn() returns number of bytes ··· 1754 1761 * max is precomputed maximal io size 1755 1762 */ 1756 1763 if (max_size && ti->type->merge) 1757 - max_size = ti->type->merge(ti, bvm, biovec, (int) max_size); 1764 + max_size = ti->type->merge(ti, bvm, biovec, max_size); 1758 1765 /* 1759 1766 * If the target doesn't support merge method and some of the devices 1760 - * provided their merge_bvec method (we know this by looking for the 1761 - * max_hw_sectors that dm_set_device_limits may set), then we can't 1762 - * allow bios with multiple vector entries. So always set max_size 1763 - * to 0, and the code below allows just one page. 1767 + * provided their merge_bvec method (we know this by looking at 1768 + * queue_max_hw_sectors), then we can't allow bios with multiple vector 1769 + * entries. So always set max_size to 0, and the code below allows 1770 + * just one page. 1764 1771 */ 1765 1772 else if (queue_max_hw_sectors(q) <= PAGE_SIZE >> 9) 1766 1773 max_size = 0;
+1
drivers/md/persistent-data/dm-btree-remove.c
··· 689 689 value_ptr(n, index)); 690 690 691 691 delete_at(n, index); 692 + keys[last_level] = k + 1ull; 692 693 693 694 } else 694 695 r = -ENODATA;