tmpfs: Expose filesystem features via sysfs

Expose filesystem features through sysfs, so userspace can query if
tmpfs support casefold.

This follows the same setup as defined by ext4 and f2fs to expose
casefold support to userspace.

Signed-off-by: André Almeida <andrealmeid@igalia.com>
Link: https://lore.kernel.org/r/20241021-tonyk-tmpfs-v8-8-f443d5814194@igalia.com
Reviewed-by: Gabriel Krisman Bertazi <krisman@suse.de>
Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
André Almeida 2024-10-21 13:37:24 -03:00 committed by Christian Brauner
parent 5cd9aecbc7
commit 5132f08bd3
No known key found for this signature in database
GPG Key ID: 91C61BC06578DCA2

View File

@ -5546,3 +5546,40 @@ struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
return page;
}
EXPORT_SYMBOL_GPL(shmem_read_mapping_page_gfp);
#if defined(CONFIG_SYSFS) && defined(CONFIG_TMPFS)
#if IS_ENABLED(CONFIG_UNICODE)
static DEVICE_STRING_ATTR_RO(casefold, 0444, "supported");
#endif
static struct attribute *tmpfs_attributes[] = {
#if IS_ENABLED(CONFIG_UNICODE)
&dev_attr_casefold.attr.attr,
#endif
NULL
};
static const struct attribute_group tmpfs_attribute_group = {
.attrs = tmpfs_attributes,
.name = "features"
};
static struct kobject *tmpfs_kobj;
static int __init tmpfs_sysfs_init(void)
{
int ret;
tmpfs_kobj = kobject_create_and_add("tmpfs", fs_kobj);
if (!tmpfs_kobj)
return -ENOMEM;
ret = sysfs_create_group(tmpfs_kobj, &tmpfs_attribute_group);
if (ret)
kobject_put(tmpfs_kobj);
return ret;
}
fs_initcall(tmpfs_sysfs_init);
#endif /* CONFIG_SYSFS && CONFIG_TMPFS */