diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2014-06-21 00:37:02 -0400 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2014-07-09 17:04:24 -0400 |
commit | b97a9b5da891ab6aff5a6a19c569c9c4c5563d48 (patch) | |
tree | c8e3fe4ddbba29eed50b9bf461cb088b21a13d00 /fs/f2fs/dir.c | |
parent | 50732df02eefb39ab414ef655979c2c9b64ad21c (diff) |
f2fs: introduce f2fs_do_tmpfile for code consistency
This patch adds f2fs_do_tmpfile to eliminate the redundant init_inode_metadata
flow.
Throught this, we can provide the consistent lock usage, e.g., fi->i_sem, and
this will enable better debugging stuffs.
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/dir.c')
-rw-r--r-- | fs/f2fs/dir.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c index 3677f4124541..fb7e01ed47dc 100644 --- a/fs/f2fs/dir.c +++ b/fs/f2fs/dir.c | |||
@@ -337,8 +337,7 @@ static struct page *init_inode_metadata(struct inode *inode, | |||
337 | struct page *page; | 337 | struct page *page; |
338 | int err; | 338 | int err; |
339 | 339 | ||
340 | if (is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE) && | 340 | if (is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE)) { |
341 | inode->i_nlink) { | ||
342 | page = new_inode_page(inode, name); | 341 | page = new_inode_page(inode, name); |
343 | if (IS_ERR(page)) | 342 | if (IS_ERR(page)) |
344 | return page; | 343 | return page; |
@@ -364,7 +363,8 @@ static struct page *init_inode_metadata(struct inode *inode, | |||
364 | set_cold_node(inode, page); | 363 | set_cold_node(inode, page); |
365 | } | 364 | } |
366 | 365 | ||
367 | init_dent_inode(name, page); | 366 | if (name) |
367 | init_dent_inode(name, page); | ||
368 | 368 | ||
369 | /* | 369 | /* |
370 | * This file should be checkpointed during fsync. | 370 | * This file should be checkpointed during fsync. |
@@ -537,6 +537,27 @@ fail: | |||
537 | return err; | 537 | return err; |
538 | } | 538 | } |
539 | 539 | ||
540 | int f2fs_do_tmpfile(struct inode *inode, struct inode *dir) | ||
541 | { | ||
542 | struct page *page; | ||
543 | int err = 0; | ||
544 | |||
545 | down_write(&F2FS_I(inode)->i_sem); | ||
546 | page = init_inode_metadata(inode, dir, NULL); | ||
547 | if (IS_ERR(page)) { | ||
548 | err = PTR_ERR(page); | ||
549 | goto fail; | ||
550 | } | ||
551 | /* we don't need to mark_inode_dirty now */ | ||
552 | update_inode(inode, page); | ||
553 | f2fs_put_page(page, 1); | ||
554 | |||
555 | clear_inode_flag(F2FS_I(inode), FI_NEW_INODE); | ||
556 | fail: | ||
557 | up_write(&F2FS_I(inode)->i_sem); | ||
558 | return err; | ||
559 | } | ||
560 | |||
540 | /* | 561 | /* |
541 | * It only removes the dentry from the dentry page,corresponding name | 562 | * It only removes the dentry from the dentry page,corresponding name |
542 | * entry in name page does not need to be touched during deletion. | 563 | * entry in name page does not need to be touched during deletion. |