Skip to content

Commit

Permalink
Merge tag 'dm-3.8-fixes-2' of git://git.kernel.org/pub/scm/linux/kern…
Browse files Browse the repository at this point in the history
…el/git/agk/linux-dm

Pull more device-mapper fixes from Alasdair G Kergon:
 "A fix for stacked dm thin devices and a fix for the new dm WRITE SAME
  support."

* tag 'dm-3.8-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-dm:
  dm: fix write same requests counting
  dm thin: fix queue limits stacking
  • Loading branch information
torvalds committed Feb 1, 2013
2 parents cf5425b + fe7af2d commit cc6c954
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 14 deletions.
13 changes: 1 addition & 12 deletions drivers/md/dm-thin.c
Original file line number Diff line number Diff line change
Expand Up @@ -2746,19 +2746,9 @@ static int thin_iterate_devices(struct dm_target *ti,
return 0;
}

/*
* A thin device always inherits its queue limits from its pool.
*/
static void thin_io_hints(struct dm_target *ti, struct queue_limits *limits)
{
struct thin_c *tc = ti->private;

*limits = bdev_get_queue(tc->pool_dev->bdev)->limits;
}

static struct target_type thin_target = {
.name = "thin",
.version = {1, 6, 0},
.version = {1, 7, 0},
.module = THIS_MODULE,
.ctr = thin_ctr,
.dtr = thin_dtr,
Expand All @@ -2767,7 +2757,6 @@ static struct target_type thin_target = {
.postsuspend = thin_postsuspend,
.status = thin_status,
.iterate_devices = thin_iterate_devices,
.io_hints = thin_io_hints,
};

/*----------------------------------------------------------------*/
Expand Down
6 changes: 4 additions & 2 deletions drivers/md/dm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1188,6 +1188,7 @@ static int __clone_and_map_changing_extent_only(struct clone_info *ci,
{
struct dm_target *ti;
sector_t len;
unsigned num_requests;

do {
ti = dm_table_find_target(ci->map, ci->sector);
Expand All @@ -1200,15 +1201,16 @@ static int __clone_and_map_changing_extent_only(struct clone_info *ci,
* reconfiguration might also have changed that since the
* check was performed.
*/
if (!get_num_requests || !get_num_requests(ti))
num_requests = get_num_requests ? get_num_requests(ti) : 0;
if (!num_requests)
return -EOPNOTSUPP;

if (is_split_required && !is_split_required(ti))
len = min(ci->sector_count, max_io_len_target_boundary(ci->sector, ti));
else
len = min(ci->sector_count, max_io_len(ci->sector, ti));

__issue_target_requests(ci, ti, ti->num_discard_requests, len);
__issue_target_requests(ci, ti, num_requests, len);

ci->sector += len;
} while (ci->sector_count -= len);
Expand Down

0 comments on commit cc6c954

Please sign in to comment.