dm-ebs: fix prefetch-vs-suspend race
commit 9c565428788fb9b49066f94ab7b10efc686a0a4c upstream. There's a possible race condition in dm-ebs - dm bufio prefetch may be in progress while the device is suspended. Fix this by calling dm_bufio_client_reset in the postsuspend hook. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
08deafddfc
commit
a1a4fdc33d
@@ -390,6 +390,12 @@ static int ebs_map(struct dm_target *ti, struct bio *bio)
|
|||||||
return DM_MAPIO_REMAPPED;
|
return DM_MAPIO_REMAPPED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ebs_postsuspend(struct dm_target *ti)
|
||||||
|
{
|
||||||
|
struct ebs_c *ec = ti->private;
|
||||||
|
dm_bufio_client_reset(ec->bufio);
|
||||||
|
}
|
||||||
|
|
||||||
static void ebs_status(struct dm_target *ti, status_type_t type,
|
static void ebs_status(struct dm_target *ti, status_type_t type,
|
||||||
unsigned int status_flags, char *result, unsigned int maxlen)
|
unsigned int status_flags, char *result, unsigned int maxlen)
|
||||||
{
|
{
|
||||||
@@ -447,6 +453,7 @@ static struct target_type ebs_target = {
|
|||||||
.ctr = ebs_ctr,
|
.ctr = ebs_ctr,
|
||||||
.dtr = ebs_dtr,
|
.dtr = ebs_dtr,
|
||||||
.map = ebs_map,
|
.map = ebs_map,
|
||||||
|
.postsuspend = ebs_postsuspend,
|
||||||
.status = ebs_status,
|
.status = ebs_status,
|
||||||
.io_hints = ebs_io_hints,
|
.io_hints = ebs_io_hints,
|
||||||
.prepare_ioctl = ebs_prepare_ioctl,
|
.prepare_ioctl = ebs_prepare_ioctl,
|
||||||
|
|||||||
Reference in New Issue
Block a user