Skip to content

Commit 94d7dbf

Browse files
committed
Merge tag 'for-4.17/dm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm
Pull device mapper fixes from Mike Snitzer: - a stable fix for DM integrity to use kvfree - fix for a 4.17-rc1 change to dm-bufio's buffer alignment - fixes for a few sparse warnings - remove VLA usage in DM mirror target - improve DM thinp Documentation for the "read_only" feature * tag 'for-4.17/dm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: dm thin: update Documentation to clarify when "read_only" is valid dm mirror: remove VLA usage dm: fix some sparse warnings and whitespace in dax methods dm cache background tracker: fix sparse warning dm bufio: fix buffer alignment dm integrity: use kvfree for kvmalloc'd memory
2 parents 008464a + 28700a3 commit 94d7dbf

File tree

6 files changed

+19
-12
lines changed

6 files changed

+19
-12
lines changed

Documentation/device-mapper/thin-provisioning.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,10 @@ i) Constructor
264264
data device, but just remove the mapping.
265265

266266
read_only: Don't allow any changes to be made to the pool
267-
metadata.
267+
metadata. This mode is only available after the
268+
thin-pool has been created and first used in full
269+
read/write mode. It cannot be specified on initial
270+
thin-pool creation.
268271

269272
error_if_no_space: Error IOs, instead of queueing, if no space.
270273

drivers/md/dm-bufio.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1681,8 +1681,9 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign
16811681

16821682
if (block_size <= KMALLOC_MAX_SIZE &&
16831683
(block_size < PAGE_SIZE || !is_power_of_2(block_size))) {
1684-
snprintf(slab_name, sizeof slab_name, "dm_bufio_cache-%u", c->block_size);
1685-
c->slab_cache = kmem_cache_create(slab_name, c->block_size, ARCH_KMALLOC_MINALIGN,
1684+
unsigned align = min(1U << __ffs(block_size), (unsigned)PAGE_SIZE);
1685+
snprintf(slab_name, sizeof slab_name, "dm_bufio_cache-%u", block_size);
1686+
c->slab_cache = kmem_cache_create(slab_name, block_size, align,
16861687
SLAB_RECLAIM_ACCOUNT, NULL);
16871688
if (!c->slab_cache) {
16881689
r = -ENOMEM;

drivers/md/dm-cache-background-tracker.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ static bool max_work_reached(struct background_tracker *b)
166166
atomic_read(&b->pending_demotes) >= b->max_work;
167167
}
168168

169-
struct bt_work *alloc_work(struct background_tracker *b)
169+
static struct bt_work *alloc_work(struct background_tracker *b)
170170
{
171171
if (max_work_reached(b))
172172
return NULL;

drivers/md/dm-integrity.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2440,7 +2440,7 @@ static void dm_integrity_free_journal_scatterlist(struct dm_integrity_c *ic, str
24402440
unsigned i;
24412441
for (i = 0; i < ic->journal_sections; i++)
24422442
kvfree(sl[i]);
2443-
kfree(sl);
2443+
kvfree(sl);
24442444
}
24452445

24462446
static struct scatterlist **dm_integrity_alloc_journal_scatterlist(struct dm_integrity_c *ic, struct page_list *pl)

drivers/md/dm-raid1.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
#define MAX_RECOVERY 1 /* Maximum number of regions recovered in parallel. */
2525

26+
#define MAX_NR_MIRRORS (DM_KCOPYD_MAX_REGIONS + 1)
27+
2628
#define DM_RAID1_HANDLE_ERRORS 0x01
2729
#define DM_RAID1_KEEP_LOG 0x02
2830
#define errors_handled(p) ((p)->features & DM_RAID1_HANDLE_ERRORS)
@@ -255,7 +257,7 @@ static int mirror_flush(struct dm_target *ti)
255257
unsigned long error_bits;
256258

257259
unsigned int i;
258-
struct dm_io_region io[ms->nr_mirrors];
260+
struct dm_io_region io[MAX_NR_MIRRORS];
259261
struct mirror *m;
260262
struct dm_io_request io_req = {
261263
.bi_op = REQ_OP_WRITE,
@@ -651,7 +653,7 @@ static void write_callback(unsigned long error, void *context)
651653
static void do_write(struct mirror_set *ms, struct bio *bio)
652654
{
653655
unsigned int i;
654-
struct dm_io_region io[ms->nr_mirrors], *dest = io;
656+
struct dm_io_region io[MAX_NR_MIRRORS], *dest = io;
655657
struct mirror *m;
656658
struct dm_io_request io_req = {
657659
.bi_op = REQ_OP_WRITE,
@@ -1083,7 +1085,7 @@ static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv)
10831085
argc -= args_used;
10841086

10851087
if (!argc || sscanf(argv[0], "%u%c", &nr_mirrors, &dummy) != 1 ||
1086-
nr_mirrors < 2 || nr_mirrors > DM_KCOPYD_MAX_REGIONS + 1) {
1088+
nr_mirrors < 2 || nr_mirrors > MAX_NR_MIRRORS) {
10871089
ti->error = "Invalid number of mirrors";
10881090
dm_dirty_log_destroy(dl);
10891091
return -EINVAL;
@@ -1404,7 +1406,7 @@ static void mirror_status(struct dm_target *ti, status_type_t type,
14041406
int num_feature_args = 0;
14051407
struct mirror_set *ms = (struct mirror_set *) ti->private;
14061408
struct dm_dirty_log *log = dm_rh_dirty_log(ms->rh);
1407-
char buffer[ms->nr_mirrors + 1];
1409+
char buffer[MAX_NR_MIRRORS + 1];
14081410

14091411
switch (type) {
14101412
case STATUSTYPE_INFO:

drivers/md/dm.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,7 +1020,8 @@ int dm_set_target_max_io_len(struct dm_target *ti, sector_t len)
10201020
EXPORT_SYMBOL_GPL(dm_set_target_max_io_len);
10211021

10221022
static struct dm_target *dm_dax_get_live_target(struct mapped_device *md,
1023-
sector_t sector, int *srcu_idx)
1023+
sector_t sector, int *srcu_idx)
1024+
__acquires(md->io_barrier)
10241025
{
10251026
struct dm_table *map;
10261027
struct dm_target *ti;
@@ -1037,7 +1038,7 @@ static struct dm_target *dm_dax_get_live_target(struct mapped_device *md,
10371038
}
10381039

10391040
static long dm_dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff,
1040-
long nr_pages, void **kaddr, pfn_t *pfn)
1041+
long nr_pages, void **kaddr, pfn_t *pfn)
10411042
{
10421043
struct mapped_device *md = dax_get_private(dax_dev);
10431044
sector_t sector = pgoff * PAGE_SECTORS;
@@ -1065,7 +1066,7 @@ static long dm_dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff,
10651066
}
10661067

10671068
static size_t dm_dax_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff,
1068-
void *addr, size_t bytes, struct iov_iter *i)
1069+
void *addr, size_t bytes, struct iov_iter *i)
10691070
{
10701071
struct mapped_device *md = dax_get_private(dax_dev);
10711072
sector_t sector = pgoff * PAGE_SECTORS;

0 commit comments

Comments
 (0)