Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 125010
b: refs/heads/master
c: 41080b5
h: refs/heads/master
v: v3
  • Loading branch information
Al Viro committed Dec 31, 2008
1 parent ce3cb07 commit b754f16
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 261bca86ed4f7f391d1938167624e78da61dcc6b
refs/heads/master: 41080b5a240113328c607f22b849f653373db0ce
6 changes: 5 additions & 1 deletion trunk/fs/ext2/ialloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -585,7 +585,10 @@ struct inode *ext2_new_inode(struct inode *dir, int mode)
spin_lock(&sbi->s_next_gen_lock);
inode->i_generation = sbi->s_next_generation++;
spin_unlock(&sbi->s_next_gen_lock);
insert_inode_hash(inode);
if (insert_inode_locked(inode) < 0) {
err = -EINVAL;
goto fail_drop;
}

if (DQUOT_ALLOC_INODE(inode)) {
err = -EDQUOT;
Expand All @@ -612,6 +615,7 @@ struct inode *ext2_new_inode(struct inode *dir, int mode)
DQUOT_DROP(inode);
inode->i_flags |= S_NOQUOTA;
inode->i_nlink = 0;
unlock_new_inode(inode);
iput(inode);
return ERR_PTR(err);

Expand Down
15 changes: 14 additions & 1 deletion trunk/fs/ext2/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,11 @@ static inline int ext2_add_nondir(struct dentry *dentry, struct inode *inode)
int err = ext2_add_link(dentry, inode);
if (!err) {
d_instantiate(dentry, inode);
unlock_new_inode(inode);
return 0;
}
inode_dec_link_count(inode);
unlock_new_inode(inode);
iput(inode);
return err;
}
Expand Down Expand Up @@ -170,6 +172,7 @@ static int ext2_symlink (struct inode * dir, struct dentry * dentry,

out_fail:
inode_dec_link_count(inode);
unlock_new_inode(inode);
iput (inode);
goto out;
}
Expand All @@ -178,6 +181,7 @@ static int ext2_link (struct dentry * old_dentry, struct inode * dir,
struct dentry *dentry)
{
struct inode *inode = old_dentry->d_inode;
int err;

if (inode->i_nlink >= EXT2_LINK_MAX)
return -EMLINK;
Expand All @@ -186,7 +190,14 @@ static int ext2_link (struct dentry * old_dentry, struct inode * dir,
inode_inc_link_count(inode);
atomic_inc(&inode->i_count);

return ext2_add_nondir(dentry, inode);
err = ext2_add_link(dentry, inode);
if (!err) {
d_instantiate(dentry, inode);
return 0;
}
inode_dec_link_count(inode);
iput(inode);
return err;
}

static int ext2_mkdir(struct inode * dir, struct dentry * dentry, int mode)
Expand Down Expand Up @@ -222,12 +233,14 @@ static int ext2_mkdir(struct inode * dir, struct dentry * dentry, int mode)
goto out_fail;

d_instantiate(dentry, inode);
unlock_new_inode(inode);
out:
return err;

out_fail:
inode_dec_link_count(inode);
inode_dec_link_count(inode);
unlock_new_inode(inode);
iput(inode);
out_dir:
inode_dec_link_count(dir);
Expand Down

0 comments on commit b754f16

Please sign in to comment.