f2fs: move i_size_write in f2fs_write_end
Subsystems (2)
Jaegeuk Kim
maintainerPATCH 1/2 f2fs: move i_size_write in f2fs_write_end
We don't need to do i_size_write under page lock.
Signed-off-by Jaegeuk Kim <[email protected]>
--- fs/f2fs/data.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/f2fs/data.c +1 -1
@@ -1685,11 +1685,11 @@ static int f2fs_write_end(struct file *file,trace_f2fs_write_end (inode, pos, len, copied);set_page_dirty (page); +f2fs_put_page (page,1 );if (pos + copied >i_size_read (inode))f2fs_i_size_write (inode, pos + copied); -f2fs_put_page (page,1 );f2fs_update_time (F2FS_I_SB (inode),REQ_TIME );return copied; }
Signature · 1 line
2.8.3
Jaegeuk Kim
maintainerPATCH 2/2 f2fs: avoid mark_inode_dirty
Let's check inode's dirtiness before calling mark_inode_dirty.
Signed-off-by Jaegeuk Kim <[email protected]>
--- fs/f2fs/acl.c | 2 +- fs/f2fs/dir.c | 6 +++--- fs/f2fs/extent_cache.c | 2 +- fs/f2fs/f2fs.h | 24 +++++++++++++----------- fs/f2fs/file.c | 8 ++++---- fs/f2fs/inline.c | 2 +- fs/f2fs/inode.c | 9 ++++++++- fs/f2fs/namei.c | 6 +++--- fs/f2fs/super.c | 43 ++++++++++++++++++++++++++----------------- fs/f2fs/xattr.c | 4 ++-- 10 files changed, 62 insertions(+), 44 deletions(-)
fs/f2fs/acl.c +1 -1
@@ -384,7 +384,7 @@ int f2fs_init_acl(struct inode *inode, struct inode *dir, struct page *ipage,if (error)return error; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode);if (default_acl) { error = __f2fs_set_acl(inode, ACL_TYPE_DEFAULT, default_acl,
fs/f2fs/dir.c +3 -3
@@ -300,7 +300,7 @@ void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,set_page_dirty (page); dir->i_mtime = dir->i_ctime =CURRENT_TIME ; -mark_inode_dirty_sync (dir); +f2fs_mark_inode_dirty_sync (dir);f2fs_put_page (page,1 ); }
@@ -452,7 +452,7 @@ void update_parent_metadata(struct inode *dir, struct inode *inode,clear_inode_flag (inode,FI_NEW_INODE ); } dir->i_mtime = dir->i_ctime =CURRENT_TIME ; -mark_inode_dirty_sync (dir); +f2fs_mark_inode_dirty_sync (dir);if (F2FS_I (dir)->i_current_depth != current_depth)f2fs_i_depth_write (dir, current_depth);
@@ -704,7 +704,7 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,set_page_dirty (page); dir->i_ctime = dir->i_mtime =CURRENT_TIME ; -mark_inode_dirty_sync (dir); +f2fs_mark_inode_dirty_sync (dir);if (inode)f2fs_drop_nlink (dir, inode);
fs/f2fs/extent_cache.c +1 -1
@@ -172,7 +172,7 @@ static void __drop_largest_extent(struct inode *inode,if (fofs < largest->fofs + largest->len && fofs + len > largest->fofs) { largest->len =0 ; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); } }
fs/f2fs/f2fs.h +13 -11
@@ -526,12 +526,13 @@ static inline bool __is_front_mergeable(struct extent_info *cur,return __is_extent_mergeable (cur, front); } +extern void f2fs_mark_inode_dirty_sync (struct inode *);static inline void __try_update_largest_extent (struct inode *inode,struct extent_tree *et,struct extent_node *en) {if (en->ei.len > et->largest.len) { et->largest = en->ei; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); } }
@@ -1571,7 +1572,7 @@ static inline void __mark_inode_dirty_flag(struct inode *inode,return ;case FI_DATA_EXIST :case FI_INLINE_DOTS : -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); } }
@@ -1598,7 +1599,7 @@ static inline void set_acl_inode(struct inode *inode, umode_t mode) {F2FS_I (inode)->i_acl_mode = mode;set_inode_flag (inode,FI_ACL_MODE ); -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); }static inline void f2fs_i_links_write (struct inode *inode,bool inc)
@@ -1607,7 +1608,7 @@ static inline void f2fs_i_links_write(struct inode *inode, bool inc)inc_nlink (inode); elsedrop_nlink (inode ); -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); } static inline void f2fs_i_blocks_write(struct inode *inode,
@@ -1618,7 +1619,7 @@ static inline void f2fs_i_blocks_write(struct inode *inode, inode->i_blocks = add ? inode->i_blocks + diff : inode->i_blocks - diff; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode);if (clean || recover)set_inode_flag (inode,FI_AUTO_RECOVER ); }
@@ -1632,7 +1633,7 @@ static inline void f2fs_i_size_write(struct inode *inode, loff_t i_size)return ;i_size_write (inode, i_size); -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode);if (clean || recover)set_inode_flag (inode,FI_AUTO_RECOVER ); }
@@ -1647,19 +1648,19 @@ static inline bool f2fs_skip_inode_update(struct inode *inode)static inline void f2fs_i_depth_write (struct inode *inode,unsigned int depth) {F2FS_I (inode)->i_current_depth = depth; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); }static inline void f2fs_i_xnid_write (struct inode *inode,nid_t xnid) {F2FS_I (inode)->i_xattr_nid = xnid; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); }static inline void f2fs_i_pino_write (struct inode *inode,nid_t pino) {F2FS_I (inode)->i_pino = pino; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); }static inline void get_inline_info (struct inode *inode,struct f2fs_inode *ri)
@@ -1787,13 +1788,13 @@ static inline int is_file(struct inode *inode, int type)static inline void set_file (struct inode *inode,int type) {F2FS_I (inode)->i_advise |= type; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); }static inline void clear_file (struct inode *inode,int type) {F2FS_I (inode)->i_advise &= ~type; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); }static inline int f2fs_readonly (struct super_block *sb)
@@ -1940,6 +1941,7 @@ static inline int f2fs_add_link(struct dentry *dentry, struct inode *inode)/* * super.c */ +int f2fs_inode_dirtied (struct inode *);void f2fs_inode_synced (struct inode *);int f2fs_commit_super (struct f2fs_sb_info *,bool );int f2fs_sync_fs (struct super_block *,int );
fs/f2fs/file.c +4 -4
@@ -265,7 +265,7 @@ sync_nodes: }if (need_inode_block_update (sbi, ino)) { -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode);f2fs_write_inode (inode,NULL ); goto sync_nodes; }
@@ -670,7 +670,7 @@ int f2fs_truncate(struct inode *inode)return err; inode->i_mtime = inode->i_ctime =CURRENT_TIME ; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode);return 0 ; }
@@ -760,7 +760,7 @@ int f2fs_setattr(struct dentry *dentry, struct iattr *attr) } } -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode);return err; }
@@ -1315,7 +1315,7 @@ static long f2fs_fallocate(struct file *file, int mode,if (!ret) { inode->i_mtime = inode->i_ctime =CURRENT_TIME ; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode);f2fs_update_time (F2FS_I_SB (inode),REQ_TIME ); }
fs/f2fs/inline.c +1 -1
@@ -569,7 +569,7 @@ void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,f2fs_put_page (page,1 ); dir->i_ctime = dir->i_mtime =CURRENT_TIME ; -mark_inode_dirty_sync (dir); +f2fs_mark_inode_dirty_sync (dir);if (inode)f2fs_drop_nlink (dir, inode);
fs/f2fs/inode.c +8 -1
@@ -18,6 +18,13 @@#include <trace/events/f2fs.h> +void f2fs_mark_inode_dirty_sync (struct inode *inode) +{ +if (f2fs_inode_dirtied (inode)) +return ; +mark_inode_dirty_sync (inode); +} +void f2fs_set_inode_flags (struct inode *inode) {unsigned int flags =F2FS_I (inode)->i_flags;
@@ -35,7 +42,7 @@ void f2fs_set_inode_flags(struct inode *inode) new_fl |=S_DIRSYNC ;inode_set_flags (inode, new_fl,S_SYNC |S_APPEND |S_IMMUTABLE |S_NOATIME |S_DIRSYNC ); -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); }static void __get_inode_rdev (struct inode *inode,struct f2fs_inode *ri)
fs/f2fs/namei.c +3 -3
@@ -757,7 +757,7 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,up_write (&F2FS_I (old_inode)->i_sem); old_inode->i_ctime =CURRENT_TIME ; -mark_inode_dirty_sync (old_inode); +f2fs_mark_inode_dirty_sync (old_inode);f2fs_delete_entry (old_entry, old_page, old_dir,NULL );
@@ -909,7 +909,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,f2fs_i_links_write (old_dir, old_nlink >0 );up_write (&F2FS_I (old_dir)->i_sem); } -mark_inode_dirty_sync (old_dir); +f2fs_mark_inode_dirty_sync (old_dir);/* update directory entry info of new dir inode */ f2fs_set_link (new_dir, new_entry, new_page, old_inode);
@@ -924,7 +924,7 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,f2fs_i_links_write (new_dir, new_nlink >0 );up_write (&F2FS_I (new_dir)->i_sem); } -mark_inode_dirty_sync (new_dir); +f2fs_mark_inode_dirty_sync (new_dir);f2fs_unlock_op (sbi);
fs/f2fs/super.c +26 -17
67 lines not on this page · raw message
fs/f2fs/xattr.c +2 -2
@@ -106,7 +106,7 @@ static int f2fs_xattr_advise_set(const struct xattr_handler *handler,return -EINVAL ;F2FS_I (inode)->i_advise |= *(char *)value; -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode);return 0 ; }
@@ -555,7 +555,7 @@ static int __f2fs_setxattr(struct inode *inode, int index,else file_clear_key (inode); } -mark_inode_dirty_sync (inode); +f2fs_mark_inode_dirty_sync (inode); exit:kzfree (base_addr);return error;
Signature · 1 line
2.8.3