fs: f2fs: insert space around that ':' and ', '
[linux-block.git] / fs / f2fs / file.c
index 6b94f19b3fa8d40a9e7da5151e19064ccca50d7d..74c3264425652426d3cc74b97443893d59bc1d62 100644 (file)
 #include "trace.h"
 #include <trace/events/f2fs.h>
 
-static int f2fs_filemap_fault(struct vm_fault *vmf)
+static vm_fault_t f2fs_filemap_fault(struct vm_fault *vmf)
 {
        struct inode *inode = file_inode(vmf->vma->vm_file);
-       int err;
+       vm_fault_t ret;
 
        down_read(&F2FS_I(inode)->i_mmap_sem);
-       err = filemap_fault(vmf);
+       ret = filemap_fault(vmf);
        up_read(&F2FS_I(inode)->i_mmap_sem);
 
-       return err;
+       return ret;
 }
 
-static int f2fs_vm_page_mkwrite(struct vm_fault *vmf)
+static vm_fault_t f2fs_vm_page_mkwrite(struct vm_fault *vmf)
 {
        struct page *page = vmf->page;
        struct inode *inode = file_inode(vmf->vma->vm_file);
@@ -95,7 +95,8 @@ static int f2fs_vm_page_mkwrite(struct vm_fault *vmf)
        /* page is wholly or partially inside EOF */
        if (((loff_t)(page->index + 1) << PAGE_SHIFT) >
                                                i_size_read(inode)) {
-               unsigned offset;
+               loff_t offset;
+
                offset = i_size_read(inode) & ~PAGE_MASK;
                zero_user_segment(page, offset, PAGE_SIZE);
        }
@@ -110,8 +111,8 @@ mapped:
        /* fill the page */
        f2fs_wait_on_page_writeback(page, DATA, false);
 
-       /* wait for GCed encrypted page writeback */
-       if (f2fs_encrypted_file(inode))
+       /* wait for GCed page writeback via META_MAPPING */
+       if (f2fs_post_read_required(inode))
                f2fs_wait_on_block_writeback(sbi, dn.data_blkaddr);
 
 out_sem:
@@ -157,17 +158,18 @@ static inline enum cp_reason_type need_do_checkpoint(struct inode *inode)
                cp_reason = CP_SB_NEED_CP;
        else if (file_wrong_pino(inode))
                cp_reason = CP_WRONG_PINO;
-       else if (!space_for_roll_forward(sbi))
+       else if (!f2fs_space_for_roll_forward(sbi))
                cp_reason = CP_NO_SPC_ROLL;
-       else if (!is_checkpointed_node(sbi, F2FS_I(inode)->i_pino))
+       else if (!f2fs_is_checkpointed_node(sbi, F2FS_I(inode)->i_pino))
                cp_reason = CP_NODE_NEED_CP;
        else if (test_opt(sbi, FASTBOOT))
                cp_reason = CP_FASTBOOT_MODE;
        else if (F2FS_OPTION(sbi).active_logs == 2)
                cp_reason = CP_SPEC_LOG_NUM;
        else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT &&
-               need_dentry_mark(sbi, inode->i_ino) &&
-               exist_written_data(sbi, F2FS_I(inode)->i_pino, TRANS_DIR_INO))
+               f2fs_need_dentry_mark(sbi, inode->i_ino) &&
+               f2fs_exist_written_data(sbi, F2FS_I(inode)->i_pino,
+                                                       TRANS_DIR_INO))
                cp_reason = CP_RECOVER_DIR;
 
        return cp_reason;
@@ -178,7 +180,7 @@ static bool need_inode_page_update(struct f2fs_sb_info *sbi, nid_t ino)
        struct page *i = find_get_page(NODE_MAPPING(sbi), ino);
        bool ret = false;
        /* But we need to avoid that there are some inode updates */
-       if ((i && PageDirty(i)) || need_inode_block_update(sbi, ino))
+       if ((i && PageDirty(i)) || f2fs_need_inode_block_update(sbi, ino))
                ret = true;
        f2fs_put_page(i, 0);
        return ret;
@@ -238,14 +240,14 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,
         * if there is no written data, don't waste time to write recovery info.
         */
        if (!is_inode_flag_set(inode, FI_APPEND_WRITE) &&
-                       !exist_written_data(sbi, ino, APPEND_INO)) {
+                       !f2fs_exist_written_data(sbi, ino, APPEND_INO)) {
 
                /* it may call write_inode just prior to fsync */
                if (need_inode_page_update(sbi, ino))
                        goto go_write;
 
                if (is_inode_flag_set(inode, FI_UPDATE_WRITE) ||
-                               exist_written_data(sbi, ino, UPDATE_INO))
+                               f2fs_exist_written_data(sbi, ino, UPDATE_INO))
                        goto flush_out;
                goto out;
        }
@@ -272,7 +274,7 @@ go_write:
                goto out;
        }
 sync_nodes:
-       ret = fsync_node_pages(sbi, inode, &wbc, atomic);
+       ret = f2fs_fsync_node_pages(sbi, inode, &wbc, atomic);
        if (ret)
                goto out;
 
@@ -282,7 +284,7 @@ sync_nodes:
                goto out;
        }
 
-       if (need_inode_block_update(sbi, ino)) {
+       if (f2fs_need_inode_block_update(sbi, ino)) {
                f2fs_mark_inode_dirty_sync(inode, true);
                f2fs_write_inode(inode, NULL);
                goto sync_nodes;
@@ -297,21 +299,21 @@ sync_nodes:
         * given fsync mark.
         */
        if (!atomic) {
-               ret = wait_on_node_pages_writeback(sbi, ino);
+               ret = f2fs_wait_on_node_pages_writeback(sbi, ino);
                if (ret)
                        goto out;
        }
 
        /* once recovery info is written, don't need to tack this */
-       remove_ino_entry(sbi, ino, APPEND_INO);
+       f2fs_remove_ino_entry(sbi, ino, APPEND_INO);
        clear_inode_flag(inode, FI_APPEND_WRITE);
 flush_out:
-       if (!atomic)
+       if (!atomic && F2FS_OPTION(sbi).fsync_mode != FSYNC_MODE_NOBARRIER)
                ret = f2fs_issue_flush(sbi, inode->i_ino);
        if (!ret) {
-               remove_ino_entry(sbi, ino, UPDATE_INO);
+               f2fs_remove_ino_entry(sbi, ino, UPDATE_INO);
                clear_inode_flag(inode, FI_UPDATE_WRITE);
-               remove_ino_entry(sbi, ino, FLUSH_INO);
+               f2fs_remove_ino_entry(sbi, ino, FLUSH_INO);
        }
        f2fs_update_time(sbi, REQ_TIME);
 out:
@@ -352,7 +354,7 @@ static bool __found_offset(block_t blkaddr, pgoff_t dirty, pgoff_t pgofs,
        switch (whence) {
        case SEEK_DATA:
                if ((blkaddr == NEW_ADDR && dirty == pgofs) ||
-                       (blkaddr != NEW_ADDR && blkaddr != NULL_ADDR))
+                       is_valid_blkaddr(blkaddr))
                        return true;
                break;
        case SEEK_HOLE:
@@ -392,13 +394,13 @@ static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
 
        for (; data_ofs < isize; data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
                set_new_dnode(&dn, inode, NULL, NULL, 0);
-               err = get_dnode_of_data(&dn, pgofs, LOOKUP_NODE);
+               err = f2fs_get_dnode_of_data(&dn, pgofs, LOOKUP_NODE);
                if (err && err != -ENOENT) {
                        goto fail;
                } else if (err == -ENOENT) {
                        /* direct node does not exists */
                        if (whence == SEEK_DATA) {
-                               pgofs = get_next_page_offset(&dn, pgofs);
+                               pgofs = f2fs_get_next_page_offset(&dn, pgofs);
                                continue;
                        } else {
                                goto found;
@@ -412,6 +414,7 @@ static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
                                dn.ofs_in_node++, pgofs++,
                                data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
                        block_t blkaddr;
+
                        blkaddr = datablock_addr(dn.inode,
                                        dn.node_page, dn.ofs_in_node);
 
@@ -486,7 +489,7 @@ static int f2fs_file_open(struct inode *inode, struct file *filp)
        return dquot_file_open(inode, filp);
 }
 
-void truncate_data_blocks_range(struct dnode_of_data *dn, int count)
+void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count)
 {
        struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
        struct f2fs_node *raw_node;
@@ -502,12 +505,13 @@ void truncate_data_blocks_range(struct dnode_of_data *dn, int count)
 
        for (; count > 0; count--, addr++, dn->ofs_in_node++) {
                block_t blkaddr = le32_to_cpu(*addr);
+
                if (blkaddr == NULL_ADDR)
                        continue;
 
                dn->data_blkaddr = NULL_ADDR;
-               set_data_blkaddr(dn);
-               invalidate_blocks(sbi, blkaddr);
+               f2fs_set_data_blkaddr(dn);
+               f2fs_invalidate_blocks(sbi, blkaddr);
                if (dn->ofs_in_node == 0 && IS_INODE(dn->node_page))
                        clear_inode_flag(dn->inode, FI_FIRST_BLOCK_WRITTEN);
                nr_free++;
@@ -519,7 +523,7 @@ void truncate_data_blocks_range(struct dnode_of_data *dn, int count)
                 * once we invalidate valid blkaddr in range [ofs, ofs + count],
                 * we will invalidate all blkaddr in the whole range.
                 */
-               fofs = start_bidx_of_node(ofs_of_node(dn->node_page),
+               fofs = f2fs_start_bidx_of_node(ofs_of_node(dn->node_page),
                                                        dn->inode) + ofs;
                f2fs_update_extent_cache_range(dn, fofs, 0, len);
                dec_valid_block_count(sbi, dn->inode, nr_free);
@@ -531,15 +535,15 @@ void truncate_data_blocks_range(struct dnode_of_data *dn, int count)
                                         dn->ofs_in_node, nr_free);
 }
 
-void truncate_data_blocks(struct dnode_of_data *dn)
+void f2fs_truncate_data_blocks(struct dnode_of_data *dn)
 {
-       truncate_data_blocks_range(dn, ADDRS_PER_BLOCK);
+       f2fs_truncate_data_blocks_range(dn, ADDRS_PER_BLOCK);
 }
 
 static int truncate_partial_data_page(struct inode *inode, u64 from,
                                                                bool cache_only)
 {
-       unsigned offset = from & (PAGE_SIZE - 1);
+       loff_t offset = from & (PAGE_SIZE - 1);
        pgoff_t index = from >> PAGE_SHIFT;
        struct address_space *mapping = inode->i_mapping;
        struct page *page;
@@ -555,7 +559,7 @@ static int truncate_partial_data_page(struct inode *inode, u64 from,
                return 0;
        }
 
-       page = get_lock_data_page(inode, index, true);
+       page = f2fs_get_lock_data_page(inode, index, true);
        if (IS_ERR(page))
                return PTR_ERR(page) == -ENOENT ? 0 : PTR_ERR(page);
 truncate_out:
@@ -570,7 +574,7 @@ truncate_out:
        return 0;
 }
 
-int truncate_blocks(struct inode *inode, u64 from, bool lock)
+int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock)
 {
        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
        struct dnode_of_data dn;
@@ -589,21 +593,21 @@ int truncate_blocks(struct inode *inode, u64 from, bool lock)
        if (lock)
                f2fs_lock_op(sbi);
 
-       ipage = get_node_page(sbi, inode->i_ino);
+       ipage = f2fs_get_node_page(sbi, inode->i_ino);
        if (IS_ERR(ipage)) {
                err = PTR_ERR(ipage);
                goto out;
        }
 
        if (f2fs_has_inline_data(inode)) {
-               truncate_inline_inode(inode, ipage, from);
+               f2fs_truncate_inline_inode(inode, ipage, from);
                f2fs_put_page(ipage, 1);
                truncate_page = true;
                goto out;
        }
 
        set_new_dnode(&dn, inode, ipage, NULL, 0);
-       err = get_dnode_of_data(&dn, free_from, LOOKUP_NODE_RA);
+       err = f2fs_get_dnode_of_data(&dn, free_from, LOOKUP_NODE_RA);
        if (err) {
                if (err == -ENOENT)
                        goto free_next;
@@ -616,13 +620,13 @@ int truncate_blocks(struct inode *inode, u64 from, bool lock)
        f2fs_bug_on(sbi, count < 0);
 
        if (dn.ofs_in_node || IS_INODE(dn.node_page)) {
-               truncate_data_blocks_range(&dn, count);
+               f2fs_truncate_data_blocks_range(&dn, count);
                free_from += count;
        }
 
        f2fs_put_dnode(&dn);
 free_next:
-       err = truncate_inode_blocks(inode, free_from);
+       err = f2fs_truncate_inode_blocks(inode, free_from);
 out:
        if (lock)
                f2fs_unlock_op(sbi);
@@ -661,7 +665,7 @@ int f2fs_truncate(struct inode *inode)
                        return err;
        }
 
-       err = truncate_blocks(inode, i_size_read(inode), true);
+       err = f2fs_truncate_blocks(inode, i_size_read(inode), true);
        if (err)
                return err;
 
@@ -686,16 +690,16 @@ int f2fs_getattr(const struct path *path, struct kstat *stat,
                stat->btime.tv_nsec = fi->i_crtime.tv_nsec;
        }
 
-       flags = fi->i_flags & (FS_FL_USER_VISIBLE | FS_PROJINHERIT_FL);
-       if (flags & FS_APPEND_FL)
+       flags = fi->i_flags & F2FS_FL_USER_VISIBLE;
+       if (flags & F2FS_APPEND_FL)
                stat->attributes |= STATX_ATTR_APPEND;
-       if (flags & FS_COMPR_FL)
+       if (flags & F2FS_COMPR_FL)
                stat->attributes |= STATX_ATTR_COMPRESSED;
        if (f2fs_encrypted_inode(inode))
                stat->attributes |= STATX_ATTR_ENCRYPTED;
-       if (flags & FS_IMMUTABLE_FL)
+       if (flags & F2FS_IMMUTABLE_FL)
                stat->attributes |= STATX_ATTR_IMMUTABLE;
-       if (flags & FS_NODUMP_FL)
+       if (flags & F2FS_NODUMP_FL)
                stat->attributes |= STATX_ATTR_NODUMP;
 
        stat->attributes_mask |= (STATX_ATTR_APPEND |
@@ -811,7 +815,7 @@ int f2fs_setattr(struct dentry *dentry, struct iattr *attr)
        __setattr_copy(inode, attr);
 
        if (attr->ia_valid & ATTR_MODE) {
-               err = posix_acl_chmod(inode, get_inode_mode(inode));
+               err = posix_acl_chmod(inode, f2fs_get_inode_mode(inode));
                if (err || is_inode_flag_set(inode, FI_ACL_MODE)) {
                        inode->i_mode = F2FS_I(inode)->i_acl_mode;
                        clear_inode_flag(inode, FI_ACL_MODE);
@@ -850,7 +854,7 @@ static int fill_zero(struct inode *inode, pgoff_t index,
        f2fs_balance_fs(sbi, true);
 
        f2fs_lock_op(sbi);
-       page = get_new_data_page(inode, NULL, index, false);
+       page = f2fs_get_new_data_page(inode, NULL, index, false);
        f2fs_unlock_op(sbi);
 
        if (IS_ERR(page))
@@ -863,7 +867,7 @@ static int fill_zero(struct inode *inode, pgoff_t index,
        return 0;
 }
 
-int truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end)
+int f2fs_truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end)
 {
        int err;
 
@@ -872,10 +876,11 @@ int truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end)
                pgoff_t end_offset, count;
 
                set_new_dnode(&dn, inode, NULL, NULL, 0);
-               err = get_dnode_of_data(&dn, pg_start, LOOKUP_NODE);
+               err = f2fs_get_dnode_of_data(&dn, pg_start, LOOKUP_NODE);
                if (err) {
                        if (err == -ENOENT) {
-                               pg_start = get_next_page_offset(&dn, pg_start);
+                               pg_start = f2fs_get_next_page_offset(&dn,
+                                                               pg_start);
                                continue;
                        }
                        return err;
@@ -886,7 +891,7 @@ int truncate_hole(struct inode *inode, pgoff_t pg_start, pgoff_t pg_end)
 
                f2fs_bug_on(F2FS_I_SB(inode), count == 0 || count > end_offset);
 
-               truncate_data_blocks_range(&dn, count);
+               f2fs_truncate_data_blocks_range(&dn, count);
                f2fs_put_dnode(&dn);
 
                pg_start += count;
@@ -942,7 +947,7 @@ static int punch_hole(struct inode *inode, loff_t offset, loff_t len)
                                        blk_end - 1);
 
                        f2fs_lock_op(sbi);
-                       ret = truncate_hole(inode, pg_start, pg_end);
+                       ret = f2fs_truncate_hole(inode, pg_start, pg_end);
                        f2fs_unlock_op(sbi);
                        up_write(&F2FS_I(inode)->i_mmap_sem);
                }
@@ -960,7 +965,7 @@ static int __read_out_blkaddrs(struct inode *inode, block_t *blkaddr,
 
 next_dnode:
        set_new_dnode(&dn, inode, NULL, NULL, 0);
-       ret = get_dnode_of_data(&dn, off, LOOKUP_NODE_RA);
+       ret = f2fs_get_dnode_of_data(&dn, off, LOOKUP_NODE_RA);
        if (ret && ret != -ENOENT) {
                return ret;
        } else if (ret == -ENOENT) {
@@ -977,7 +982,7 @@ next_dnode:
        for (i = 0; i < done; i++, blkaddr++, do_replace++, dn.ofs_in_node++) {
                *blkaddr = datablock_addr(dn.inode,
                                        dn.node_page, dn.ofs_in_node);
-               if (!is_checkpointed_data(sbi, *blkaddr)) {
+               if (!f2fs_is_checkpointed_data(sbi, *blkaddr)) {
 
                        if (test_opt(sbi, LFS)) {
                                f2fs_put_dnode(&dn);
@@ -1010,10 +1015,10 @@ static int __roll_back_blkaddrs(struct inode *inode, block_t *blkaddr,
                        continue;
 
                set_new_dnode(&dn, inode, NULL, NULL, 0);
-               ret = get_dnode_of_data(&dn, off + i, LOOKUP_NODE_RA);
+               ret = f2fs_get_dnode_of_data(&dn, off + i, LOOKUP_NODE_RA);
                if (ret) {
                        dec_valid_block_count(sbi, inode, 1);
-                       invalidate_blocks(sbi, *blkaddr);
+                       f2fs_invalidate_blocks(sbi, *blkaddr);
                } else {
                        f2fs_update_data_blkaddr(&dn, *blkaddr);
                }
@@ -1043,18 +1048,18 @@ static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
                        pgoff_t ilen;
 
                        set_new_dnode(&dn, dst_inode, NULL, NULL, 0);
-                       ret = get_dnode_of_data(&dn, dst + i, ALLOC_NODE);
+                       ret = f2fs_get_dnode_of_data(&dn, dst + i, ALLOC_NODE);
                        if (ret)
                                return ret;
 
-                       get_node_info(sbi, dn.nid, &ni);
+                       f2fs_get_node_info(sbi, dn.nid, &ni);
                        ilen = min((pgoff_t)
                                ADDRS_PER_PAGE(dn.node_page, dst_inode) -
                                                dn.ofs_in_node, len - i);
                        do {
                                dn.data_blkaddr = datablock_addr(dn.inode,
                                                dn.node_page, dn.ofs_in_node);
-                               truncate_data_blocks_range(&dn, 1);
+                               f2fs_truncate_data_blocks_range(&dn, 1);
 
                                if (do_replace[i]) {
                                        f2fs_i_blocks_write(src_inode,
@@ -1077,10 +1082,11 @@ static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
                } else {
                        struct page *psrc, *pdst;
 
-                       psrc = get_lock_data_page(src_inode, src + i, true);
+                       psrc = f2fs_get_lock_data_page(src_inode,
+                                                       src + i, true);
                        if (IS_ERR(psrc))
                                return PTR_ERR(psrc);
-                       pdst = get_new_data_page(dst_inode, NULL, dst + i,
+                       pdst = f2fs_get_new_data_page(dst_inode, NULL, dst + i,
                                                                true);
                        if (IS_ERR(pdst)) {
                                f2fs_put_page(psrc, 1);
@@ -1091,7 +1097,8 @@ static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
                        f2fs_put_page(pdst, 1);
                        f2fs_put_page(psrc, 1);
 
-                       ret = truncate_hole(src_inode, src + i, src + i + 1);
+                       ret = f2fs_truncate_hole(src_inode,
+                                               src + i, src + i + 1);
                        if (ret)
                                return ret;
                        i++;
@@ -1144,7 +1151,7 @@ static int __exchange_data_block(struct inode *src_inode,
        return 0;
 
 roll_back:
-       __roll_back_blkaddrs(src_inode, src_blkaddr, do_replace, src, len);
+       __roll_back_blkaddrs(src_inode, src_blkaddr, do_replace, src, olen);
        kvfree(src_blkaddr);
        kvfree(do_replace);
        return ret;
@@ -1187,7 +1194,7 @@ static int f2fs_collapse_range(struct inode *inode, loff_t offset, loff_t len)
        pg_end = (offset + len) >> PAGE_SHIFT;
 
        /* avoid gc operation during block exchange */
-       down_write(&F2FS_I(inode)->dio_rwsem[WRITE]);
+       down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
 
        down_write(&F2FS_I(inode)->i_mmap_sem);
        /* write out all dirty pages from offset */
@@ -1208,12 +1215,12 @@ static int f2fs_collapse_range(struct inode *inode, loff_t offset, loff_t len)
        new_size = i_size_read(inode) - len;
        truncate_pagecache(inode, new_size);
 
-       ret = truncate_blocks(inode, new_size, true);
+       ret = f2fs_truncate_blocks(inode, new_size, true);
        if (!ret)
                f2fs_i_size_write(inode, new_size);
 out_unlock:
        up_write(&F2FS_I(inode)->i_mmap_sem);
-       up_write(&F2FS_I(inode)->dio_rwsem[WRITE]);
+       up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
        return ret;
 }
 
@@ -1233,7 +1240,7 @@ static int f2fs_do_zero_range(struct dnode_of_data *dn, pgoff_t start,
        }
 
        dn->ofs_in_node = ofs_in_node;
-       ret = reserve_new_blocks(dn, count);
+       ret = f2fs_reserve_new_blocks(dn, count);
        if (ret)
                return ret;
 
@@ -1242,7 +1249,7 @@ static int f2fs_do_zero_range(struct dnode_of_data *dn, pgoff_t start,
                dn->data_blkaddr = datablock_addr(dn->inode,
                                        dn->node_page, dn->ofs_in_node);
                /*
-                * reserve_new_blocks will not guarantee entire block
+                * f2fs_reserve_new_blocks will not guarantee entire block
                 * allocation.
                 */
                if (dn->data_blkaddr == NULL_ADDR) {
@@ -1250,9 +1257,9 @@ static int f2fs_do_zero_range(struct dnode_of_data *dn, pgoff_t start,
                        break;
                }
                if (dn->data_blkaddr != NEW_ADDR) {
-                       invalidate_blocks(sbi, dn->data_blkaddr);
+                       f2fs_invalidate_blocks(sbi, dn->data_blkaddr);
                        dn->data_blkaddr = NEW_ADDR;
-                       set_data_blkaddr(dn);
+                       f2fs_set_data_blkaddr(dn);
                }
        }
 
@@ -1318,7 +1325,7 @@ static int f2fs_zero_range(struct inode *inode, loff_t offset, loff_t len,
                        f2fs_lock_op(sbi);
 
                        set_new_dnode(&dn, inode, NULL, NULL, 0);
-                       ret = get_dnode_of_data(&dn, index, ALLOC_NODE);
+                       ret = f2fs_get_dnode_of_data(&dn, index, ALLOC_NODE);
                        if (ret) {
                                f2fs_unlock_op(sbi);
                                goto out;
@@ -1389,10 +1396,10 @@ static int f2fs_insert_range(struct inode *inode, loff_t offset, loff_t len)
        f2fs_balance_fs(sbi, true);
 
        /* avoid gc operation during block exchange */
-       down_write(&F2FS_I(inode)->dio_rwsem[WRITE]);
+       down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
 
        down_write(&F2FS_I(inode)->i_mmap_sem);
-       ret = truncate_blocks(inode, i_size_read(inode), true);
+       ret = f2fs_truncate_blocks(inode, i_size_read(inode), true);
        if (ret)
                goto out;
 
@@ -1430,7 +1437,7 @@ static int f2fs_insert_range(struct inode *inode, loff_t offset, loff_t len)
                f2fs_i_size_write(inode, new_size);
 out:
        up_write(&F2FS_I(inode)->i_mmap_sem);
-       up_write(&F2FS_I(inode)->dio_rwsem[WRITE]);
+       up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
        return ret;
 }
 
@@ -1473,7 +1480,7 @@ static int expand_inode_data(struct inode *inode, loff_t offset,
                last_off = map.m_lblk + map.m_len - 1;
 
                /* update new size to the failed position */
-               new_size = (last_off == pg_end) ? offset + len:
+               new_size = (last_off == pg_end) ? offset + len :
                                        (loff_t)(last_off + 1) << PAGE_SHIFT;
        } else {
                new_size = ((loff_t)pg_end << PAGE_SHIFT) + off_end;
@@ -1553,7 +1560,7 @@ static int f2fs_release_file(struct inode *inode, struct file *filp)
 
        /* some remained atomic pages should discarded */
        if (f2fs_is_atomic_file(inode))
-               drop_inmem_pages(inode);
+               f2fs_drop_inmem_pages(inode);
        if (f2fs_is_volatile_file(inode)) {
                clear_inode_flag(inode, FI_VOLATILE_FILE);
                stat_dec_volatile_write(inode);
@@ -1576,7 +1583,7 @@ static int f2fs_file_flush(struct file *file, fl_owner_t id)
         */
        if (f2fs_is_atomic_file(inode) &&
                        F2FS_I(inode)->inmem_task == current)
-               drop_inmem_pages(inode);
+               f2fs_drop_inmem_pages(inode);
        return 0;
 }
 
@@ -1584,8 +1591,15 @@ static int f2fs_ioc_getflags(struct file *filp, unsigned long arg)
 {
        struct inode *inode = file_inode(filp);
        struct f2fs_inode_info *fi = F2FS_I(inode);
-       unsigned int flags = fi->i_flags &
-                       (FS_FL_USER_VISIBLE | FS_PROJINHERIT_FL);
+       unsigned int flags = fi->i_flags;
+
+       if (file_is_encrypt(inode))
+               flags |= F2FS_ENCRYPT_FL;
+       if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode))
+               flags |= F2FS_INLINE_DATA_FL;
+
+       flags &= F2FS_FL_USER_VISIBLE;
+
        return put_user(flags, (int __user *)arg);
 }
 
@@ -1602,15 +1616,15 @@ static int __f2fs_ioc_setflags(struct inode *inode, unsigned int flags)
 
        oldflags = fi->i_flags;
 
-       if ((flags ^ oldflags) & (FS_APPEND_FL | FS_IMMUTABLE_FL))
+       if ((flags ^ oldflags) & (F2FS_APPEND_FL | F2FS_IMMUTABLE_FL))
                if (!capable(CAP_LINUX_IMMUTABLE))
                        return -EPERM;
 
-       flags = flags & (FS_FL_USER_MODIFIABLE | FS_PROJINHERIT_FL);
-       flags |= oldflags & ~(FS_FL_USER_MODIFIABLE | FS_PROJINHERIT_FL);
+       flags = flags & F2FS_FL_USER_MODIFIABLE;
+       flags |= oldflags & ~F2FS_FL_USER_MODIFIABLE;
        fi->i_flags = flags;
 
-       if (fi->i_flags & FS_PROJINHERIT_FL)
+       if (fi->i_flags & F2FS_PROJINHERIT_FL)
                set_inode_flag(inode, FI_PROJ_INHERIT);
        else
                clear_inode_flag(inode, FI_PROJ_INHERIT);
@@ -1670,6 +1684,8 @@ static int f2fs_ioc_start_atomic_write(struct file *filp)
 
        inode_lock(inode);
 
+       down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+
        if (f2fs_is_atomic_file(inode))
                goto out;
 
@@ -1677,28 +1693,25 @@ static int f2fs_ioc_start_atomic_write(struct file *filp)
        if (ret)
                goto out;
 
-       set_inode_flag(inode, FI_ATOMIC_FILE);
-       set_inode_flag(inode, FI_HOT_DATA);
-       f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
-
        if (!get_dirty_pages(inode))
-               goto inc_stat;
+               goto skip_flush;
 
        f2fs_msg(F2FS_I_SB(inode)->sb, KERN_WARNING,
                "Unexpected flush for atomic writes: ino=%lu, npages=%u",
                                        inode->i_ino, get_dirty_pages(inode));
        ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
-       if (ret) {
-               clear_inode_flag(inode, FI_ATOMIC_FILE);
-               clear_inode_flag(inode, FI_HOT_DATA);
+       if (ret)
                goto out;
-       }
+skip_flush:
+       set_inode_flag(inode, FI_ATOMIC_FILE);
+       clear_inode_flag(inode, FI_ATOMIC_REVOKE_REQUEST);
+       f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
 
-inc_stat:
        F2FS_I(inode)->inmem_task = current;
        stat_inc_atomic_write(inode);
        stat_update_max_atomic_write(inode);
 out:
+       up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
        inode_unlock(inode);
        mnt_drop_write_file(filp);
        return ret;
@@ -1718,27 +1731,33 @@ static int f2fs_ioc_commit_atomic_write(struct file *filp)
 
        inode_lock(inode);
 
-       down_write(&F2FS_I(inode)->dio_rwsem[WRITE]);
+       down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
 
-       if (f2fs_is_volatile_file(inode))
+       if (f2fs_is_volatile_file(inode)) {
+               ret = -EINVAL;
                goto err_out;
+       }
 
        if (f2fs_is_atomic_file(inode)) {
-               ret = commit_inmem_pages(inode);
+               ret = f2fs_commit_inmem_pages(inode);
                if (ret)
                        goto err_out;
 
                ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 0, true);
                if (!ret) {
                        clear_inode_flag(inode, FI_ATOMIC_FILE);
-                       clear_inode_flag(inode, FI_HOT_DATA);
+                       F2FS_I(inode)->i_gc_failures[GC_FAILURE_ATOMIC] = 0;
                        stat_dec_atomic_write(inode);
                }
        } else {
                ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 1, false);
        }
 err_out:
-       up_write(&F2FS_I(inode)->dio_rwsem[WRITE]);
+       if (is_inode_flag_set(inode, FI_ATOMIC_REVOKE_REQUEST)) {
+               clear_inode_flag(inode, FI_ATOMIC_REVOKE_REQUEST);
+               ret = -EINVAL;
+       }
+       up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
        inode_unlock(inode);
        mnt_drop_write_file(filp);
        return ret;
@@ -1823,7 +1842,7 @@ static int f2fs_ioc_abort_volatile_write(struct file *filp)
        inode_lock(inode);
 
        if (f2fs_is_atomic_file(inode))
-               drop_inmem_pages(inode);
+               f2fs_drop_inmem_pages(inode);
        if (f2fs_is_volatile_file(inode)) {
                clear_inode_flag(inode, FI_VOLATILE_FILE);
                stat_dec_volatile_write(inode);
@@ -1851,9 +1870,11 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
        if (get_user(in, (__u32 __user *)arg))
                return -EFAULT;
 
-       ret = mnt_want_write_file(filp);
-       if (ret)
-               return ret;
+       if (in != F2FS_GOING_DOWN_FULLSYNC) {
+               ret = mnt_want_write_file(filp);
+               if (ret)
+                       return ret;
+       }
 
        switch (in) {
        case F2FS_GOING_DOWN_FULLSYNC:
@@ -1878,7 +1899,7 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
                f2fs_stop_checkpoint(sbi, false);
                break;
        case F2FS_GOING_DOWN_METAFLUSH:
-               sync_meta_pages(sbi, META, LONG_MAX, FS_META_IO);
+               f2fs_sync_meta_pages(sbi, META, LONG_MAX, FS_META_IO);
                f2fs_stop_checkpoint(sbi, false);
                break;
        default:
@@ -1886,15 +1907,16 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
                goto out;
        }
 
-       stop_gc_thread(sbi);
-       stop_discard_thread(sbi);
+       f2fs_stop_gc_thread(sbi);
+       f2fs_stop_discard_thread(sbi);
 
-       drop_discard_cmd(sbi);
+       f2fs_drop_discard_cmd(sbi);
        clear_opt(sbi, DISCARD);
 
        f2fs_update_time(sbi, REQ_TIME);
 out:
-       mnt_drop_write_file(filp);
+       if (in != F2FS_GOING_DOWN_FULLSYNC)
+               mnt_drop_write_file(filp);
        return ret;
 }
 
@@ -2053,15 +2075,15 @@ static int f2fs_ioc_gc_range(struct file *filp, unsigned long arg)
        if (f2fs_readonly(sbi->sb))
                return -EROFS;
 
+       end = range.start + range.len;
+       if (range.start < MAIN_BLKADDR(sbi) || end >= MAX_BLKADDR(sbi)) {
+               return -EINVAL;
+       }
+
        ret = mnt_want_write_file(filp);
        if (ret)
                return ret;
 
-       end = range.start + range.len;
-       if (range.start < MAIN_BLKADDR(sbi) || end >= MAX_BLKADDR(sbi)) {
-               ret = -EINVAL;
-               goto out;
-       }
 do_more:
        if (!range.sync) {
                if (!mutex_trylock(&sbi->gc_mutex)) {
@@ -2081,7 +2103,7 @@ out:
        return ret;
 }
 
-static int f2fs_ioc_write_checkpoint(struct file *filp, unsigned long arg)
+static int f2fs_ioc_f2fs_write_checkpoint(struct file *filp, unsigned long arg)
 {
        struct inode *inode = file_inode(filp);
        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
@@ -2110,7 +2132,7 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
        struct inode *inode = file_inode(filp);
        struct f2fs_map_blocks map = { .m_next_extent = NULL,
                                        .m_seg_type = NO_CHECK_TYPE };
-       struct extent_info ei = {0,0,0};
+       struct extent_info ei = {0, 0, 0};
        pgoff_t pg_start, pg_end, next_pgofs;
        unsigned int blk_per_seg = sbi->blocks_per_seg;
        unsigned int total = 0, sec_num;
@@ -2119,7 +2141,7 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
        int err;
 
        /* if in-place-update policy is enabled, don't waste time here */
-       if (should_update_inplace(inode, NULL))
+       if (f2fs_should_update_inplace(inode, NULL))
                return -EINVAL;
 
        pg_start = range->start >> PAGE_SHIFT;
@@ -2214,7 +2236,7 @@ do_map:
                while (idx < map.m_lblk + map.m_len && cnt < blk_per_seg) {
                        struct page *page;
 
-                       page = get_lock_data_page(inode, idx, true);
+                       page = f2fs_get_lock_data_page(inode, idx, true);
                        if (IS_ERR(page)) {
                                err = PTR_ERR(page);
                                goto clear_out;
@@ -2325,12 +2347,12 @@ static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
        }
 
        inode_lock(src);
-       down_write(&F2FS_I(src)->dio_rwsem[WRITE]);
+       down_write(&F2FS_I(src)->i_gc_rwsem[WRITE]);
        if (src != dst) {
                ret = -EBUSY;
                if (!inode_trylock(dst))
                        goto out;
-               if (!down_write_trylock(&F2FS_I(dst)->dio_rwsem[WRITE])) {
+               if (!down_write_trylock(&F2FS_I(dst)->i_gc_rwsem[WRITE])) {
                        inode_unlock(dst);
                        goto out;
                }
@@ -2392,11 +2414,11 @@ static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
        f2fs_unlock_op(sbi);
 out_unlock:
        if (src != dst) {
-               up_write(&F2FS_I(dst)->dio_rwsem[WRITE]);
+               up_write(&F2FS_I(dst)->i_gc_rwsem[WRITE]);
                inode_unlock(dst);
        }
 out:
-       up_write(&F2FS_I(src)->dio_rwsem[WRITE]);
+       up_write(&F2FS_I(src)->i_gc_rwsem[WRITE]);
        inode_unlock(src);
        return ret;
 }
@@ -2554,7 +2576,7 @@ static int f2fs_ioc_setproject(struct file *filp, __u32 projid)
        if (IS_NOQUOTA(inode))
                goto out_unlock;
 
-       ipage = get_node_page(sbi, inode->i_ino);
+       ipage = f2fs_get_node_page(sbi, inode->i_ino);
        if (IS_ERR(ipage)) {
                err = PTR_ERR(ipage);
                goto out_unlock;
@@ -2568,7 +2590,9 @@ static int f2fs_ioc_setproject(struct file *filp, __u32 projid)
        }
        f2fs_put_page(ipage, 1);
 
-       dquot_initialize(inode);
+       err = dquot_initialize(inode);
+       if (err)
+               goto out_unlock;
 
        transfer_to[PRJQUOTA] = dqget(sb, make_kqid_projid(kprojid));
        if (!IS_ERR(transfer_to[PRJQUOTA])) {
@@ -2601,17 +2625,17 @@ static inline __u32 f2fs_iflags_to_xflags(unsigned long iflags)
 {
        __u32 xflags = 0;
 
-       if (iflags & FS_SYNC_FL)
+       if (iflags & F2FS_SYNC_FL)
                xflags |= FS_XFLAG_SYNC;
-       if (iflags & FS_IMMUTABLE_FL)
+       if (iflags & F2FS_IMMUTABLE_FL)
                xflags |= FS_XFLAG_IMMUTABLE;
-       if (iflags & FS_APPEND_FL)
+       if (iflags & F2FS_APPEND_FL)
                xflags |= FS_XFLAG_APPEND;
-       if (iflags & FS_NODUMP_FL)
+       if (iflags & F2FS_NODUMP_FL)
                xflags |= FS_XFLAG_NODUMP;
-       if (iflags & FS_NOATIME_FL)
+       if (iflags & F2FS_NOATIME_FL)
                xflags |= FS_XFLAG_NOATIME;
-       if (iflags & FS_PROJINHERIT_FL)
+       if (iflags & F2FS_PROJINHERIT_FL)
                xflags |= FS_XFLAG_PROJINHERIT;
        return xflags;
 }
@@ -2620,31 +2644,23 @@ static inline __u32 f2fs_iflags_to_xflags(unsigned long iflags)
                                  FS_XFLAG_APPEND | FS_XFLAG_NODUMP | \
                                  FS_XFLAG_NOATIME | FS_XFLAG_PROJINHERIT)
 
-/* Flags we can manipulate with through EXT4_IOC_FSSETXATTR */
-#define F2FS_FL_XFLAG_VISIBLE          (FS_SYNC_FL | \
-                                        FS_IMMUTABLE_FL | \
-                                        FS_APPEND_FL | \
-                                        FS_NODUMP_FL | \
-                                        FS_NOATIME_FL | \
-                                        FS_PROJINHERIT_FL)
-
 /* Transfer xflags flags to internal */
 static inline unsigned long f2fs_xflags_to_iflags(__u32 xflags)
 {
        unsigned long iflags = 0;
 
        if (xflags & FS_XFLAG_SYNC)
-               iflags |= FS_SYNC_FL;
+               iflags |= F2FS_SYNC_FL;
        if (xflags & FS_XFLAG_IMMUTABLE)
-               iflags |= FS_IMMUTABLE_FL;
+               iflags |= F2FS_IMMUTABLE_FL;
        if (xflags & FS_XFLAG_APPEND)
-               iflags |= FS_APPEND_FL;
+               iflags |= F2FS_APPEND_FL;
        if (xflags & FS_XFLAG_NODUMP)
-               iflags |= FS_NODUMP_FL;
+               iflags |= F2FS_NODUMP_FL;
        if (xflags & FS_XFLAG_NOATIME)
-               iflags |= FS_NOATIME_FL;
+               iflags |= F2FS_NOATIME_FL;
        if (xflags & FS_XFLAG_PROJINHERIT)
-               iflags |= FS_PROJINHERIT_FL;
+               iflags |= F2FS_PROJINHERIT_FL;
 
        return iflags;
 }
@@ -2657,7 +2673,7 @@ static int f2fs_ioc_fsgetxattr(struct file *filp, unsigned long arg)
 
        memset(&fa, 0, sizeof(struct fsxattr));
        fa.fsx_xflags = f2fs_iflags_to_xflags(fi->i_flags &
-                               (FS_FL_USER_VISIBLE | FS_PROJINHERIT_FL));
+                               F2FS_FL_USER_VISIBLE);
 
        if (f2fs_sb_has_project_quota(inode->i_sb))
                fa.fsx_projid = (__u32)from_kprojid(&init_user_ns,
@@ -2717,12 +2733,14 @@ int f2fs_pin_file_control(struct inode *inode, bool inc)
 
        /* Use i_gc_failures for normal file as a risk signal. */
        if (inc)
-               f2fs_i_gc_failures_write(inode, fi->i_gc_failures + 1);
+               f2fs_i_gc_failures_write(inode,
+                               fi->i_gc_failures[GC_FAILURE_PIN] + 1);
 
-       if (fi->i_gc_failures > sbi->gc_pin_file_threshold) {
+       if (fi->i_gc_failures[GC_FAILURE_PIN] > sbi->gc_pin_file_threshold) {
                f2fs_msg(sbi->sb, KERN_WARNING,
                        "%s: Enable GC = ino %lx after %x GC trials\n",
-                       __func__, inode->i_ino, fi->i_gc_failures);
+                       __func__, inode->i_ino,
+                       fi->i_gc_failures[GC_FAILURE_PIN]);
                clear_inode_flag(inode, FI_PIN_FILE);
                return -EAGAIN;
        }
@@ -2753,14 +2771,14 @@ static int f2fs_ioc_set_pin_file(struct file *filp, unsigned long arg)
 
        inode_lock(inode);
 
-       if (should_update_outplace(inode, NULL)) {
+       if (f2fs_should_update_outplace(inode, NULL)) {
                ret = -EINVAL;
                goto out;
        }
 
        if (!pin) {
                clear_inode_flag(inode, FI_PIN_FILE);
-               F2FS_I(inode)->i_gc_failures = 1;
+               F2FS_I(inode)->i_gc_failures[GC_FAILURE_PIN] = 1;
                goto done;
        }
 
@@ -2773,7 +2791,7 @@ static int f2fs_ioc_set_pin_file(struct file *filp, unsigned long arg)
                goto out;
 
        set_inode_flag(inode, FI_PIN_FILE);
-       ret = F2FS_I(inode)->i_gc_failures;
+       ret = F2FS_I(inode)->i_gc_failures[GC_FAILURE_PIN];
 done:
        f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
 out:
@@ -2788,7 +2806,7 @@ static int f2fs_ioc_get_pin_file(struct file *filp, unsigned long arg)
        __u32 pin = 0;
 
        if (is_inode_flag_set(inode, FI_PIN_FILE))
-               pin = F2FS_I(inode)->i_gc_failures;
+               pin = F2FS_I(inode)->i_gc_failures[GC_FAILURE_PIN];
        return put_user(pin, (u32 __user *)arg);
 }
 
@@ -2812,9 +2830,9 @@ int f2fs_precache_extents(struct inode *inode)
        while (map.m_lblk < end) {
                map.m_len = end - map.m_lblk;
 
-               down_write(&fi->dio_rwsem[WRITE]);
+               down_write(&fi->i_gc_rwsem[WRITE]);
                err = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_PRECACHE);
-               up_write(&fi->dio_rwsem[WRITE]);
+               up_write(&fi->i_gc_rwsem[WRITE]);
                if (err)
                        return err;
 
@@ -2866,7 +2884,7 @@ long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
        case F2FS_IOC_GARBAGE_COLLECT_RANGE:
                return f2fs_ioc_gc_range(filp, arg);
        case F2FS_IOC_WRITE_CHECKPOINT:
-               return f2fs_ioc_write_checkpoint(filp, arg);
+               return f2fs_ioc_f2fs_write_checkpoint(filp, arg);
        case F2FS_IOC_DEFRAGMENT:
                return f2fs_ioc_defragment(filp, arg);
        case F2FS_IOC_MOVE_RANGE:
@@ -2894,7 +2912,6 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
 {
        struct file *file = iocb->ki_filp;
        struct inode *inode = file_inode(file);
-       struct blk_plug plug;
        ssize_t ret;
 
        if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
@@ -2924,6 +2941,8 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
                                                iov_iter_count(from)) ||
                                        f2fs_has_inline_data(inode) ||
                                        f2fs_force_buffered_io(inode, WRITE)) {
+                                               clear_inode_flag(inode,
+                                                               FI_NO_PREALLOC);
                                                inode_unlock(inode);
                                                return -EAGAIN;
                                }
@@ -2939,9 +2958,7 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
                                return err;
                        }
                }
-               blk_start_plug(&plug);
                ret = __generic_file_write_iter(iocb, from);
-               blk_finish_plug(&plug);
                clear_inode_flag(inode, FI_NO_PREALLOC);
 
                /* if we couldn't write data, we should deallocate blocks. */