if (type != DATA && type != NODE)
                        goto submit_io;
 
-               if (f2fs_sb_mounted_blkzoned(sbi->sb) && current->plug)
+               if (f2fs_sb_has_blkzoned(sbi->sb) && current->plug)
                        blk_finish_plug(current->plug);
 
                start = bio->bi_iter.bi_size >> F2FS_BLKSIZE_BITS;
 
        return bio->bi_private != NULL;
 }
 
-static inline int f2fs_sb_has_crypto(struct super_block *sb)
-{
-       return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_ENCRYPT);
-}
-
-static inline int f2fs_sb_mounted_blkzoned(struct super_block *sb)
-{
-       return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_BLKZONED);
+#define F2FS_FEATURE_FUNCS(name, flagname) \
+static inline int f2fs_sb_has_##name(struct super_block *sb) \
+{ \
+       return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_##flagname); \
 }
 
-static inline int f2fs_sb_has_extra_attr(struct super_block *sb)
-{
-       return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_EXTRA_ATTR);
-}
-
-static inline int f2fs_sb_has_project_quota(struct super_block *sb)
-{
-       return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_PRJQUOTA);
-}
-
-static inline int f2fs_sb_has_inode_chksum(struct super_block *sb)
-{
-       return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_INODE_CHKSUM);
-}
-
-static inline int f2fs_sb_has_flexible_inline_xattr(struct super_block *sb)
-{
-       return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_FLEXIBLE_INLINE_XATTR);
-}
-
-static inline int f2fs_sb_has_quota_ino(struct super_block *sb)
-{
-       return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_QUOTA_INO);
-}
-
-static inline int f2fs_sb_has_inode_crtime(struct super_block *sb)
-{
-       return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_INODE_CRTIME);
-}
+F2FS_FEATURE_FUNCS(encrypt, ENCRYPT);
+F2FS_FEATURE_FUNCS(blkzoned, BLKZONED);
+F2FS_FEATURE_FUNCS(extra_attr, EXTRA_ATTR);
+F2FS_FEATURE_FUNCS(project_quota, PRJQUOTA);
+F2FS_FEATURE_FUNCS(inode_chksum, INODE_CHKSUM);
+F2FS_FEATURE_FUNCS(flexible_inline_xattr, FLEXIBLE_INLINE_XATTR);
+F2FS_FEATURE_FUNCS(quota_ino, QUOTA_INO);
+F2FS_FEATURE_FUNCS(inode_crtime, INODE_CRTIME);
 
 #ifdef CONFIG_BLK_DEV_ZONED
 static inline int get_blkz_type(struct f2fs_sb_info *sbi,
 {
        struct request_queue *q = bdev_get_queue(sbi->sb->s_bdev);
 
-       return blk_queue_discard(q) || f2fs_sb_mounted_blkzoned(sbi->sb);
+       return blk_queue_discard(q) || f2fs_sb_has_blkzoned(sbi->sb);
 }
 
 static inline void set_opt_mode(struct f2fs_sb_info *sbi, unsigned int mt)
 
 {
        struct inode *inode = file_inode(filp);
 
-       if (!f2fs_sb_has_crypto(inode->i_sb))
+       if (!f2fs_sb_has_encrypt(inode->i_sb))
                return -EOPNOTSUPP;
 
        f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
 
 static int f2fs_ioc_get_encryption_policy(struct file *filp, unsigned long arg)
 {
-       if (!f2fs_sb_has_crypto(file_inode(filp)->i_sb))
+       if (!f2fs_sb_has_encrypt(file_inode(filp)->i_sb))
                return -EOPNOTSUPP;
        return fscrypt_ioctl_get_policy(filp, (void __user *)arg);
 }
        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
        int err;
 
-       if (!f2fs_sb_has_crypto(inode->i_sb))
+       if (!f2fs_sb_has_encrypt(inode->i_sb))
                return -EOPNOTSUPP;
 
        if (uuid_is_nonzero(sbi->raw_super->encrypt_pw_salt))
 
                struct block_device *bdev, block_t blkstart, block_t blklen)
 {
 #ifdef CONFIG_BLK_DEV_ZONED
-       if (f2fs_sb_mounted_blkzoned(sbi->sb) &&
+       if (f2fs_sb_has_blkzoned(sbi->sb) &&
                                bdev_zoned_model(bdev) != BLK_ZONED_NONE)
                return __f2fs_issue_discard_zone(sbi, bdev, blkstart, blklen);
 #endif
                                        sbi->blocks_per_seg, cur_pos);
                        len = next_pos - cur_pos;
 
-                       if (f2fs_sb_mounted_blkzoned(sbi->sb) ||
+                       if (f2fs_sb_has_blkzoned(sbi->sb) ||
                            (force && len < cpc->trim_minlen))
                                goto skip;
 
 
                        q = bdev_get_queue(sb->s_bdev);
                        if (blk_queue_discard(q)) {
                                set_opt(sbi, DISCARD);
-                       } else if (!f2fs_sb_mounted_blkzoned(sb)) {
+                       } else if (!f2fs_sb_has_blkzoned(sb)) {
                                f2fs_msg(sb, KERN_WARNING,
                                        "mounting with \"discard\" option, but "
                                        "the device does not support discard");
                        }
                        break;
                case Opt_nodiscard:
-                       if (f2fs_sb_mounted_blkzoned(sb)) {
+                       if (f2fs_sb_has_blkzoned(sb)) {
                                f2fs_msg(sb, KERN_WARNING,
                                        "discard is required for zoned block devices");
                                return -EINVAL;
                                return -ENOMEM;
                        if (strlen(name) == 8 &&
                                        !strncmp(name, "adaptive", 8)) {
-                               if (f2fs_sb_mounted_blkzoned(sb)) {
+                               if (f2fs_sb_has_blkzoned(sb)) {
                                        f2fs_msg(sb, KERN_WARNING,
                                                 "adaptive mode is not allowed with "
                                                 "zoned block device feature");
        set_opt(sbi, NOHEAP);
        sbi->sb->s_flags |= SB_LAZYTIME;
        set_opt(sbi, FLUSH_MERGE);
-       if (f2fs_sb_mounted_blkzoned(sbi->sb)) {
+       if (f2fs_sb_has_blkzoned(sbi->sb)) {
                set_opt_mode(sbi, F2FS_MOUNT_LFS);
                set_opt(sbi, DISCARD);
        } else {
        unsigned int n = 0;
        int err = -EIO;
 
-       if (!f2fs_sb_mounted_blkzoned(sbi->sb))
+       if (!f2fs_sb_has_blkzoned(sbi->sb))
                return 0;
 
        if (sbi->blocks_per_blkz && sbi->blocks_per_blkz !=
 
 #ifdef CONFIG_BLK_DEV_ZONED
                if (bdev_zoned_model(FDEV(i).bdev) == BLK_ZONED_HM &&
-                               !f2fs_sb_mounted_blkzoned(sbi->sb)) {
+                               !f2fs_sb_has_blkzoned(sbi->sb)) {
                        f2fs_msg(sbi->sb, KERN_ERR,
                                "Zoned block device feature not enabled\n");
                        return -EINVAL;
         * devices, but mandatory for host-managed zoned block devices.
         */
 #ifndef CONFIG_BLK_DEV_ZONED
-       if (f2fs_sb_mounted_blkzoned(sb)) {
+       if (f2fs_sb_has_blkzoned(sb)) {
                f2fs_msg(sb, KERN_ERR,
                         "Zoned block device support is not enabled\n");
                err = -EOPNOTSUPP;
 
        if (!sb->s_bdev->bd_part)
                return snprintf(buf, PAGE_SIZE, "0\n");
 
-       if (f2fs_sb_has_crypto(sb))
+       if (f2fs_sb_has_encrypt(sb))
                len += snprintf(buf, PAGE_SIZE - len, "%s",
                                                "encryption");
-       if (f2fs_sb_mounted_blkzoned(sb))
+       if (f2fs_sb_has_blkzoned(sb))
                len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
                                len ? ", " : "", "blkzoned");
        if (f2fs_sb_has_extra_attr(sb))