[PATCH] erofs: fix erofs_module_init & exit
Chao Yu
chao at kernel.org
Fri Jul 6 02:19:19 AEST 2018
Hi Xiang,
On 2018/7/5 13:03, Gao Xiang wrote:
> This patch adds missing parts and EROFS ondisk
> layout check as well.
>
> Signed-off-by: Gao Xiang <gaoxiang25 at huawei.com>
> ---
> fs/erofs/erofs_fs.h | 13 +++++++++++++
> fs/erofs/super.c | 28 +++++++++++++++++++++-------
> 2 files changed, 34 insertions(+), 7 deletions(-)
>
> diff --git a/fs/erofs/erofs_fs.h b/fs/erofs/erofs_fs.h
> index ed943d4..0dbf08d 100644
> --- a/fs/erofs/erofs_fs.h
> +++ b/fs/erofs/erofs_fs.h
> @@ -253,5 +253,18 @@ enum {
>
> #define EROFS_NAME_LEN 255
>
> +/* check the EROFS on-disk layout strictly at compile time */
> +static inline void erofs_check_ondisk_layout(void)
> +{
> + BUILD_BUG_ON(sizeof(struct erofs_super_block) != 128);
> + BUILD_BUG_ON(sizeof(struct erofs_inode_v1) != 32);
> + BUILD_BUG_ON(sizeof(struct erofs_inode_v2) != 64);
> + BUILD_BUG_ON(sizeof(struct erofs_xattr_ibody_header) != 12);
> + BUILD_BUG_ON(sizeof(struct erofs_xattr_entry) != 4);
> + BUILD_BUG_ON(sizeof(struct erofs_extent_header) != 16);
> + BUILD_BUG_ON(sizeof(struct erofs_decompressed_index_vle) != 8);
> + BUILD_BUG_ON(sizeof(struct erofs_dirent) != 12);
We'd better define some macros include above constants.
Other parts look good to me.
Thanks,
> +}
> +
> #endif
>
> diff --git a/fs/erofs/super.c b/fs/erofs/super.c
> index a1826b9..d104d88 100644
> --- a/fs/erofs/super.c
> +++ b/fs/erofs/super.c
> @@ -37,6 +37,12 @@ static int erofs_init_inode_cache(void)
> return erofs_inode_cachep != NULL ? 0 : -ENOMEM;
> }
>
> +static void erofs_exit_inode_cache(void)
> +{
> + BUG_ON(erofs_inode_cachep == NULL);
> + kmem_cache_destroy(erofs_inode_cachep);
> +}
> +
> static struct inode *alloc_inode(struct super_block *sb)
> {
> struct erofs_vnode *vi =
> @@ -398,22 +404,30 @@ int __init erofs_module_init(void)
> {
> int err;
>
> + erofs_check_ondisk_layout();
> infoln("Initializing erofs " EROFS_VERSION);
>
> err = erofs_init_inode_cache();
> - if (!err) {
> - err = register_filesystem(&erofs_fs_type);
> - if (!err) {
> - infoln("Successfully to initialize erofs");
> - return 0;
> - }
> - }
> + if (err)
> + goto icache_err;
> +
> + err = register_filesystem(&erofs_fs_type);
> + if (err)
> + goto fs_err;
> +
> + infoln("Successfully to initialize erofs");
> + return 0;
> +
> +fs_err:
> + erofs_exit_inode_cache();
> +icache_err:
> return err;
> }
>
> void __exit erofs_module_exit(void)
> {
> unregister_filesystem(&erofs_fs_type);
> + erofs_exit_inode_cache();
> infoln("Successfully finalize erofs");
> }
>
>
More information about the Linux-erofs
mailing list