X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fext2%2Fnamei.c;h=30d7141cd1f1145546a85b5217d64eaf596fcee1;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=f39446b34ee40d4332b53185eb5b32c0993ce7e2;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c index f39446b34..30d7141cd 100644 --- a/fs/ext2/namei.c +++ b/fs/ext2/namei.c @@ -37,6 +37,22 @@ #include "acl.h" #include "xip.h" +/* + * Couple of helper functions - make the code slightly cleaner. + */ + +static inline void ext2_inc_count(struct inode *inode) +{ + inode->i_nlink++; + mark_inode_dirty(inode); +} + +static inline void ext2_dec_count(struct inode *inode) +{ + inode->i_nlink--; + mark_inode_dirty(inode); +} + static inline int ext2_add_nondir(struct dentry *dentry, struct inode *inode) { int err = ext2_add_link(dentry, inode); @@ -44,7 +60,7 @@ static inline int ext2_add_nondir(struct dentry *dentry, struct inode *inode) d_instantiate(dentry, inode); return 0; } - inode_dec_link_count(inode); + ext2_dec_count(inode); iput(inode); return err; } @@ -187,7 +203,7 @@ out: return err; out_fail: - inode_dec_link_count(inode); + ext2_dec_count(inode); iput (inode); goto out; } @@ -201,7 +217,7 @@ static int ext2_link (struct dentry * old_dentry, struct inode * dir, return -EMLINK; inode->i_ctime = CURRENT_TIME_SEC; - inode_inc_link_count(inode); + ext2_inc_count(inode); atomic_inc(&inode->i_count); return ext2_add_nondir(dentry, inode); @@ -215,7 +231,7 @@ static int ext2_mkdir(struct inode * dir, struct dentry * dentry, int mode) if (dir->i_nlink >= EXT2_LINK_MAX) goto out; - inode_inc_link_count(dir); + ext2_inc_count(dir); inode = ext2_new_inode (dir, S_IFDIR | mode); err = PTR_ERR(inode); @@ -229,7 +245,7 @@ static int ext2_mkdir(struct inode * dir, struct dentry * dentry, int mode) else inode->i_mapping->a_ops = &ext2_aops; - inode_inc_link_count(inode); + ext2_inc_count(inode); err = ext2_make_empty(inode, dir); if (err) @@ -244,11 +260,11 @@ out: return err; out_fail: - inode_dec_link_count(inode); - inode_dec_link_count(inode); + ext2_dec_count(inode); + ext2_dec_count(inode); iput(inode); out_dir: - inode_dec_link_count(dir); + ext2_dec_count(dir); goto out; } @@ -268,7 +284,7 @@ static int ext2_unlink(struct inode * dir, struct dentry *dentry) goto out; inode->i_ctime = dir->i_ctime; - inode_dec_link_count(inode); + ext2_dec_count(inode); err = 0; out: return err; @@ -283,8 +299,8 @@ static int ext2_rmdir (struct inode * dir, struct dentry *dentry) err = ext2_unlink(dir, dentry); if (!err) { inode->i_size = 0; - inode_dec_link_count(inode); - inode_dec_link_count(dir); + ext2_dec_count(inode); + ext2_dec_count(dir); } } return err; @@ -324,41 +340,41 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry, new_de = ext2_find_entry (new_dir, new_dentry, &new_page); if (!new_de) goto out_dir; - inode_inc_link_count(old_inode); + ext2_inc_count(old_inode); ext2_set_link(new_dir, new_de, new_page, old_inode); new_inode->i_ctime = CURRENT_TIME_SEC; if (dir_de) new_inode->i_nlink--; - inode_dec_link_count(new_inode); + ext2_dec_count(new_inode); } else { if (dir_de) { err = -EMLINK; if (new_dir->i_nlink >= EXT2_LINK_MAX) goto out_dir; } - inode_inc_link_count(old_inode); + ext2_inc_count(old_inode); err = ext2_add_link(new_dentry, old_inode); if (err) { - inode_dec_link_count(old_inode); + ext2_dec_count(old_inode); goto out_dir; } if (dir_de) - inode_inc_link_count(new_dir); + ext2_inc_count(new_dir); } /* * Like most other Unix systems, set the ctime for inodes on a * rename. - * inode_dec_link_count() will mark the inode dirty. + * ext2_dec_count() will mark the inode dirty. */ old_inode->i_ctime = CURRENT_TIME_SEC; ext2_delete_entry (old_de, old_page); - inode_dec_link_count(old_inode); + ext2_dec_count(old_inode); if (dir_de) { ext2_set_link(old_inode, dir_de, dir_page, new_dir); - inode_dec_link_count(old_dir); + ext2_dec_count(old_dir); } return 0;