A fix to the thin provisioning userspace interface.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJPtuPVAAoJEK2W1qbAHj1n3q8QAJaM5OkZ3DqAoC8XznVBKO1B Fr5d0mui4irC9ce+End/MCoPN2EcwQ5bzyh6cQXqxfUOTR5RjYMCn97uID0I35Cc AEbDaUMSgKkQkKaDeVpM54SaHBhtLP95gIZmo774etmryzn3HyWiiYOsvswnAw8w /zIZwPkRPoskoGt1Hk/o490qYGwstJ6JErJndyuVEdHNWF6xiL9cFAi81oo1UF2J lysWmBBaisRcAD3kzbTBIQ3ntMUPSbvM7ZLUaJXEbXwg+XUBRkBfQLXJk3wA5q8R QacTz+kvAXG6B+DipFOYyDTkxR+s5kjRserlBwh2gHP9u3pHV9Nf7eWR5BWsYPbV tLH8Q/0Ctl31MsrxMl7cO05Kj2sMI/lOg/yGQT3Qx6k0HVtbU1gaR6J21RmpElGC TANXpBhV5MRpfZFvwnHOSACnE3hMm1i4XJstTejIfPiNtq8aeL0eSB3Q+ZJTEZzm ZCk23ufmaqC75RrYt1P3F5QpxsjD+moMmZT5hZSkGOd0YqvwAMfv9O/5FesQ748R tc5zPxS/dTONseGkBaAPeHpcX4WP0wm0fKJcPb0Y/4kx0AkiVQjbUrNNcnVxo5Pw pF1MbxY14xZxteZ/UHWmPvyCuJ8NICTtswxj9taquSDb87pliV2xajrK4Mnmed7u sLxA0ANWBdJghss/r/g6 =03zw -----END PGP SIGNATURE----- Merge tag 'dm-3.4-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-dm Pull a dm fix from Alasdair G Kergon: "A fix to the thin provisioning userspace interface." * tag 'dm-3.4-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-dm: dm thin: fix table output when pool target disables discard passdown internally
This commit is contained in:
commit
b1dab2f040
|
@ -1632,6 +1632,21 @@ static int bind_control_target(struct pool *pool, struct dm_target *ti)
|
|||
pool->low_water_blocks = pt->low_water_blocks;
|
||||
pool->pf = pt->pf;
|
||||
|
||||
/*
|
||||
* If discard_passdown was enabled verify that the data device
|
||||
* supports discards. Disable discard_passdown if not; otherwise
|
||||
* -EOPNOTSUPP will be returned.
|
||||
*/
|
||||
if (pt->pf.discard_passdown) {
|
||||
struct request_queue *q = bdev_get_queue(pt->data_dev->bdev);
|
||||
if (!q || !blk_queue_discard(q)) {
|
||||
char buf[BDEVNAME_SIZE];
|
||||
DMWARN("Discard unsupported by data device (%s): Disabling discard passdown.",
|
||||
bdevname(pt->data_dev->bdev, buf));
|
||||
pool->pf.discard_passdown = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1988,19 +2003,6 @@ static int pool_ctr(struct dm_target *ti, unsigned argc, char **argv)
|
|||
goto out_flags_changed;
|
||||
}
|
||||
|
||||
/*
|
||||
* If discard_passdown was enabled verify that the data device
|
||||
* supports discards. Disable discard_passdown if not; otherwise
|
||||
* -EOPNOTSUPP will be returned.
|
||||
*/
|
||||
if (pf.discard_passdown) {
|
||||
struct request_queue *q = bdev_get_queue(data_dev->bdev);
|
||||
if (!q || !blk_queue_discard(q)) {
|
||||
DMWARN("Discard unsupported by data device: Disabling discard passdown.");
|
||||
pf.discard_passdown = 0;
|
||||
}
|
||||
}
|
||||
|
||||
pt->pool = pool;
|
||||
pt->ti = ti;
|
||||
pt->metadata_dev = metadata_dev;
|
||||
|
@ -2385,7 +2387,7 @@ static int pool_status(struct dm_target *ti, status_type_t type,
|
|||
(unsigned long long)pt->low_water_blocks);
|
||||
|
||||
count = !pool->pf.zero_new_blocks + !pool->pf.discard_enabled +
|
||||
!pool->pf.discard_passdown;
|
||||
!pt->pf.discard_passdown;
|
||||
DMEMIT("%u ", count);
|
||||
|
||||
if (!pool->pf.zero_new_blocks)
|
||||
|
@ -2394,7 +2396,7 @@ static int pool_status(struct dm_target *ti, status_type_t type,
|
|||
if (!pool->pf.discard_enabled)
|
||||
DMEMIT("ignore_discard ");
|
||||
|
||||
if (!pool->pf.discard_passdown)
|
||||
if (!pt->pf.discard_passdown)
|
||||
DMEMIT("no_discard_passdown ");
|
||||
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue