struct btrfs_root *root, const char *function,
                               unsigned int line, int errno);
 
+#define btrfs_set_fs_incompat(__fs_info, opt) \
+       __btrfs_set_fs_incompat((__fs_info), BTRFS_FEATURE_INCOMPAT_##opt)
+
+static inline void __btrfs_set_fs_incompat(struct btrfs_fs_info *fs_info,
+                                          u64 flag)
+{
+       struct btrfs_super_block *disk_super;
+       u64 features;
+
+       disk_super = fs_info->super_copy;
+       features = btrfs_super_incompat_flags(disk_super);
+       if (!(features & flag)) {
+               features |= flag;
+               btrfs_set_super_incompat_flags(disk_super, features);
+       }
+}
+
 #define btrfs_abort_transaction(trans, root, errno)            \
 do {                                                           \
        __btrfs_abort_transaction(trans, root, __func__,        \
 
                      u64 newer_than, unsigned long max_to_defrag)
 {
        struct btrfs_root *root = BTRFS_I(inode)->root;
-       struct btrfs_super_block *disk_super;
        struct file_ra_state *ra = NULL;
        unsigned long last_index;
        u64 isize = i_size_read(inode);
-       u64 features;
        u64 last_len = 0;
        u64 skip = 0;
        u64 defrag_end = 0;
                mutex_unlock(&inode->i_mutex);
        }
 
-       disk_super = root->fs_info->super_copy;
-       features = btrfs_super_incompat_flags(disk_super);
        if (range->compress_type == BTRFS_COMPRESS_LZO) {
-               features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO;
-               btrfs_set_super_incompat_flags(disk_super, features);
+               btrfs_set_fs_incompat(root->fs_info, COMPRESS_LZO);
        }
 
        ret = defrag_count;
        struct btrfs_path *path;
        struct btrfs_key location;
        struct btrfs_disk_key disk_key;
-       struct btrfs_super_block *disk_super;
-       u64 features;
        u64 objectid = 0;
        u64 dir_id;
 
        btrfs_mark_buffer_dirty(path->nodes[0]);
        btrfs_free_path(path);
 
-       disk_super = root->fs_info->super_copy;
-       features = btrfs_super_incompat_flags(disk_super);
-       if (!(features & BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL)) {
-               features |= BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL;
-               btrfs_set_super_incompat_flags(disk_super, features);
-       }
+       btrfs_set_fs_incompat(root->fs_info, DEFAULT_SUBVOL);
        btrfs_end_transaction(trans, root);
 
        return 0;
 
                                compress_type = "lzo";
                                info->compress_type = BTRFS_COMPRESS_LZO;
                                btrfs_set_opt(info->mount_opt, COMPRESS);
+                               btrfs_set_fs_incompat(info, COMPRESS_LZO);
                        } else if (strncmp(args[0].from, "no", 2) == 0) {
                                compress_type = "no";
                                info->compress_type = BTRFS_COMPRESS_NONE;