Skip to content

Commit

Permalink
nilfs2: split nilfs_unlink as nilfs_do_unlink and nilfs_unlink
Browse files Browse the repository at this point in the history
Split nilfs_unlink() to reduce nested transaction and duplicate
mark_inode_dirty() calls when calling nilfs_unlink() from nilfs_rmdir().

nilfs_do_unlink() is an actual unlink functionality which is not
in transaction and does not call mark_inode_dirty() for dentry argument.

nilfs_unlink() is a wrapper function for do_nilfs_unlink() with
transaction and mark_inode_dirty() for dentry argument.

Signed-off-by: Jiro SEKIBA <jir@unicus.jp>
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
  • Loading branch information
Jiro SEKIBA authored and Ryusuke Konishi committed Nov 27, 2009
1 parent 1749147 commit 4cd76c3
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions fs/nilfs2/namei.c
Original file line number Diff line number Diff line change
@@ -288,18 +288,13 @@ static int nilfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
goto out;
}

static int nilfs_unlink(struct inode *dir, struct dentry *dentry)
static int nilfs_do_unlink(struct inode *dir, struct dentry *dentry)
{
struct inode *inode;
struct nilfs_dir_entry *de;
struct page *page;
struct nilfs_transaction_info ti;
int err;

err = nilfs_transaction_begin(dir->i_sb, &ti, 0);
if (err)
return err;

err = -ENOENT;
de = nilfs_find_entry(dir, dentry, &page);
if (!de)
@@ -322,12 +317,26 @@ static int nilfs_unlink(struct inode *dir, struct dentry *dentry)

inode->i_ctime = dir->i_ctime;
drop_nlink(inode);
mark_inode_dirty(inode);
err = 0;
out:
if (!err)
return err;
}

static int nilfs_unlink(struct inode *dir, struct dentry *dentry)
{
struct nilfs_transaction_info ti;
int err;

err = nilfs_transaction_begin(dir->i_sb, &ti, 0);
if (err)
return err;

err = nilfs_do_unlink(dir, dentry);

if (!err) {
mark_inode_dirty(dentry->d_inode);
err = nilfs_transaction_commit(dir->i_sb);
else
} else
nilfs_transaction_abort(dir->i_sb);

return err;
@@ -345,7 +354,7 @@ static int nilfs_rmdir(struct inode *dir, struct dentry *dentry)

err = -ENOTEMPTY;
if (nilfs_empty_dir(inode)) {
err = nilfs_unlink(dir, dentry);
err = nilfs_do_unlink(dir, dentry);
if (!err) {
inode->i_size = 0;
drop_nlink(inode);

0 comments on commit 4cd76c3

Please sign in to comment.