Commit d8c76e6f authored by Dave Hansen's avatar Dave Hansen Committed by Linus Torvalds

[PATCH] r/o bind mount prepwork: inc_nlink() helper

This is mostly included for parity with dec_nlink(), where we will have some
more hooks.  This one should stay pretty darn straightforward for now.
Signed-off-by: default avatarDave Hansen <haveblue@us.ibm.com>
Acked-by: default avatarChristoph Hellwig <hch@lst.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 9a53c3a7
...@@ -66,8 +66,8 @@ static int ipathfs_mknod(struct inode *dir, struct dentry *dentry, ...@@ -66,8 +66,8 @@ static int ipathfs_mknod(struct inode *dir, struct dentry *dentry,
inode->i_private = data; inode->i_private = data;
if ((mode & S_IFMT) == S_IFDIR) { if ((mode & S_IFMT) == S_IFDIR) {
inode->i_op = &simple_dir_inode_operations; inode->i_op = &simple_dir_inode_operations;
inode->i_nlink++; inc_nlink(inode);
dir->i_nlink++; inc_nlink(dir);
} }
inode->i_fop = fops; inode->i_fop = fops;
......
...@@ -263,7 +263,7 @@ static struct inode *usbfs_get_inode (struct super_block *sb, int mode, dev_t de ...@@ -263,7 +263,7 @@ static struct inode *usbfs_get_inode (struct super_block *sb, int mode, dev_t de
inode->i_fop = &simple_dir_operations; inode->i_fop = &simple_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */ /* directory inodes start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
break; break;
} }
} }
...@@ -295,7 +295,7 @@ static int usbfs_mkdir (struct inode *dir, struct dentry *dentry, int mode) ...@@ -295,7 +295,7 @@ static int usbfs_mkdir (struct inode *dir, struct dentry *dentry, int mode)
mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR; mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR;
res = usbfs_mknod (dir, dentry, mode, 0); res = usbfs_mknod (dir, dentry, mode, 0);
if (!res) if (!res)
dir->i_nlink++; inc_nlink(dir);
return res; return res;
} }
......
...@@ -233,7 +233,7 @@ struct inode *v9fs_get_inode(struct super_block *sb, int mode) ...@@ -233,7 +233,7 @@ struct inode *v9fs_get_inode(struct super_block *sb, int mode)
inode->i_op = &v9fs_symlink_inode_operations; inode->i_op = &v9fs_symlink_inode_operations;
break; break;
case S_IFDIR: case S_IFDIR:
inode->i_nlink++; inc_nlink(inode);
if(v9ses->extended) if(v9ses->extended)
inode->i_op = &v9fs_dir_inode_operations_ext; inode->i_op = &v9fs_dir_inode_operations_ext;
else else
......
...@@ -466,7 +466,7 @@ static int autofs_root_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -466,7 +466,7 @@ static int autofs_root_mkdir(struct inode *dir, struct dentry *dentry, int mode)
ent->dentry = dentry; ent->dentry = dentry;
autofs_hash_insert(dh,ent); autofs_hash_insert(dh,ent);
dir->i_nlink++; inc_nlink(dir);
d_instantiate(dentry, iget(dir->i_sb,ino)); d_instantiate(dentry, iget(dir->i_sb,ino));
unlock_kernel(); unlock_kernel();
......
...@@ -713,7 +713,7 @@ static int autofs4_dir_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -713,7 +713,7 @@ static int autofs4_dir_mkdir(struct inode *dir, struct dentry *dentry, int mode)
if (p_ino && dentry->d_parent != dentry) if (p_ino && dentry->d_parent != dentry)
atomic_inc(&p_ino->count); atomic_inc(&p_ino->count);
ino->inode = inode; ino->inode = inode;
dir->i_nlink++; inc_nlink(dir);
dir->i_mtime = CURRENT_TIME; dir->i_mtime = CURRENT_TIME;
return 0; return 0;
......
...@@ -163,7 +163,7 @@ static int bfs_link(struct dentry * old, struct inode * dir, struct dentry * new ...@@ -163,7 +163,7 @@ static int bfs_link(struct dentry * old, struct inode * dir, struct dentry * new
unlock_kernel(); unlock_kernel();
return err; return err;
} }
inode->i_nlink++; inc_nlink(inode);
inode->i_ctime = CURRENT_TIME_SEC; inode->i_ctime = CURRENT_TIME_SEC;
mark_inode_dirty(inode); mark_inode_dirty(inode);
atomic_inc(&inode->i_count); atomic_inc(&inode->i_count);
......
...@@ -735,7 +735,7 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode) ...@@ -735,7 +735,7 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode)
cFYI(1, ("cifs_mkdir returned 0x%x", rc)); cFYI(1, ("cifs_mkdir returned 0x%x", rc));
d_drop(direntry); d_drop(direntry);
} else { } else {
inode->i_nlink++; inc_nlink(inode);
if (pTcon->ses->capabilities & CAP_UNIX) if (pTcon->ses->capabilities & CAP_UNIX)
rc = cifs_get_inode_info_unix(&newinode, full_path, rc = cifs_get_inode_info_unix(&newinode, full_path,
inode->i_sb,xid); inode->i_sb,xid);
......
...@@ -304,7 +304,7 @@ static int coda_link(struct dentry *source_de, struct inode *dir_inode, ...@@ -304,7 +304,7 @@ static int coda_link(struct dentry *source_de, struct inode *dir_inode,
coda_dir_changed(dir_inode, 0); coda_dir_changed(dir_inode, 0);
atomic_inc(&inode->i_count); atomic_inc(&inode->i_count);
d_instantiate(de, inode); d_instantiate(de, inode);
inode->i_nlink++; inc_nlink(inode);
out: out:
unlock_kernel(); unlock_kernel();
......
...@@ -139,7 +139,7 @@ static int init_dir(struct inode * inode) ...@@ -139,7 +139,7 @@ static int init_dir(struct inode * inode)
inode->i_fop = &configfs_dir_operations; inode->i_fop = &configfs_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */ /* directory inodes start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
return 0; return 0;
} }
...@@ -169,7 +169,7 @@ static int create_dir(struct config_item * k, struct dentry * p, ...@@ -169,7 +169,7 @@ static int create_dir(struct config_item * k, struct dentry * p,
if (!error) { if (!error) {
error = configfs_create(d, mode, init_dir); error = configfs_create(d, mode, init_dir);
if (!error) { if (!error) {
p->d_inode->i_nlink++; inc_nlink(p->d_inode);
(d)->d_op = &configfs_dentry_ops; (d)->d_op = &configfs_dentry_ops;
} else { } else {
struct configfs_dirent *sd = d->d_fsdata; struct configfs_dirent *sd = d->d_fsdata;
......
...@@ -84,7 +84,7 @@ static int configfs_fill_super(struct super_block *sb, void *data, int silent) ...@@ -84,7 +84,7 @@ static int configfs_fill_super(struct super_block *sb, void *data, int silent)
inode->i_op = &configfs_dir_inode_operations; inode->i_op = &configfs_dir_inode_operations;
inode->i_fop = &configfs_dir_operations; inode->i_fop = &configfs_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */ /* directory inodes start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
} else { } else {
pr_debug("configfs: could not get root inode\n"); pr_debug("configfs: could not get root inode\n");
return -ENOMEM; return -ENOMEM;
......
...@@ -54,7 +54,7 @@ static struct inode *debugfs_get_inode(struct super_block *sb, int mode, dev_t d ...@@ -54,7 +54,7 @@ static struct inode *debugfs_get_inode(struct super_block *sb, int mode, dev_t d
inode->i_fop = &simple_dir_operations; inode->i_fop = &simple_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */ /* directory inodes start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
break; break;
} }
} }
...@@ -87,7 +87,7 @@ static int debugfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -87,7 +87,7 @@ static int debugfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR; mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR;
res = debugfs_mknod(dir, dentry, mode, 0); res = debugfs_mknod(dir, dentry, mode, 0);
if (!res) if (!res)
dir->i_nlink++; inc_nlink(dir);
return res; return res;
} }
......
...@@ -1616,7 +1616,7 @@ static int ext3_delete_entry (handle_t *handle, ...@@ -1616,7 +1616,7 @@ static int ext3_delete_entry (handle_t *handle,
*/ */
static inline void ext3_inc_count(handle_t *handle, struct inode *inode) static inline void ext3_inc_count(handle_t *handle, struct inode *inode)
{ {
inode->i_nlink++; inc_nlink(inode);
} }
static inline void ext3_dec_count(handle_t *handle, struct inode *inode) static inline void ext3_dec_count(handle_t *handle, struct inode *inode)
...@@ -1775,7 +1775,7 @@ static int ext3_mkdir(struct inode * dir, struct dentry * dentry, int mode) ...@@ -1775,7 +1775,7 @@ static int ext3_mkdir(struct inode * dir, struct dentry * dentry, int mode)
iput (inode); iput (inode);
goto out_stop; goto out_stop;
} }
dir->i_nlink++; inc_nlink(dir);
ext3_update_dx_flag(dir); ext3_update_dx_flag(dir);
ext3_mark_inode_dirty(handle, dir); ext3_mark_inode_dirty(handle, dir);
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
...@@ -2341,7 +2341,7 @@ static int ext3_rename (struct inode * old_dir, struct dentry *old_dentry, ...@@ -2341,7 +2341,7 @@ static int ext3_rename (struct inode * old_dir, struct dentry *old_dentry,
if (new_inode) { if (new_inode) {
drop_nlink(new_inode); drop_nlink(new_inode);
} else { } else {
new_dir->i_nlink++; inc_nlink(new_dir);
ext3_update_dx_flag(new_dir); ext3_update_dx_flag(new_dir);
ext3_mark_inode_dirty(handle, new_dir); ext3_mark_inode_dirty(handle, new_dir);
} }
......
...@@ -116,7 +116,7 @@ int fuse_ctl_add_conn(struct fuse_conn *fc) ...@@ -116,7 +116,7 @@ int fuse_ctl_add_conn(struct fuse_conn *fc)
return 0; return 0;
parent = fuse_control_sb->s_root; parent = fuse_control_sb->s_root;
parent->d_inode->i_nlink++; inc_nlink(parent->d_inode);
sprintf(name, "%llu", (unsigned long long) fc->id); sprintf(name, "%llu", (unsigned long long) fc->id);
parent = fuse_ctl_add_dentry(parent, fc, name, S_IFDIR | 0500, 2, parent = fuse_ctl_add_dentry(parent, fc, name, S_IFDIR | 0500, 2,
&simple_dir_inode_operations, &simple_dir_inode_operations,
......
...@@ -298,7 +298,7 @@ static int hfsplus_link(struct dentry *src_dentry, struct inode *dst_dir, ...@@ -298,7 +298,7 @@ static int hfsplus_link(struct dentry *src_dentry, struct inode *dst_dir,
if (res) if (res)
return res; return res;
inode->i_nlink++; inc_nlink(inode);
hfsplus_instantiate(dst_dentry, inode, cnid); hfsplus_instantiate(dst_dentry, inode, cnid);
atomic_inc(&inode->i_count); atomic_inc(&inode->i_count);
inode->i_ctime = CURRENT_TIME_SEC; inode->i_ctime = CURRENT_TIME_SEC;
......
...@@ -89,7 +89,7 @@ static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -89,7 +89,7 @@ static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
brelse(bh); brelse(bh);
hpfs_mark_4buffers_dirty(&qbh0); hpfs_mark_4buffers_dirty(&qbh0);
hpfs_brelse4(&qbh0); hpfs_brelse4(&qbh0);
dir->i_nlink++; inc_nlink(dir);
insert_inode_hash(result); insert_inode_hash(result);
if (result->i_uid != current->fsuid || if (result->i_uid != current->fsuid ||
...@@ -635,7 +635,7 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry, ...@@ -635,7 +635,7 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
end: end:
hpfs_i(i)->i_parent_dir = new_dir->i_ino; hpfs_i(i)->i_parent_dir = new_dir->i_ino;
if (S_ISDIR(i->i_mode)) { if (S_ISDIR(i->i_mode)) {
new_dir->i_nlink++; inc_nlink(new_dir);
drop_nlink(old_dir); drop_nlink(old_dir);
} }
if ((fnode = hpfs_map_fnode(i->i_sb, i->i_ino, &bh))) { if ((fnode = hpfs_map_fnode(i->i_sb, i->i_ino, &bh))) {
......
...@@ -377,7 +377,7 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb, uid_t uid, ...@@ -377,7 +377,7 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb, uid_t uid,
inode->i_fop = &simple_dir_operations; inode->i_fop = &simple_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */ /* directory inodes start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
break; break;
case S_IFLNK: case S_IFLNK:
inode->i_op = &page_symlink_inode_operations; inode->i_op = &page_symlink_inode_operations;
...@@ -418,7 +418,7 @@ static int hugetlbfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -418,7 +418,7 @@ static int hugetlbfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
{ {
int retval = hugetlbfs_mknod(dir, dentry, mode | S_IFDIR, 0); int retval = hugetlbfs_mknod(dir, dentry, mode | S_IFDIR, 0);
if (!retval) if (!retval)
dir->i_nlink++; inc_nlink(dir);
return retval; return retval;
} }
......
...@@ -588,7 +588,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) ...@@ -588,7 +588,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode)
} }
dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime));
dir_i->i_nlink++; inc_nlink(dir_i);
jffs2_free_raw_dirent(rd); jffs2_free_raw_dirent(rd);
...@@ -836,7 +836,7 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry, ...@@ -836,7 +836,7 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
/* If it was a directory we moved, and there was no victim, /* If it was a directory we moved, and there was no victim,
increase i_nlink on its new parent */ increase i_nlink on its new parent */
if (S_ISDIR(old_dentry->d_inode->i_mode) && !victim_f) if (S_ISDIR(old_dentry->d_inode->i_mode) && !victim_f)
new_dir_i->i_nlink++; inc_nlink(new_dir_i);
/* Unlink the original */ /* Unlink the original */
ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i), ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i),
...@@ -848,7 +848,7 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry, ...@@ -848,7 +848,7 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
/* Oh shit. We really ought to make a single node which can do both atomically */ /* Oh shit. We really ought to make a single node which can do both atomically */
struct jffs2_inode_info *f = JFFS2_INODE_INFO(old_dentry->d_inode); struct jffs2_inode_info *f = JFFS2_INODE_INFO(old_dentry->d_inode);
down(&f->sem); down(&f->sem);
old_dentry->d_inode->i_nlink++; inc_nlink(old_dentry->d_inode);
if (f->inocache) if (f->inocache)
f->inocache->nlink++; f->inocache->nlink++;
up(&f->sem); up(&f->sem);
......
...@@ -277,13 +277,13 @@ void jffs2_read_inode (struct inode *inode) ...@@ -277,13 +277,13 @@ void jffs2_read_inode (struct inode *inode)
for (fd=f->dents; fd; fd = fd->next) { for (fd=f->dents; fd; fd = fd->next) {
if (fd->type == DT_DIR && fd->ino) if (fd->type == DT_DIR && fd->ino)
inode->i_nlink++; inc_nlink(inode);
} }
/* and '..' */ /* and '..' */
inode->i_nlink++; inc_nlink(inode);
/* Root dir gets i_nlink 3 for some reason */ /* Root dir gets i_nlink 3 for some reason */
if (inode->i_ino == 1) if (inode->i_ino == 1)
inode->i_nlink++; inc_nlink(inode);
inode->i_op = &jffs2_dir_inode_operations; inode->i_op = &jffs2_dir_inode_operations;
inode->i_fop = &jffs2_dir_operations; inode->i_fop = &jffs2_dir_operations;
......
...@@ -292,7 +292,7 @@ static int jfs_mkdir(struct inode *dip, struct dentry *dentry, int mode) ...@@ -292,7 +292,7 @@ static int jfs_mkdir(struct inode *dip, struct dentry *dentry, int mode)
mark_inode_dirty(ip); mark_inode_dirty(ip);
/* update parent directory inode */ /* update parent directory inode */
dip->i_nlink++; /* for '..' from child directory */ inc_nlink(dip); /* for '..' from child directory */
dip->i_ctime = dip->i_mtime = CURRENT_TIME; dip->i_ctime = dip->i_mtime = CURRENT_TIME;
mark_inode_dirty(dip); mark_inode_dirty(dip);
...@@ -822,7 +822,7 @@ static int jfs_link(struct dentry *old_dentry, ...@@ -822,7 +822,7 @@ static int jfs_link(struct dentry *old_dentry,
goto free_dname; goto free_dname;
/* update object inode */ /* update object inode */
ip->i_nlink++; /* for new link */ inc_nlink(ip); /* for new link */
ip->i_ctime = CURRENT_TIME; ip->i_ctime = CURRENT_TIME;
dir->i_ctime = dir->i_mtime = CURRENT_TIME; dir->i_ctime = dir->i_mtime = CURRENT_TIME;
mark_inode_dirty(dir); mark_inode_dirty(dir);
...@@ -1206,7 +1206,7 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry, ...@@ -1206,7 +1206,7 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
goto out4; goto out4;
} }
if (S_ISDIR(old_ip->i_mode)) if (S_ISDIR(old_ip->i_mode))
new_dir->i_nlink++; inc_nlink(new_dir);
} }
/* /*
* Remove old directory entry * Remove old directory entry
......
...@@ -243,7 +243,7 @@ int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *den ...@@ -243,7 +243,7 @@ int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *den
struct inode *inode = old_dentry->d_inode; struct inode *inode = old_dentry->d_inode;
inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME; inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
inode->i_nlink++; inc_nlink(inode);
atomic_inc(&inode->i_count); atomic_inc(&inode->i_count);
dget(dentry); dget(dentry);
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
...@@ -306,7 +306,7 @@ int simple_rename(struct inode *old_dir, struct dentry *old_dentry, ...@@ -306,7 +306,7 @@ int simple_rename(struct inode *old_dir, struct dentry *old_dentry,
drop_nlink(old_dir); drop_nlink(old_dir);
} else if (they_are_dirs) { } else if (they_are_dirs) {
drop_nlink(old_dir); drop_nlink(old_dir);
new_dir->i_nlink++; inc_nlink(new_dir);
} }
old_dir->i_ctime = old_dir->i_mtime = new_dir->i_ctime = old_dir->i_ctime = old_dir->i_mtime = new_dir->i_ctime =
......
...@@ -389,7 +389,7 @@ static int msdos_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -389,7 +389,7 @@ static int msdos_mkdir(struct inode *dir, struct dentry *dentry, int mode)
err = msdos_add_entry(dir, msdos_name, 1, is_hid, cluster, &ts, &sinfo); err = msdos_add_entry(dir, msdos_name, 1, is_hid, cluster, &ts, &sinfo);
if (err) if (err)
goto out_free; goto out_free;
dir->i_nlink++; inc_nlink(dir);
inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos); inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);
brelse(sinfo.bh); brelse(sinfo.bh);
...@@ -551,7 +551,7 @@ static int do_msdos_rename(struct inode *old_dir, unsigned char *old_name, ...@@ -551,7 +551,7 @@ static int do_msdos_rename(struct inode *old_dir, unsigned char *old_name,
} }
drop_nlink(old_dir); drop_nlink(old_dir);
if (!new_inode) if (!new_inode)
new_dir->i_nlink++; inc_nlink(new_dir);
} }
err = fat_remove_entries(old_dir, &old_sinfo); /* and releases bh */ err = fat_remove_entries(old_dir, &old_sinfo); /* and releases bh */
......
...@@ -338,7 +338,7 @@ static struct inode *dlmfs_get_root_inode(struct super_block *sb) ...@@ -338,7 +338,7 @@ static struct inode *dlmfs_get_root_inode(struct super_block *sb)
inode->i_blocks = 0; inode->i_blocks = 0;
inode->i_mapping->backing_dev_info = &dlmfs_backing_dev_info; inode->i_mapping->backing_dev_info = &dlmfs_backing_dev_info;
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
inode->i_nlink++; inc_nlink(inode);
inode->i_fop = &simple_dir_operations; inode->i_fop = &simple_dir_operations;
inode->i_op = &dlmfs_root_inode_operations; inode->i_op = &dlmfs_root_inode_operations;
...@@ -395,7 +395,7 @@ static struct inode *dlmfs_get_inode(struct inode *parent, ...@@ -395,7 +395,7 @@ static struct inode *dlmfs_get_inode(struct inode *parent,
/* directory inodes start off with i_nlink == /* directory inodes start off with i_nlink ==
* 2 (for "." entry) */ * 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
break; break;
} }
...@@ -449,7 +449,7 @@ static int dlmfs_mkdir(struct inode * dir, ...@@ -449,7 +449,7 @@ static int dlmfs_mkdir(struct inode * dir,
} }
ip->ip_dlm = dlm; ip->ip_dlm = dlm;
dir->i_nlink++; inc_nlink(dir);
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
dget(dentry); /* Extra count - pin the dentry in core */ dget(dentry); /* Extra count - pin the dentry in core */
......
...@@ -429,7 +429,7 @@ static int ocfs2_mknod(struct inode *dir, ...@@ -429,7 +429,7 @@ static int ocfs2_mknod(struct inode *dir,
mlog_errno(status); mlog_errno(status);
goto leave; goto leave;
} }
dir->i_nlink++; inc_nlink(dir);
} }
status = ocfs2_add_entry(handle, dentry, inode, status = ocfs2_add_entry(handle, dentry, inode,
...@@ -730,7 +730,7 @@ static int ocfs2_link(struct dentry *old_dentry, ...@@ -730,7 +730,7 @@ static int ocfs2_link(struct dentry *old_dentry,
goto bail; goto bail;
} }
inode->i_nlink++; inc_nlink(inode);
inode->i_ctime = CURRENT_TIME; inode->i_ctime = CURRENT_TIME;
fe->i_links_count = cpu_to_le16(inode->i_nlink); fe->i_links_count = cpu_to_le16(inode->i_nlink);
fe->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec); fe->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec);
...@@ -952,7 +952,7 @@ static int ocfs2_unlink(struct inode *dir, ...@@ -952,7 +952,7 @@ static int ocfs2_unlink(struct inode *dir,
parent_node_bh); parent_node_bh);
if (status < 0) { if (status < 0) {
mlog_errno(status); mlog_errno(status);
dir->i_nlink++; inc_nlink(dir);
} }
} }
...@@ -1382,7 +1382,7 @@ static int ocfs2_rename(struct inode *old_dir, ...@@ -1382,7 +1382,7 @@ static int ocfs2_rename(struct inode *old_dir,
if (new_inode) { if (new_inode) {
new_inode->i_nlink--; new_inode->i_nlink--;
} else { } else {
new_dir->i_nlink++; inc_nlink(new_dir);
mark_inode_dirty(new_dir); mark_inode_dirty(new_dir);
} }
} }
......
...@@ -75,7 +75,7 @@ struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev) ...@@ -75,7 +75,7 @@ struct inode *ramfs_get_inode(struct super_block *sb, int mode, dev_t dev)
inode->i_fop = &simple_dir_operations; inode->i_fop = &simple_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */ /* directory inodes start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
break; break;
case S_IFLNK: case S_IFLNK:
inode->i_op = &page_symlink_inode_operations; inode->i_op = &page_symlink_inode_operations;
...@@ -113,7 +113,7 @@ static int ramfs_mkdir(struct inode * dir, struct dentry * dentry, int mode) ...@@ -113,7 +113,7 @@ static int ramfs_mkdir(struct inode * dir, struct dentry * dentry, int mode)
{ {
int retval = ramfs_mknod(dir, dentry, mode | S_IFDIR, 0); int retval = ramfs_mknod(dir, dentry, mode | S_IFDIR, 0);
if (!retval) if (!retval)
dir->i_nlink++; inc_nlink(dir);
return retval; return retval;
} }
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/quotaops.h> #include <linux/quotaops.h>
#define INC_DIR_INODE_NLINK(i) if (i->i_nlink != 1) { i->i_nlink++; if (i->i_nlink >= REISERFS_LINK_MAX) i->i_nlink=1; } #define INC_DIR_INODE_NLINK(i) if (i->i_nlink != 1) { inc_nlink(i); if (i->i_nlink >= REISERFS_LINK_MAX) i->i_nlink=1; }
#define DEC_DIR_INODE_NLINK(i) if (i->i_nlink != 1) drop_nlink(i); #define DEC_DIR_INODE_NLINK(i) if (i->i_nlink != 1) drop_nlink(i);
// directory item contains array of entry headers. This performs // directory item contains array of entry headers. This performs
...@@ -1006,7 +1006,7 @@ static int reiserfs_unlink(struct inode *dir, struct dentry *dentry) ...@@ -1006,7 +1006,7 @@ static int reiserfs_unlink(struct inode *dir, struct dentry *dentry)
reiserfs_cut_from_item(&th, &path, &(de.de_entry_key), dir, NULL, reiserfs_cut_from_item(&th, &path, &(de.de_entry_key), dir, NULL,
0); 0);
if (retval < 0) { if (retval < 0) {
inode->i_nlink++; inc_nlink(inode);
goto end_unlink; goto end_unlink;
} }
inode->i_ctime = CURRENT_TIME_SEC; inode->i_ctime = CURRENT_TIME_SEC;
...@@ -1143,7 +1143,7 @@ static int reiserfs_link(struct dentry *old_dentry, struct inode *dir, ...@@ -1143,7 +1143,7 @@ static int reiserfs_link(struct dentry *old_dentry, struct inode *dir,
} }
/* inc before scheduling so reiserfs_unlink knows we are here */ /* inc before scheduling so reiserfs_unlink knows we are here */
inode->i_nlink++; inc_nlink(inode);
retval = journal_begin(&th, dir->i_sb, jbegin_count); retval = journal_begin(&th, dir->i_sb, jbegin_count);
if (retval) { if (retval) {
......
...@@ -103,7 +103,7 @@ static int init_dir(struct inode * inode) ...@@ -103,7 +103,7 @@ static int init_dir(struct inode * inode)
inode->i_fop = &sysfs_dir_operations; inode->i_fop = &sysfs_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */ /* directory inodes start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
return 0; return 0;
} }
...@@ -137,7 +137,7 @@ static int create_dir(struct kobject * k, struct dentry * p, ...@@ -137,7 +137,7 @@ static int create_dir(struct kobject * k, struct dentry * p,
if (!error) { if (!error) {
error = sysfs_create(*d, mode, init_dir); error = sysfs_create(*d, mode, init_dir);
if (!error) { if (!error) {
p->d_inode->i_nlink++; inc_nlink(p->d_inode);
(*d)->d_op = &sysfs_dentry_ops; (*d)->d_op = &sysfs_dentry_ops;
d_rehash(*d); d_rehash(*d);
} }
......
...@@ -49,7 +49,7 @@ static int sysfs_fill_super(struct super_block *sb, void *data, int silent) ...@@ -49,7 +49,7 @@ static int sysfs_fill_super(struct super_block *sb, void *data, int silent)
inode->i_op = &sysfs_dir_inode_operations; inode->i_op = &sysfs_dir_inode_operations;
inode->i_fop = &sysfs_dir_operations; inode->i_fop = &sysfs_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */ /* directory inodes start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
} else { } else {
pr_debug("sysfs: could not get root inode\n"); pr_debug("sysfs: could not get root inode\n");
return -ENOMEM; return -ENOMEM;
......
...@@ -1165,7 +1165,7 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) ...@@ -1165,7 +1165,7 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh)
inode->i_op = &udf_dir_inode_operations; inode->i_op = &udf_dir_inode_operations;
inode->i_fop = &udf_dir_operations; inode->i_fop = &udf_dir_operations;
inode->i_mode |= S_IFDIR; inode->i_mode |= S_IFDIR;
inode->i_nlink ++; inc_nlink(inode);
break; break;
} }
case ICBTAG_FILE_TYPE_REALTIME: case ICBTAG_FILE_TYPE_REALTIME:
......
...@@ -762,7 +762,7 @@ static int udf_mkdir(struct inode * dir, struct dentry * dentry, int mode) ...@@ -762,7 +762,7 @@ static int udf_mkdir(struct inode * dir, struct dentry * dentry, int mode)
cpu_to_le32(UDF_I_UNIQUE(inode) & 0x00000000FFFFFFFFUL); cpu_to_le32(UDF_I_UNIQUE(inode) & 0x00000000FFFFFFFFUL);
cfi.fileCharacteristics |= FID_FILE_CHAR_DIRECTORY; cfi.fileCharacteristics |= FID_FILE_CHAR_DIRECTORY;
udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL); udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL);
dir->i_nlink++; inc_nlink(dir);
mark_inode_dirty(dir); mark_inode_dirty(dir);
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
if (fibh.sbh != fibh.ebh) if (fibh.sbh != fibh.ebh)
...@@ -1147,7 +1147,7 @@ static int udf_link(struct dentry * old_dentry, struct inode * dir, ...@@ -1147,7 +1147,7 @@ static int udf_link(struct dentry * old_dentry, struct inode * dir,
if (fibh.sbh != fibh.ebh) if (fibh.sbh != fibh.ebh)
udf_release_data(fibh.ebh); udf_release_data(fibh.ebh);
udf_release_data(fibh.sbh); udf_release_data(fibh.sbh);
inode->i_nlink ++; inc_nlink(inode);
inode->i_ctime = current_fs_time(inode->i_sb); inode->i_ctime = current_fs_time(inode->i_sb);
mark_inode_dirty(inode); mark_inode_dirty(inode);
atomic_inc(&inode->i_count); atomic_inc(&inode->i_count);
...@@ -1282,7 +1282,7 @@ static int udf_rename (struct inode * old_dir, struct dentry * old_dentry, ...@@ -1282,7 +1282,7 @@ static int udf_rename (struct inode * old_dir, struct dentry * old_dentry,
} }
else else
{ {
new_dir->i_nlink ++; inc_nlink(new_dir);
mark_inode_dirty(new_dir); mark_inode_dirty(new_dir);
} }
} }
......
...@@ -837,7 +837,7 @@ static int vfat_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -837,7 +837,7 @@ static int vfat_mkdir(struct inode *dir, struct dentry *dentry, int mode)
if (err) if (err)
goto out_free; goto out_free;
dir->i_version++; dir->i_version++;
dir->i_nlink++; inc_nlink(dir);
inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos); inode = fat_build_inode(sb, sinfo.de, sinfo.i_pos);
brelse(sinfo.bh); brelse(sinfo.bh);
...@@ -932,7 +932,7 @@ static int vfat_rename(struct inode *old_dir, struct dentry *old_dentry, ...@@ -932,7 +932,7 @@ static int vfat_rename(struct inode *old_dir, struct dentry *old_dentry,
} }
drop_nlink(old_dir); drop_nlink(old_dir);
if (!new_inode) if (!new_inode)
new_dir->i_nlink++; inc_nlink(new_dir);
} }
err = fat_remove_entries(old_dir, &old_sinfo); /* and releases bh */ err = fat_remove_entries(old_dir, &old_sinfo); /* and releases bh */
......
...@@ -1219,9 +1219,14 @@ static inline void mark_inode_dirty_sync(struct inode *inode) ...@@ -1219,9 +1219,14 @@ static inline void mark_inode_dirty_sync(struct inode *inode)
__mark_inode_dirty(inode, I_DIRTY_SYNC); __mark_inode_dirty(inode, I_DIRTY_SYNC);
} }
static inline void inode_inc_link_count(struct inode *inode) static inline void inc_nlink(struct inode *inode)
{ {
inode->i_nlink++; inode->i_nlink++;
}
static inline void inode_inc_link_count(struct inode *inode)
{
inc_nlink(inode);
mark_inode_dirty(inode); mark_inode_dirty(inode);
} }
......
...@@ -168,7 +168,7 @@ static struct inode *mqueue_get_inode(struct super_block *sb, int mode, ...@@ -168,7 +168,7 @@ static struct inode *mqueue_get_inode(struct super_block *sb, int mode,
/* all is ok */ /* all is ok */
info->user = get_uid(u); info->user = get_uid(u);
} else if (S_ISDIR(mode)) { } else if (S_ISDIR(mode)) {
inode->i_nlink++; inc_nlink(inode);
/* Some things misbehave if size == 0 on a directory */ /* Some things misbehave if size == 0 on a directory */
inode->i_size = 2 * DIRENT_SIZE; inode->i_size = 2 * DIRENT_SIZE;
inode->i_op = &mqueue_dir_inode_operations; inode->i_op = &mqueue_dir_inode_operations;
......
...@@ -377,7 +377,7 @@ static int cpuset_fill_super(struct super_block *sb, void *unused_data, ...@@ -377,7 +377,7 @@ static int cpuset_fill_super(struct super_block *sb, void *unused_data,
inode->i_op = &simple_dir_inode_operations; inode->i_op = &simple_dir_inode_operations;
inode->i_fop = &simple_dir_operations; inode->i_fop = &simple_dir_operations;
/* directories start off with i_nlink == 2 (for "." entry) */ /* directories start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
} else { } else {
return -ENOMEM; return -ENOMEM;
} }
...@@ -1565,7 +1565,7 @@ static int cpuset_create_file(struct dentry *dentry, int mode) ...@@ -1565,7 +1565,7 @@ static int cpuset_create_file(struct dentry *dentry, int mode)
inode->i_fop = &simple_dir_operations; inode->i_fop = &simple_dir_operations;
/* start off with i_nlink == 2 (for "." entry) */ /* start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
} else if (S_ISREG(mode)) { } else if (S_ISREG(mode)) {
inode->i_size = 0; inode->i_size = 0;
inode->i_fop = &cpuset_file_operations; inode->i_fop = &cpuset_file_operations;
...@@ -1598,7 +1598,7 @@ static int cpuset_create_dir(struct cpuset *cs, const char *name, int mode) ...@@ -1598,7 +1598,7 @@ static int cpuset_create_dir(struct cpuset *cs, const char *name, int mode)
error = cpuset_create_file(dentry, S_IFDIR | mode); error = cpuset_create_file(dentry, S_IFDIR | mode);
if (!error) { if (!error) {
dentry->d_fsdata = cs; dentry->d_fsdata = cs;
parent->d_inode->i_nlink++; inc_nlink(parent->d_inode);
cs->dentry = dentry; cs->dentry = dentry;
} }
dput(dentry); dput(dentry);
...@@ -2033,7 +2033,7 @@ int __init cpuset_init(void) ...@@ -2033,7 +2033,7 @@ int __init cpuset_init(void)
} }
root = cpuset_mount->mnt_sb->s_root; root = cpuset_mount->mnt_sb->s_root;
root->d_fsdata = &top_cpuset; root->d_fsdata = &top_cpuset;
root->d_inode->i_nlink++; inc_nlink(root->d_inode);
top_cpuset.dentry = root; top_cpuset.dentry = root;
root->d_inode->i_op = &cpuset_dir_inode_operations; root->d_inode->i_op = &cpuset_dir_inode_operations;
number_of_cpusets = 1; number_of_cpusets = 1;
......
...@@ -1379,7 +1379,7 @@ shmem_get_inode(struct super_block *sb, int mode, dev_t dev) ...@@ -1379,7 +1379,7 @@ shmem_get_inode(struct super_block *sb, int mode, dev_t dev)
&sbinfo->policy_nodes); &sbinfo->policy_nodes);
break; break;
case S_IFDIR: case S_IFDIR:
inode->i_nlink++; inc_nlink(inode);
/* Some things misbehave if size == 0 on a directory */ /* Some things misbehave if size == 0 on a directory */
inode->i_size = 2 * BOGO_DIRENT_SIZE; inode->i_size = 2 * BOGO_DIRENT_SIZE;
inode->i_op = &shmem_dir_inode_operations; inode->i_op = &shmem_dir_inode_operations;
...@@ -1715,7 +1715,7 @@ static int shmem_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -1715,7 +1715,7 @@ static int shmem_mkdir(struct inode *dir, struct dentry *dentry, int mode)
if ((error = shmem_mknod(dir, dentry, mode | S_IFDIR, 0))) if ((error = shmem_mknod(dir, dentry, mode | S_IFDIR, 0)))
return error; return error;
dir->i_nlink++; inc_nlink(dir);
return 0; return 0;
} }
...@@ -1750,7 +1750,7 @@ static int shmem_link(struct dentry *old_dentry, struct inode *dir, struct dentr ...@@ -1750,7 +1750,7 @@ static int shmem_link(struct dentry *old_dentry, struct inode *dir, struct dentr
dir->i_size += BOGO_DIRENT_SIZE; dir->i_size += BOGO_DIRENT_SIZE;
inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME; inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
inode->i_nlink++; inc_nlink(inode);
atomic_inc(&inode->i_count); /* New dentry reference */ atomic_inc(&inode->i_count); /* New dentry reference */
dget(dentry); /* Extra pinning count for the created dentry */ dget(dentry); /* Extra pinning count for the created dentry */
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
...@@ -1807,7 +1807,7 @@ static int shmem_rename(struct inode *old_dir, struct dentry *old_dentry, struct ...@@ -1807,7 +1807,7 @@ static int shmem_rename(struct inode *old_dir, struct dentry *old_dentry, struct
drop_nlink(old_dir); drop_nlink(old_dir);
} else if (they_are_dirs) { } else if (they_are_dirs) {
drop_nlink(old_dir); drop_nlink(old_dir);
new_dir->i_nlink++; inc_nlink(new_dir);
} }
old_dir->i_size -= BOGO_DIRENT_SIZE; old_dir->i_size -= BOGO_DIRENT_SIZE;
......
...@@ -494,7 +494,7 @@ rpc_get_inode(struct super_block *sb, int mode) ...@@ -494,7 +494,7 @@ rpc_get_inode(struct super_block *sb, int mode)
case S_IFDIR: case S_IFDIR:
inode->i_fop = &simple_dir_operations; inode->i_fop = &simple_dir_operations;
inode->i_op = &simple_dir_inode_operations; inode->i_op = &simple_dir_inode_operations;
inode->i_nlink++; inc_nlink(inode);
default: default:
break; break;
} }
...@@ -571,7 +571,7 @@ rpc_populate(struct dentry *parent, ...@@ -571,7 +571,7 @@ rpc_populate(struct dentry *parent,
if (private) if (private)
rpc_inode_setowner(inode, private); rpc_inode_setowner(inode, private);
if (S_ISDIR(mode)) if (S_ISDIR(mode))
dir->i_nlink++; inc_nlink(dir);
d_add(dentry, inode); d_add(dentry, inode);
} }
mutex_unlock(&dir->i_mutex); mutex_unlock(&dir->i_mutex);
...@@ -593,7 +593,7 @@ __rpc_mkdir(struct inode *dir, struct dentry *dentry) ...@@ -593,7 +593,7 @@ __rpc_mkdir(struct inode *dir, struct dentry *dentry)
goto out_err; goto out_err;
inode->i_ino = iunique(dir->i_sb, 100); inode->i_ino = iunique(dir->i_sb, 100);
d_instantiate(dentry, inode); d_instantiate(dentry, inode);
dir->i_nlink++; inc_nlink(dir);
inode_dir_notify(dir, DN_CREATE); inode_dir_notify(dir, DN_CREATE);
return 0; return 0;
out_err: out_err:
......
...@@ -78,7 +78,7 @@ static struct inode *get_inode(struct super_block *sb, int mode, dev_t dev) ...@@ -78,7 +78,7 @@ static struct inode *get_inode(struct super_block *sb, int mode, dev_t dev)
inode->i_fop = &simple_dir_operations; inode->i_fop = &simple_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */ /* directory inodes start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
break; break;
} }
} }
...@@ -111,7 +111,7 @@ static int mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -111,7 +111,7 @@ static int mkdir(struct inode *dir, struct dentry *dentry, int mode)
mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR; mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR;
res = mknod(dir, dentry, mode, 0); res = mknod(dir, dentry, mode, 0);
if (!res) if (!res)
dir->i_nlink++; inc_nlink(dir);
return res; return res;
} }
......
...@@ -1253,10 +1253,10 @@ static int sel_make_dir(struct inode *dir, struct dentry *dentry) ...@@ -1253,10 +1253,10 @@ static int sel_make_dir(struct inode *dir, struct dentry *dentry)
inode->i_op = &simple_dir_inode_operations; inode->i_op = &simple_dir_inode_operations;
inode->i_fop = &simple_dir_operations; inode->i_fop = &simple_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */ /* directory inodes start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++; inc_nlink(inode);
d_add(dentry, inode); d_add(dentry, inode);
/* bump link count on parent directory, too */ /* bump link count on parent directory, too */
dir->i_nlink++; inc_nlink(dir);
out: out:
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment