On Tue 22-09-26 20:50:13, Julian Sun wrote:
Add bdev_flush_by_dev() to submit page-cache writeback for a device
identified by dev_t without requiring callers to hold a persistent
device reference.
A subsequent patch will use this helper to flush foreign bdev mappings.
Signed-off-by: Julian Sun <redacted>
Looks good. Feel free to add:
Reviewed-by: Jan Kara <jack@suse.cz>
Honza
quoted hunk ↗ jump to hunk
---
block/bdev.c | 18 ++++++++++++++++++
include/linux/blkdev.h | 4 ++++
2 files changed, 22 insertions(+)
diff --git a/block/bdev.c b/block/bdev.c
index cd8323083740..c7c192af6262 100644
--- a/block/bdev.c
+++ b/block/bdev.c
@@ -264,6 +264,24 @@ int sync_blockdev_nowait(struct block_device *bdev)
}
EXPORT_SYMBOL_GPL(sync_blockdev_nowait);
+/**
+ * bdev_flush_by_dev - attempt writeback of a block device's page cache
+ * @dev: target block device number
+ *
+ * May sleep while submitting writeback; does not wait for I/O completion.
+ */
+void bdev_flush_by_dev(dev_t dev)
+{
+ struct block_device *bdev;
+
+ bdev = blkdev_get_no_open(dev, false);
+ if (!bdev)
+ return;
+
+ sync_blockdev_nowait(bdev);
+ blkdev_put_no_open(bdev);
+}
+
/*
* Write out and wait upon all the dirty data associated with a block
* device via its mapping. Does not take the superblock lock.diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 4f7905c3412b..27afe3ff6fb5 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1710,6 +1710,7 @@ void invalidate_bdev(struct block_device *bdev);
int sync_blockdev(struct block_device *bdev);
int sync_blockdev_range(struct block_device *bdev, loff_t lstart, loff_t lend);
int sync_blockdev_nowait(struct block_device *bdev);
+void bdev_flush_by_dev(dev_t dev);
void sync_bdevs(bool wait);
void bdev_statx(const struct path *path, struct kstat *stat, u32 request_mask);
void printk_all_partitions(void);
@@ -1726,6 +1727,9 @@ static inline int sync_blockdev_nowait(struct block_device *bdev)
{
return 0;
}
+static inline void bdev_flush_by_dev(dev_t dev)
+{
+}
static inline void sync_bdevs(bool wait)
{
}--
2.39.5
--
Jan Kara [off-list ref]
SUSE Labs, CR