[PATCH] erofs: add sysfs node to drop all compression-related caches
Chunhai Guo
guochunhai at vivo.com
Tue Nov 12 20:14:03 AEDT 2024
Add a sysfs node to drop all compression-related caches, including
pclusters and attached compressed pages.
Signed-off-by: Chunhai Guo <guochunhai at vivo.com>
---
Documentation/ABI/testing/sysfs-fs-erofs | 7 +++++++
fs/erofs/sysfs.c | 11 +++++++++++
2 files changed, 18 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-fs-erofs b/Documentation/ABI/testing/sysfs-fs-erofs
index 284224d1b56f..b66a3f6d3fdf 100644
--- a/Documentation/ABI/testing/sysfs-fs-erofs
+++ b/Documentation/ABI/testing/sysfs-fs-erofs
@@ -16,3 +16,10 @@ Description: Control strategy of sync decompression:
readahead on atomic contexts only.
- 1 (force on): enable for readpage and readahead.
- 2 (force off): disable for all situations.
+
+What: /sys/fs/erofs/<disk>/drop_caches
+Date: November 2024
+Contact: "Guo Chunhai" <guochunhai at vivo.com>
+Description: Writing 1 to this will cause the erofs to drop all
+ compression-related caches, including pclusters and attached
+ compressed pages. Any other value is invalid.
diff --git a/fs/erofs/sysfs.c b/fs/erofs/sysfs.c
index 63cffd0fd261..f068f01437d5 100644
--- a/fs/erofs/sysfs.c
+++ b/fs/erofs/sysfs.c
@@ -10,6 +10,7 @@
enum {
attr_feature,
+ attr_drop_caches,
attr_pointer_ui,
attr_pointer_bool,
};
@@ -57,11 +58,13 @@ static struct erofs_attr erofs_attr_##_name = { \
#ifdef CONFIG_EROFS_FS_ZIP
EROFS_ATTR_RW_UI(sync_decompress, erofs_mount_opts);
+EROFS_ATTR_FUNC(drop_caches, 0200);
#endif
static struct attribute *erofs_attrs[] = {
#ifdef CONFIG_EROFS_FS_ZIP
ATTR_LIST(sync_decompress),
+ ATTR_LIST(drop_caches),
#endif
NULL,
};
@@ -163,6 +166,14 @@ static ssize_t erofs_attr_store(struct kobject *kobj, struct attribute *attr,
return -EINVAL;
*(bool *)ptr = !!t;
return len;
+ case attr_drop_caches:
+ ret = kstrtoul(skip_spaces(buf), 0, &t);
+ if (ret)
+ return ret;
+ if (t != 1)
+ return -EINVAL;
+ z_erofs_shrink_scan(sbi, ~0UL);
+ return len;
}
return 0;
}
--
2.34.1
More information about the Linux-erofs
mailing list