block_t f2fs_start_bidx_of_node(unsigned int node_ofs, struct inode *inode);
 int f2fs_gc(struct f2fs_sb_info *sbi, struct f2fs_gc_control *gc_control);
 void f2fs_build_gc_manager(struct f2fs_sb_info *sbi);
-int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count);
+int f2fs_resize_fs(struct file *filp, __u64 block_count);
 int __init f2fs_create_garbage_collection_cache(void);
 void f2fs_destroy_garbage_collection_cache(void);
 /* victim selection function for cleaning and SSR */
 
                           sizeof(block_count)))
                return -EFAULT;
 
-       return f2fs_resize_fs(sbi, block_count);
+       return f2fs_resize_fs(filp, block_count);
 }
 
 static int f2fs_ioc_enable_verity(struct file *filp, unsigned long arg)
 
        }
 }
 
-int f2fs_resize_fs(struct f2fs_sb_info *sbi, __u64 block_count)
+int f2fs_resize_fs(struct file *filp, __u64 block_count)
 {
+       struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(filp));
        __u64 old_block_count, shrunk_blocks;
        struct cp_control cpc = { CP_RESIZE, 0, 0, 0 };
        unsigned int secs;
                return -EINVAL;
        }
 
+       err = mnt_want_write_file(filp);
+       if (err)
+               return err;
+
        shrunk_blocks = old_block_count - block_count;
        secs = div_u64(shrunk_blocks, BLKS_PER_SEC(sbi));
 
        /* stop other GC */
-       if (!f2fs_down_write_trylock(&sbi->gc_lock))
-               return -EAGAIN;
+       if (!f2fs_down_write_trylock(&sbi->gc_lock)) {
+               err = -EAGAIN;
+               goto out_drop_write;
+       }
 
        /* stop CP to protect MAIN_SEC in free_segment_range */
        f2fs_lock_op(sbi);
 out_unlock:
        f2fs_unlock_op(sbi);
        f2fs_up_write(&sbi->gc_lock);
+out_drop_write:
+       mnt_drop_write_file(filp);
        if (err)
                return err;
 
        freeze_super(sbi->sb);
+
+       if (f2fs_readonly(sbi->sb)) {
+               thaw_super(sbi->sb);
+               return -EROFS;
+       }
+
        f2fs_down_write(&sbi->gc_lock);
        f2fs_down_write(&sbi->cp_global_sem);