summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNitin Gupta <ngupta@vflare.org>2010-01-28 15:43:38 (GMT)
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-04 00:42:53 (GMT)
commit7eef7533909f3ea50e8b375777242f778e8da11e (patch)
tree5cc40fada4f8c041bf92895e8d4a82aac4604880
parent6a90772886d5d6812f9b2775d3caa0dc002754e0 (diff)
downloadlinux-7eef7533909f3ea50e8b375777242f778e8da11e.tar.xz
Staging: ramzswap: Flush block device before reset
Make sure we flush block device before freeing all metadata during reset ioctl. Signed-off-by: Nitin Gupta <ngupta@vflar.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/staging/ramzswap/ramzswap_drv.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/staging/ramzswap/ramzswap_drv.c b/drivers/staging/ramzswap/ramzswap_drv.c
index 05273c0..3567ee3 100644
--- a/drivers/staging/ramzswap/ramzswap_drv.c
+++ b/drivers/staging/ramzswap/ramzswap_drv.c
@@ -1000,6 +1000,9 @@ static void reset_device(struct ramzswap *rzs)
unsigned entries_per_page;
unsigned long num_table_pages, entry = 0;
+ /* Do not accept any new I/O request */
+ rzs->init_done = 0;
+
if (rzs->backing_swap && !rzs->num_extents)
is_backing_blkdev = 1;
@@ -1073,9 +1076,6 @@ static void reset_device(struct ramzswap *rzs)
rzs->disksize = 0;
rzs->memlimit = 0;
-
- /* Back to uninitialized state */
- rzs->init_done = 0;
}
static int ramzswap_ioctl_init_device(struct ramzswap *rzs)
@@ -1276,6 +1276,11 @@ static int ramzswap_ioctl(struct block_device *bdev, fmode_t mode,
ret = -EBUSY;
goto out;
}
+
+ /* Make sure all pending I/O is finished */
+ if (bdev)
+ fsync_bdev(bdev);
+
ret = ramzswap_ioctl_reset_device(rzs);
break;