From: Xie Yongji <xieyongji@bytedance.com>
Date: Wed, 22 Sep 2021 20:37:08 +0800
Subject: [PATCH] block: Add invalidate_disk() helper to invalidate the gendisk
Git-commit: f059a1d2e23a165bf86e33673c6a7535a08c6341
Patch-mainline: v5.16-rc1
References: jsc#PED-1183
To hide internal implementation and simplify some driver code,
this adds a helper to invalidate the gendisk. It will clean the
gendisk's associated buffer/page caches and reset its internal
states.
Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20210922123711.187-2-xieyongji@bytedance.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Acked-by: Hannes Reinecke <hare@suse.com>
---
block/genhd.c | 20 ++++++++++++++++++++
include/linux/genhd.h | 2 ++
2 files changed, 22 insertions(+)
diff --git a/block/genhd.c b/block/genhd.c
index 80943c123c3e..64f83c4aee99 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -624,6 +624,26 @@ void del_gendisk(struct gendisk *disk)
}
EXPORT_SYMBOL(del_gendisk);
+/**
+ * invalidate_disk - invalidate the disk
+ * @disk: the struct gendisk to invalidate
+ *
+ * A helper to invalidates the disk. It will clean the disk's associated
+ * buffer/page caches and reset its internal states so that the disk
+ * can be reused by the drivers.
+ *
+ * Context: can sleep
+ */
+void invalidate_disk(struct gendisk *disk)
+{
+ struct block_device *bdev = disk->part0;
+
+ invalidate_bdev(bdev);
+ bdev->bd_inode->i_mapping->wb_err = 0;
+ set_capacity(disk, 0);
+}
+EXPORT_SYMBOL(invalidate_disk);
+
/* sysfs access to bad-blocks list. */
static ssize_t disk_badblocks_show(struct device *dev,
struct device_attribute *attr,
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index c70bc5fce4db..13f313ab99e7 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -213,6 +213,8 @@ static inline int add_disk(struct gendisk *disk)
}
extern void del_gendisk(struct gendisk *gp);
+void invalidate_disk(struct gendisk *disk);
+
void set_disk_ro(struct gendisk *disk, bool read_only);
static inline int get_disk_ro(struct gendisk *disk)
--
2.35.3