diff options
| -rw-r--r-- | fs/ext2/inode.c | 2 | ||||
| -rw-r--r-- | fs/ext2/namei.c | 17 |
2 files changed, 9 insertions, 10 deletions
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 75b9e9e9c3b5..4fb049c48147 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c @@ -60,9 +60,7 @@ void ext2_delete_inode (struct inode * inode) inode->i_size = 0; if (inode->i_blocks) ext2_truncate (inode); - lock_kernel(); ext2_free_inode (inode); - unlock_kernel(); return; no_delete: diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c index 0e16416c1068..9d599e5f4323 100644 --- a/fs/ext2/namei.c +++ b/fs/ext2/namei.c @@ -39,13 +39,17 @@ static inline void ext2_inc_count(struct inode *inode) { + lock_kernel(); inode->i_nlink++; + unlock_kernel(); mark_inode_dirty(inode); } static inline void ext2_dec_count(struct inode *inode) { + lock_kernel(); inode->i_nlink--; + unlock_kernel(); mark_inode_dirty(inode); } @@ -73,17 +77,13 @@ static struct dentry *ext2_lookup(struct inode * dir, struct dentry *dentry) if (dentry->d_name.len > EXT2_NAME_LEN) return ERR_PTR(-ENAMETOOLONG); - lock_kernel(); ino = ext2_inode_by_name(dir, dentry); inode = NULL; if (ino) { inode = iget(dir->i_sb, ino); - if (!inode) { - unlock_kernel(); + if (!inode) return ERR_PTR(-EACCES); - } } - unlock_kernel(); d_add(dentry, inode); return NULL; } @@ -105,9 +105,7 @@ static int ext2_create (struct inode * dir, struct dentry * dentry, int mode) inode->i_fop = &ext2_file_operations; inode->i_mapping->a_ops = &ext2_aops; mark_inode_dirty(inode); - lock_kernel(); err = ext2_add_nondir(dentry, inode); - unlock_kernel(); } return err; } @@ -300,8 +298,11 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry, ext2_inc_count(old_inode); ext2_set_link(new_dir, new_de, new_page, old_inode); new_inode->i_ctime = CURRENT_TIME; - if (dir_de) + if (dir_de) { + lock_kernel(); new_inode->i_nlink--; + unlock_kernel(); + } ext2_dec_count(new_inode); } else { if (dir_de) { |
