diff options
author | Jaegeuk Kim <jaegeuk.kim@samsung.com> | 2013-08-12 16:00:46 +0900 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk.kim@samsung.com> | 2013-08-12 16:00:46 +0900 |
commit | 9c02740c0174932162531a28ba8593e82884a9d7 (patch) | |
tree | 3aa3cb92f8b28462f9fb14e608975306b594d84e | |
parent | 41dfde135f9169948dd0c9bba948774f2e521210 (diff) |
f2fs: check the free space first in new_node_page
Let's check the free space in prior to the main process of allocating a new node
page.
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
-rw-r--r-- | fs/f2fs/node.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index bb8fbda43669..858a333f6ab9 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -833,29 +833,29 @@ struct page *new_node_page(struct dnode_of_data *dn, if (!page) return ERR_PTR(-ENOMEM); - get_node_info(sbi, dn->nid, &old_ni); + if (!inc_valid_node_count(sbi, dn->inode, 1)) { + err = -ENOSPC; + goto fail; + } - SetPageUptodate(page); - fill_node_footer(page, dn->nid, dn->inode->i_ino, ofs, true); + get_node_info(sbi, dn->nid, &old_ni); /* Reinitialize old_ni with new node page */ BUG_ON(old_ni.blk_addr != NULL_ADDR); new_ni = old_ni; new_ni.ino = dn->inode->i_ino; - - if (!inc_valid_node_count(sbi, dn->inode, 1)) { - err = -ENOSPC; - goto fail; - } set_node_addr(sbi, &new_ni, NEW_ADDR); + + fill_node_footer(page, dn->nid, dn->inode->i_ino, ofs, true); set_cold_node(dn->inode, page); + SetPageUptodate(page); + set_page_dirty(page); dn->node_page = page; if (ipage) update_inode(dn->inode, ipage); else sync_inode_page(dn); - set_page_dirty(page); if (ofs == 0) inc_valid_inode_count(sbi); |