From: Seung-Woo Kim Date: Fri, 31 Jul 2020 06:19:08 +0000 (+0900) Subject: Revert "brd: remove support for BLKFLSBUF" X-Git-Tag: accepted/tizen/unified/20200806.062547^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f92b4570ea191cd1a53d375a883c8998849d70cb;p=platform%2Fkernel%2Flinux-rpi.git Revert "brd: remove support for BLKFLSBUF" This reverts commit ff26956875c2f05e12ecec9938411a2c7dfc767d. To free ramdisk memory, BLKFLSBUF support is required. Change-Id: Ib363fdcb65a21914c8baa2099e4b1ce6242428e2 Signed-off-by: Seung-Woo Kim --- diff --git a/drivers/block/brd.c b/drivers/block/brd.c index 502f72d..0b4dced 100644 --- a/drivers/block/brd.c +++ b/drivers/block/brd.c @@ -374,9 +374,44 @@ static int brd_rw_page(struct block_device *bdev, sector_t sector, return err; } +static int brd_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) +{ + int error; + struct brd_device *brd = bdev->bd_disk->private_data; + + if (cmd != BLKFLSBUF) + return -ENOTTY; + + /* + * ram device BLKFLSBUF has special semantics, we want to actually + * release and destroy the ramdisk data. + */ + mutex_lock(&brd_mutex); + mutex_lock(&bdev->bd_mutex); + error = -EBUSY; + if (bdev->bd_openers <= 1) { + /* + * Kill the cache first, so it isn't written back to the + * device. + * + * Another thread might instantiate more buffercache here, + * but there is not much we can do to close that race. + */ + kill_bdev(bdev); + brd_free_pages(brd); + error = 0; + } + mutex_unlock(&bdev->bd_mutex); + mutex_unlock(&brd_mutex); + + return error; +} + static const struct block_device_operations brd_fops = { .owner = THIS_MODULE, .rw_page = brd_rw_page, + .ioctl = brd_ioctl, }; /*