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>
        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;
 
 
        rzs->disksize = 0;
        rzs->memlimit = 0;
-
-       /* Back to uninitialized state */
-       rzs->init_done = 0;
 }
 
 static int ramzswap_ioctl_init_device(struct ramzswap *rzs)
                        ret = -EBUSY;
                        goto out;
                }
+
+               /* Make sure all pending I/O is finished */
+               if (bdev)
+                       fsync_bdev(bdev);
+
                ret = ramzswap_ioctl_reset_device(rzs);
                break;