diff options
108 files changed, 301 insertions, 235 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 653380793a6c..d819ba16a0c7 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
@@ -29,6 +29,7 @@ d_hash no no no maybe | |||
29 | d_compare: yes no no maybe | 29 | d_compare: yes no no maybe |
30 | d_delete: no yes no no | 30 | d_delete: no yes no no |
31 | d_release: no no yes no | 31 | d_release: no no yes no |
32 | d_prune: no yes no no | ||
32 | d_iput: no no yes no | 33 | d_iput: no no yes no |
33 | d_dname: no no no no | 34 | d_dname: no no no no |
34 | d_automount: no no yes no | 35 | d_automount: no no yes no |
diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c index 6fe874fc5f8e..481f4f76f664 100644 --- a/arch/s390/hypfs/inode.c +++ b/arch/s390/hypfs/inode.c | |||
@@ -108,9 +108,7 @@ static struct inode *hypfs_make_inode(struct super_block *sb, int mode) | |||
108 | ret->i_gid = hypfs_info->gid; | 108 | ret->i_gid = hypfs_info->gid; |
109 | ret->i_atime = ret->i_mtime = ret->i_ctime = CURRENT_TIME; | 109 | ret->i_atime = ret->i_mtime = ret->i_ctime = CURRENT_TIME; |
110 | if (mode & S_IFDIR) | 110 | if (mode & S_IFDIR) |
111 | ret->i_nlink = 2; | 111 | set_nlink(ret, 2); |
112 | else | ||
113 | ret->i_nlink = 1; | ||
114 | } | 112 | } |
115 | return ret; | 113 | return ret; |
116 | } | 114 | } |
@@ -361,7 +359,7 @@ static struct dentry *hypfs_create_file(struct super_block *sb, | |||
361 | } else if (mode & S_IFDIR) { | 359 | } else if (mode & S_IFDIR) { |
362 | inode->i_op = &simple_dir_inode_operations; | 360 | inode->i_op = &simple_dir_inode_operations; |
363 | inode->i_fop = &simple_dir_operations; | 361 | inode->i_fop = &simple_dir_operations; |
364 | parent->d_inode->i_nlink++; | 362 | inc_nlink(parent->d_inode); |
365 | } else | 363 | } else |
366 | BUG(); | 364 | BUG(); |
367 | inode->i_private = data; | 365 | inode->i_private = data; |
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c index f1af2228a1b1..61086ea3cc6b 100644 --- a/drivers/mtd/mtdchar.c +++ b/drivers/mtd/mtdchar.c | |||
@@ -1144,7 +1144,7 @@ static void mtdchar_notify_remove(struct mtd_info *mtd) | |||
1144 | 1144 | ||
1145 | if (mtd_ino) { | 1145 | if (mtd_ino) { |
1146 | /* Destroy the inode if it exists */ | 1146 | /* Destroy the inode if it exists */ |
1147 | mtd_ino->i_nlink = 0; | 1147 | clear_nlink(mtd_ino); |
1148 | iput(mtd_ino); | 1148 | iput(mtd_ino); |
1149 | } | 1149 | } |
1150 | } | 1150 | } |
diff --git a/drivers/staging/pohmelfs/inode.c b/drivers/staging/pohmelfs/inode.c index f3c6060c96b8..7a1955583b7d 100644 --- a/drivers/staging/pohmelfs/inode.c +++ b/drivers/staging/pohmelfs/inode.c | |||
@@ -1197,7 +1197,7 @@ const struct inode_operations pohmelfs_file_inode_operations = { | |||
1197 | void pohmelfs_fill_inode(struct inode *inode, struct netfs_inode_info *info) | 1197 | void pohmelfs_fill_inode(struct inode *inode, struct netfs_inode_info *info) |
1198 | { | 1198 | { |
1199 | inode->i_mode = info->mode; | 1199 | inode->i_mode = info->mode; |
1200 | inode->i_nlink = info->nlink; | 1200 | set_nlink(inode, info->nlink); |
1201 | inode->i_uid = info->uid; | 1201 | inode->i_uid = info->uid; |
1202 | inode->i_gid = info->gid; | 1202 | inode->i_gid = info->gid; |
1203 | inode->i_blocks = info->blocks; | 1203 | inode->i_blocks = info->blocks; |
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c index b5a1076aaa6c..879ed8851737 100644 --- a/fs/9p/vfs_inode.c +++ b/fs/9p/vfs_inode.c | |||
@@ -1138,7 +1138,7 @@ v9fs_stat2inode(struct p9_wstat *stat, struct inode *inode, | |||
1138 | struct v9fs_session_info *v9ses = sb->s_fs_info; | 1138 | struct v9fs_session_info *v9ses = sb->s_fs_info; |
1139 | struct v9fs_inode *v9inode = V9FS_I(inode); | 1139 | struct v9fs_inode *v9inode = V9FS_I(inode); |
1140 | 1140 | ||
1141 | inode->i_nlink = 1; | 1141 | set_nlink(inode, 1); |
1142 | 1142 | ||
1143 | inode->i_atime.tv_sec = stat->atime; | 1143 | inode->i_atime.tv_sec = stat->atime; |
1144 | inode->i_mtime.tv_sec = stat->mtime; | 1144 | inode->i_mtime.tv_sec = stat->mtime; |
@@ -1164,7 +1164,7 @@ v9fs_stat2inode(struct p9_wstat *stat, struct inode *inode, | |||
1164 | /* HARDLINKCOUNT %u */ | 1164 | /* HARDLINKCOUNT %u */ |
1165 | sscanf(ext, "%13s %u", tag_name, &i_nlink); | 1165 | sscanf(ext, "%13s %u", tag_name, &i_nlink); |
1166 | if (!strncmp(tag_name, "HARDLINKCOUNT", 13)) | 1166 | if (!strncmp(tag_name, "HARDLINKCOUNT", 13)) |
1167 | inode->i_nlink = i_nlink; | 1167 | set_nlink(inode, i_nlink); |
1168 | } | 1168 | } |
1169 | } | 1169 | } |
1170 | mode = stat->mode & S_IALLUGO; | 1170 | mode = stat->mode & S_IALLUGO; |
diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c index aded79fcd5cf..0b5745e21946 100644 --- a/fs/9p/vfs_inode_dotl.c +++ b/fs/9p/vfs_inode_dotl.c | |||
@@ -606,7 +606,7 @@ v9fs_stat2inode_dotl(struct p9_stat_dotl *stat, struct inode *inode) | |||
606 | inode->i_ctime.tv_nsec = stat->st_ctime_nsec; | 606 | inode->i_ctime.tv_nsec = stat->st_ctime_nsec; |
607 | inode->i_uid = stat->st_uid; | 607 | inode->i_uid = stat->st_uid; |
608 | inode->i_gid = stat->st_gid; | 608 | inode->i_gid = stat->st_gid; |
609 | inode->i_nlink = stat->st_nlink; | 609 | set_nlink(inode, stat->st_nlink); |
610 | 610 | ||
611 | mode = stat->st_mode & S_IALLUGO; | 611 | mode = stat->st_mode & S_IALLUGO; |
612 | mode |= inode->i_mode & ~S_IALLUGO; | 612 | mode |= inode->i_mode & ~S_IALLUGO; |
@@ -632,7 +632,7 @@ v9fs_stat2inode_dotl(struct p9_stat_dotl *stat, struct inode *inode) | |||
632 | if (stat->st_result_mask & P9_STATS_GID) | 632 | if (stat->st_result_mask & P9_STATS_GID) |
633 | inode->i_gid = stat->st_gid; | 633 | inode->i_gid = stat->st_gid; |
634 | if (stat->st_result_mask & P9_STATS_NLINK) | 634 | if (stat->st_result_mask & P9_STATS_NLINK) |
635 | inode->i_nlink = stat->st_nlink; | 635 | set_nlink(inode, stat->st_nlink); |
636 | if (stat->st_result_mask & P9_STATS_MODE) { | 636 | if (stat->st_result_mask & P9_STATS_MODE) { |
637 | inode->i_mode = stat->st_mode; | 637 | inode->i_mode = stat->st_mode; |
638 | if ((S_ISBLK(inode->i_mode)) || | 638 | if ((S_ISBLK(inode->i_mode)) || |
diff --git a/fs/adfs/inode.c b/fs/adfs/inode.c index d5250c5aae21..1dab6a174d6a 100644 --- a/fs/adfs/inode.c +++ b/fs/adfs/inode.c | |||
@@ -247,7 +247,7 @@ adfs_iget(struct super_block *sb, struct object_info *obj) | |||
247 | inode->i_gid = ADFS_SB(sb)->s_gid; | 247 | inode->i_gid = ADFS_SB(sb)->s_gid; |
248 | inode->i_ino = obj->file_id; | 248 | inode->i_ino = obj->file_id; |
249 | inode->i_size = obj->size; | 249 | inode->i_size = obj->size; |
250 | inode->i_nlink = 2; | 250 | set_nlink(inode, 2); |
251 | inode->i_blocks = (inode->i_size + sb->s_blocksize - 1) >> | 251 | inode->i_blocks = (inode->i_size + sb->s_blocksize - 1) >> |
252 | sb->s_blocksize_bits; | 252 | sb->s_blocksize_bits; |
253 | 253 | ||
diff --git a/fs/affs/amigaffs.c b/fs/affs/amigaffs.c index 3a4557e8325c..de37ec842340 100644 --- a/fs/affs/amigaffs.c +++ b/fs/affs/amigaffs.c | |||
@@ -215,7 +215,7 @@ affs_remove_link(struct dentry *dentry) | |||
215 | break; | 215 | break; |
216 | default: | 216 | default: |
217 | if (!AFFS_TAIL(sb, bh)->link_chain) | 217 | if (!AFFS_TAIL(sb, bh)->link_chain) |
218 | inode->i_nlink = 1; | 218 | set_nlink(inode, 1); |
219 | } | 219 | } |
220 | affs_free_block(sb, link_ino); | 220 | affs_free_block(sb, link_ino); |
221 | goto done; | 221 | goto done; |
@@ -316,7 +316,7 @@ affs_remove_header(struct dentry *dentry) | |||
316 | if (inode->i_nlink > 1) | 316 | if (inode->i_nlink > 1) |
317 | retval = affs_remove_link(dentry); | 317 | retval = affs_remove_link(dentry); |
318 | else | 318 | else |
319 | inode->i_nlink = 0; | 319 | clear_nlink(inode); |
320 | affs_unlock_link(inode); | 320 | affs_unlock_link(inode); |
321 | inode->i_ctime = CURRENT_TIME_SEC; | 321 | inode->i_ctime = CURRENT_TIME_SEC; |
322 | mark_inode_dirty(inode); | 322 | mark_inode_dirty(inode); |
diff --git a/fs/affs/inode.c b/fs/affs/inode.c index 5d828903ac69..88a4b0b50058 100644 --- a/fs/affs/inode.c +++ b/fs/affs/inode.c | |||
@@ -54,7 +54,7 @@ struct inode *affs_iget(struct super_block *sb, unsigned long ino) | |||
54 | prot = be32_to_cpu(tail->protect); | 54 | prot = be32_to_cpu(tail->protect); |
55 | 55 | ||
56 | inode->i_size = 0; | 56 | inode->i_size = 0; |
57 | inode->i_nlink = 1; | 57 | set_nlink(inode, 1); |
58 | inode->i_mode = 0; | 58 | inode->i_mode = 0; |
59 | AFFS_I(inode)->i_extcnt = 1; | 59 | AFFS_I(inode)->i_extcnt = 1; |
60 | AFFS_I(inode)->i_ext_last = ~1; | 60 | AFFS_I(inode)->i_ext_last = ~1; |
@@ -137,7 +137,7 @@ struct inode *affs_iget(struct super_block *sb, unsigned long ino) | |||
137 | sbi->s_hashsize + 1; | 137 | sbi->s_hashsize + 1; |
138 | } | 138 | } |
139 | if (tail->link_chain) | 139 | if (tail->link_chain) |
140 | inode->i_nlink = 2; | 140 | set_nlink(inode, 2); |
141 | inode->i_mapping->a_ops = (sbi->s_flags & SF_OFS) ? &affs_aops_ofs : &affs_aops; | 141 | inode->i_mapping->a_ops = (sbi->s_flags & SF_OFS) ? &affs_aops_ofs : &affs_aops; |
142 | inode->i_op = &affs_file_inode_operations; | 142 | inode->i_op = &affs_file_inode_operations; |
143 | inode->i_fop = &affs_file_operations; | 143 | inode->i_fop = &affs_file_operations; |
@@ -304,7 +304,7 @@ affs_new_inode(struct inode *dir) | |||
304 | inode->i_uid = current_fsuid(); | 304 | inode->i_uid = current_fsuid(); |
305 | inode->i_gid = current_fsgid(); | 305 | inode->i_gid = current_fsgid(); |
306 | inode->i_ino = block; | 306 | inode->i_ino = block; |
307 | inode->i_nlink = 1; | 307 | set_nlink(inode, 1); |
308 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC; | 308 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC; |
309 | atomic_set(&AFFS_I(inode)->i_opencnt, 0); | 309 | atomic_set(&AFFS_I(inode)->i_opencnt, 0); |
310 | AFFS_I(inode)->i_blkcnt = 0; | 310 | AFFS_I(inode)->i_blkcnt = 0; |
@@ -387,7 +387,7 @@ affs_add_entry(struct inode *dir, struct inode *inode, struct dentry *dentry, s3 | |||
387 | AFFS_TAIL(sb, inode_bh)->link_chain = cpu_to_be32(block); | 387 | AFFS_TAIL(sb, inode_bh)->link_chain = cpu_to_be32(block); |
388 | affs_adjust_checksum(inode_bh, block - be32_to_cpu(chain)); | 388 | affs_adjust_checksum(inode_bh, block - be32_to_cpu(chain)); |
389 | mark_buffer_dirty_inode(inode_bh, inode); | 389 | mark_buffer_dirty_inode(inode_bh, inode); |
390 | inode->i_nlink = 2; | 390 | set_nlink(inode, 2); |
391 | ihold(inode); | 391 | ihold(inode); |
392 | } | 392 | } |
393 | affs_fix_checksum(sb, bh); | 393 | affs_fix_checksum(sb, bh); |
diff --git a/fs/affs/namei.c b/fs/affs/namei.c index e3e9efc1fdd8..780a11dc6318 100644 --- a/fs/affs/namei.c +++ b/fs/affs/namei.c | |||
@@ -277,7 +277,7 @@ affs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata | |||
277 | inode->i_mapping->a_ops = (AFFS_SB(sb)->s_flags & SF_OFS) ? &affs_aops_ofs : &affs_aops; | 277 | inode->i_mapping->a_ops = (AFFS_SB(sb)->s_flags & SF_OFS) ? &affs_aops_ofs : &affs_aops; |
278 | error = affs_add_entry(dir, inode, dentry, ST_FILE); | 278 | error = affs_add_entry(dir, inode, dentry, ST_FILE); |
279 | if (error) { | 279 | if (error) { |
280 | inode->i_nlink = 0; | 280 | clear_nlink(inode); |
281 | iput(inode); | 281 | iput(inode); |
282 | return error; | 282 | return error; |
283 | } | 283 | } |
@@ -305,7 +305,7 @@ affs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
305 | 305 | ||
306 | error = affs_add_entry(dir, inode, dentry, ST_USERDIR); | 306 | error = affs_add_entry(dir, inode, dentry, ST_USERDIR); |
307 | if (error) { | 307 | if (error) { |
308 | inode->i_nlink = 0; | 308 | clear_nlink(inode); |
309 | mark_inode_dirty(inode); | 309 | mark_inode_dirty(inode); |
310 | iput(inode); | 310 | iput(inode); |
311 | return error; | 311 | return error; |
@@ -392,7 +392,7 @@ affs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) | |||
392 | return 0; | 392 | return 0; |
393 | 393 | ||
394 | err: | 394 | err: |
395 | inode->i_nlink = 0; | 395 | clear_nlink(inode); |
396 | mark_inode_dirty(inode); | 396 | mark_inode_dirty(inode); |
397 | iput(inode); | 397 | iput(inode); |
398 | return error; | 398 | return error; |
diff --git a/fs/afs/fsclient.c b/fs/afs/fsclient.c index 346e3289abd7..2f213d109c21 100644 --- a/fs/afs/fsclient.c +++ b/fs/afs/fsclient.c | |||
@@ -90,7 +90,7 @@ static void xdr_decode_AFSFetchStatus(const __be32 **_bp, | |||
90 | vnode->vfs_inode.i_uid = status->owner; | 90 | vnode->vfs_inode.i_uid = status->owner; |
91 | vnode->vfs_inode.i_gid = status->group; | 91 | vnode->vfs_inode.i_gid = status->group; |
92 | vnode->vfs_inode.i_generation = vnode->fid.unique; | 92 | vnode->vfs_inode.i_generation = vnode->fid.unique; |
93 | vnode->vfs_inode.i_nlink = status->nlink; | 93 | set_nlink(&vnode->vfs_inode, status->nlink); |
94 | 94 | ||
95 | mode = vnode->vfs_inode.i_mode; | 95 | mode = vnode->vfs_inode.i_mode; |
96 | mode &= ~S_IALLUGO; | 96 | mode &= ~S_IALLUGO; |
diff --git a/fs/afs/inode.c b/fs/afs/inode.c index 0fdab6e03d87..d890ae3b2ce6 100644 --- a/fs/afs/inode.c +++ b/fs/afs/inode.c | |||
@@ -67,7 +67,7 @@ static int afs_inode_map_status(struct afs_vnode *vnode, struct key *key) | |||
67 | fscache_attr_changed(vnode->cache); | 67 | fscache_attr_changed(vnode->cache); |
68 | #endif | 68 | #endif |
69 | 69 | ||
70 | inode->i_nlink = vnode->status.nlink; | 70 | set_nlink(inode, vnode->status.nlink); |
71 | inode->i_uid = vnode->status.owner; | 71 | inode->i_uid = vnode->status.owner; |
72 | inode->i_gid = 0; | 72 | inode->i_gid = 0; |
73 | inode->i_size = vnode->status.size; | 73 | inode->i_size = vnode->status.size; |
@@ -174,7 +174,7 @@ struct inode *afs_iget_autocell(struct inode *dir, const char *dev_name, | |||
174 | inode->i_size = 0; | 174 | inode->i_size = 0; |
175 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; | 175 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; |
176 | inode->i_op = &afs_autocell_inode_operations; | 176 | inode->i_op = &afs_autocell_inode_operations; |
177 | inode->i_nlink = 2; | 177 | set_nlink(inode, 2); |
178 | inode->i_uid = 0; | 178 | inode->i_uid = 0; |
179 | inode->i_gid = 0; | 179 | inode->i_gid = 0; |
180 | inode->i_ctime.tv_sec = get_seconds(); | 180 | inode->i_ctime.tv_sec = get_seconds(); |
diff --git a/fs/autofs4/inode.c b/fs/autofs4/inode.c index 180fa2425e49..8179f1ab8175 100644 --- a/fs/autofs4/inode.c +++ b/fs/autofs4/inode.c | |||
@@ -342,7 +342,7 @@ struct inode *autofs4_get_inode(struct super_block *sb, mode_t mode) | |||
342 | inode->i_ino = get_next_ino(); | 342 | inode->i_ino = get_next_ino(); |
343 | 343 | ||
344 | if (S_ISDIR(mode)) { | 344 | if (S_ISDIR(mode)) { |
345 | inode->i_nlink = 2; | 345 | set_nlink(inode, 2); |
346 | inode->i_op = &autofs4_dir_inode_operations; | 346 | inode->i_op = &autofs4_dir_inode_operations; |
347 | inode->i_fop = &autofs4_dir_operations; | 347 | inode->i_fop = &autofs4_dir_operations; |
348 | } else if (S_ISLNK(mode)) { | 348 | } else if (S_ISLNK(mode)) { |
diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c index 720d885e8dca..8342ca67abcd 100644 --- a/fs/befs/linuxvfs.c +++ b/fs/befs/linuxvfs.c | |||
@@ -357,7 +357,7 @@ static struct inode *befs_iget(struct super_block *sb, unsigned long ino) | |||
357 | inode->i_gid = befs_sb->mount_opts.use_gid ? | 357 | inode->i_gid = befs_sb->mount_opts.use_gid ? |
358 | befs_sb->mount_opts.gid : (gid_t) fs32_to_cpu(sb, raw_inode->gid); | 358 | befs_sb->mount_opts.gid : (gid_t) fs32_to_cpu(sb, raw_inode->gid); |
359 | 359 | ||
360 | inode->i_nlink = 1; | 360 | set_nlink(inode, 1); |
361 | 361 | ||
362 | /* | 362 | /* |
363 | * BEFS's time is 64 bits, but current VFS is 32 bits... | 363 | * BEFS's time is 64 bits, but current VFS is 32 bits... |
diff --git a/fs/bfs/dir.c b/fs/bfs/dir.c index b14cebfd9047..9cc074019479 100644 --- a/fs/bfs/dir.c +++ b/fs/bfs/dir.c | |||
@@ -199,7 +199,7 @@ static int bfs_unlink(struct inode *dir, struct dentry *dentry) | |||
199 | printf("unlinking non-existent file %s:%lu (nlink=%d)\n", | 199 | printf("unlinking non-existent file %s:%lu (nlink=%d)\n", |
200 | inode->i_sb->s_id, inode->i_ino, | 200 | inode->i_sb->s_id, inode->i_ino, |
201 | inode->i_nlink); | 201 | inode->i_nlink); |
202 | inode->i_nlink = 1; | 202 | set_nlink(inode, 1); |
203 | } | 203 | } |
204 | de->ino = 0; | 204 | de->ino = 0; |
205 | mark_buffer_dirty_inode(bh, dir); | 205 | mark_buffer_dirty_inode(bh, dir); |
diff --git a/fs/bfs/inode.c b/fs/bfs/inode.c index a8e37f81d097..697af5bf70b3 100644 --- a/fs/bfs/inode.c +++ b/fs/bfs/inode.c | |||
@@ -78,7 +78,7 @@ struct inode *bfs_iget(struct super_block *sb, unsigned long ino) | |||
78 | BFS_I(inode)->i_dsk_ino = le16_to_cpu(di->i_ino); | 78 | BFS_I(inode)->i_dsk_ino = le16_to_cpu(di->i_ino); |
79 | inode->i_uid = le32_to_cpu(di->i_uid); | 79 | inode->i_uid = le32_to_cpu(di->i_uid); |
80 | inode->i_gid = le32_to_cpu(di->i_gid); | 80 | inode->i_gid = le32_to_cpu(di->i_gid); |
81 | inode->i_nlink = le32_to_cpu(di->i_nlink); | 81 | set_nlink(inode, le32_to_cpu(di->i_nlink)); |
82 | inode->i_size = BFS_FILESIZE(di); | 82 | inode->i_size = BFS_FILESIZE(di); |
83 | inode->i_blocks = BFS_FILEBLOCKS(di); | 83 | inode->i_blocks = BFS_FILEBLOCKS(di); |
84 | inode->i_atime.tv_sec = le32_to_cpu(di->i_atime); | 84 | inode->i_atime.tv_sec = le32_to_cpu(di->i_atime); |
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c index ba1a1ae4a18a..1e9edbdeda7e 100644 --- a/fs/binfmt_misc.c +++ b/fs/binfmt_misc.c | |||
@@ -521,7 +521,7 @@ static void kill_node(Node *e) | |||
521 | write_unlock(&entries_lock); | 521 | write_unlock(&entries_lock); |
522 | 522 | ||
523 | if (dentry) { | 523 | if (dentry) { |
524 | dentry->d_inode->i_nlink--; | 524 | drop_nlink(dentry->d_inode); |
525 | d_drop(dentry); | 525 | d_drop(dentry); |
526 | dput(dentry); | 526 | dput(dentry); |
527 | simple_release_fs(&bm_mnt, &entry_count); | 527 | simple_release_fs(&bm_mnt, &entry_count); |
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index b52c672f4c18..ae4d9cd10961 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c | |||
@@ -1641,7 +1641,7 @@ int btrfs_fill_inode(struct inode *inode, u32 *rdev) | |||
1641 | inode->i_gid = btrfs_stack_inode_gid(inode_item); | 1641 | inode->i_gid = btrfs_stack_inode_gid(inode_item); |
1642 | btrfs_i_size_write(inode, btrfs_stack_inode_size(inode_item)); | 1642 | btrfs_i_size_write(inode, btrfs_stack_inode_size(inode_item)); |
1643 | inode->i_mode = btrfs_stack_inode_mode(inode_item); | 1643 | inode->i_mode = btrfs_stack_inode_mode(inode_item); |
1644 | inode->i_nlink = btrfs_stack_inode_nlink(inode_item); | 1644 | set_nlink(inode, btrfs_stack_inode_nlink(inode_item)); |
1645 | inode_set_bytes(inode, btrfs_stack_inode_nbytes(inode_item)); | 1645 | inode_set_bytes(inode, btrfs_stack_inode_nbytes(inode_item)); |
1646 | BTRFS_I(inode)->generation = btrfs_stack_inode_generation(inode_item); | 1646 | BTRFS_I(inode)->generation = btrfs_stack_inode_generation(inode_item); |
1647 | BTRFS_I(inode)->sequence = btrfs_stack_inode_sequence(inode_item); | 1647 | BTRFS_I(inode)->sequence = btrfs_stack_inode_sequence(inode_item); |
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 07b3ac662e19..07ea91879a91 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -1705,7 +1705,7 @@ struct btrfs_root *open_ctree(struct super_block *sb, | |||
1705 | sb->s_bdi = &fs_info->bdi; | 1705 | sb->s_bdi = &fs_info->bdi; |
1706 | 1706 | ||
1707 | fs_info->btree_inode->i_ino = BTRFS_BTREE_INODE_OBJECTID; | 1707 | fs_info->btree_inode->i_ino = BTRFS_BTREE_INODE_OBJECTID; |
1708 | fs_info->btree_inode->i_nlink = 1; | 1708 | set_nlink(fs_info->btree_inode, 1); |
1709 | /* | 1709 | /* |
1710 | * we set the i_size on the btree inode to the max possible int. | 1710 | * we set the i_size on the btree inode to the max possible int. |
1711 | * the real end of the address space is determined by all of | 1711 | * the real end of the address space is determined by all of |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index b2d004ad66a0..75686a61bd45 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -2534,7 +2534,7 @@ static void btrfs_read_locked_inode(struct inode *inode) | |||
2534 | inode_item = btrfs_item_ptr(leaf, path->slots[0], | 2534 | inode_item = btrfs_item_ptr(leaf, path->slots[0], |
2535 | struct btrfs_inode_item); | 2535 | struct btrfs_inode_item); |
2536 | inode->i_mode = btrfs_inode_mode(leaf, inode_item); | 2536 | inode->i_mode = btrfs_inode_mode(leaf, inode_item); |
2537 | inode->i_nlink = btrfs_inode_nlink(leaf, inode_item); | 2537 | set_nlink(inode, btrfs_inode_nlink(leaf, inode_item)); |
2538 | inode->i_uid = btrfs_inode_uid(leaf, inode_item); | 2538 | inode->i_uid = btrfs_inode_uid(leaf, inode_item); |
2539 | inode->i_gid = btrfs_inode_gid(leaf, inode_item); | 2539 | inode->i_gid = btrfs_inode_gid(leaf, inode_item); |
2540 | btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item)); | 2540 | btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item)); |
@@ -6728,7 +6728,7 @@ int btrfs_create_subvol_root(struct btrfs_trans_handle *trans, | |||
6728 | inode->i_op = &btrfs_dir_inode_operations; | 6728 | inode->i_op = &btrfs_dir_inode_operations; |
6729 | inode->i_fop = &btrfs_dir_file_operations; | 6729 | inode->i_fop = &btrfs_dir_file_operations; |
6730 | 6730 | ||
6731 | inode->i_nlink = 1; | 6731 | set_nlink(inode, 1); |
6732 | btrfs_i_size_write(inode, 0); | 6732 | btrfs_i_size_write(inode, 0); |
6733 | 6733 | ||
6734 | err = btrfs_update_inode(trans, new_root, inode); | 6734 | err = btrfs_update_inode(trans, new_root, inode); |
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 786639fca067..0618aa39740b 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c | |||
@@ -1030,7 +1030,7 @@ static noinline int fixup_inode_link_count(struct btrfs_trans_handle *trans, | |||
1030 | } | 1030 | } |
1031 | btrfs_release_path(path); | 1031 | btrfs_release_path(path); |
1032 | if (nlink != inode->i_nlink) { | 1032 | if (nlink != inode->i_nlink) { |
1033 | inode->i_nlink = nlink; | 1033 | set_nlink(inode, nlink); |
1034 | btrfs_update_inode(trans, root, inode); | 1034 | btrfs_update_inode(trans, root, inode); |
1035 | } | 1035 | } |
1036 | BTRFS_I(inode)->index_cnt = (u64)-1; | 1036 | BTRFS_I(inode)->index_cnt = (u64)-1; |
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index b8731bf3ef1f..15b21e35078a 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c | |||
@@ -2363,7 +2363,7 @@ static void handle_cap_grant(struct inode *inode, struct ceph_mds_caps *grant, | |||
2363 | } | 2363 | } |
2364 | 2364 | ||
2365 | if ((issued & CEPH_CAP_LINK_EXCL) == 0) | 2365 | if ((issued & CEPH_CAP_LINK_EXCL) == 0) |
2366 | inode->i_nlink = le32_to_cpu(grant->nlink); | 2366 | set_nlink(inode, le32_to_cpu(grant->nlink)); |
2367 | 2367 | ||
2368 | if ((issued & CEPH_CAP_XATTR_EXCL) == 0 && grant->xattr_len) { | 2368 | if ((issued & CEPH_CAP_XATTR_EXCL) == 0 && grant->xattr_len) { |
2369 | int len = le32_to_cpu(grant->xattr_len); | 2369 | int len = le32_to_cpu(grant->xattr_len); |
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 5dde7d51dc11..1616a0d37cbd 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c | |||
@@ -618,7 +618,7 @@ static int fill_inode(struct inode *inode, | |||
618 | } | 618 | } |
619 | 619 | ||
620 | if ((issued & CEPH_CAP_LINK_EXCL) == 0) | 620 | if ((issued & CEPH_CAP_LINK_EXCL) == 0) |
621 | inode->i_nlink = le32_to_cpu(info->nlink); | 621 | set_nlink(inode, le32_to_cpu(info->nlink)); |
622 | 622 | ||
623 | /* be careful with mtime, atime, size */ | 623 | /* be careful with mtime, atime, size */ |
624 | ceph_decode_timespec(&atime, &info->atime); | 624 | ceph_decode_timespec(&atime, &info->atime); |
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 2c50bd2f65d1..e851d5b8931e 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
@@ -132,7 +132,7 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) | |||
132 | inode->i_mtime = fattr->cf_mtime; | 132 | inode->i_mtime = fattr->cf_mtime; |
133 | inode->i_ctime = fattr->cf_ctime; | 133 | inode->i_ctime = fattr->cf_ctime; |
134 | inode->i_rdev = fattr->cf_rdev; | 134 | inode->i_rdev = fattr->cf_rdev; |
135 | inode->i_nlink = fattr->cf_nlink; | 135 | set_nlink(inode, fattr->cf_nlink); |
136 | inode->i_uid = fattr->cf_uid; | 136 | inode->i_uid = fattr->cf_uid; |
137 | inode->i_gid = fattr->cf_gid; | 137 | inode->i_gid = fattr->cf_gid; |
138 | 138 | ||
@@ -905,7 +905,7 @@ struct inode *cifs_root_iget(struct super_block *sb) | |||
905 | if (rc && tcon->ipc) { | 905 | if (rc && tcon->ipc) { |
906 | cFYI(1, "ipc connection - fake read inode"); | 906 | cFYI(1, "ipc connection - fake read inode"); |
907 | inode->i_mode |= S_IFDIR; | 907 | inode->i_mode |= S_IFDIR; |
908 | inode->i_nlink = 2; | 908 | set_nlink(inode, 2); |
909 | inode->i_op = &cifs_ipc_inode_ops; | 909 | inode->i_op = &cifs_ipc_inode_ops; |
910 | inode->i_fop = &simple_dir_operations; | 910 | inode->i_fop = &simple_dir_operations; |
911 | inode->i_uid = cifs_sb->mnt_uid; | 911 | inode->i_uid = cifs_sb->mnt_uid; |
@@ -1367,7 +1367,7 @@ mkdir_get_info: | |||
1367 | /* setting nlink not necessary except in cases where we | 1367 | /* setting nlink not necessary except in cases where we |
1368 | * failed to get it from the server or was set bogus */ | 1368 | * failed to get it from the server or was set bogus */ |
1369 | if ((direntry->d_inode) && (direntry->d_inode->i_nlink < 2)) | 1369 | if ((direntry->d_inode) && (direntry->d_inode->i_nlink < 2)) |
1370 | direntry->d_inode->i_nlink = 2; | 1370 | set_nlink(direntry->d_inode, 2); |
1371 | 1371 | ||
1372 | mode &= ~current_umask(); | 1372 | mode &= ~current_umask(); |
1373 | /* must turn on setgid bit if parent dir has it */ | 1373 | /* must turn on setgid bit if parent dir has it */ |
diff --git a/fs/cifs/link.c b/fs/cifs/link.c index 8693b5d0e180..6b0e06434391 100644 --- a/fs/cifs/link.c +++ b/fs/cifs/link.c | |||
@@ -433,7 +433,7 @@ cifs_hardlink(struct dentry *old_file, struct inode *inode, | |||
433 | if (old_file->d_inode) { | 433 | if (old_file->d_inode) { |
434 | cifsInode = CIFS_I(old_file->d_inode); | 434 | cifsInode = CIFS_I(old_file->d_inode); |
435 | if (rc == 0) { | 435 | if (rc == 0) { |
436 | old_file->d_inode->i_nlink++; | 436 | inc_nlink(old_file->d_inode); |
437 | /* BB should we make this contingent on superblock flag NOATIME? */ | 437 | /* BB should we make this contingent on superblock flag NOATIME? */ |
438 | /* old_file->d_inode->i_ctime = CURRENT_TIME;*/ | 438 | /* old_file->d_inode->i_ctime = CURRENT_TIME;*/ |
439 | /* parent dir timestamps will update from srv | 439 | /* parent dir timestamps will update from srv |
diff --git a/fs/coda/coda_linux.c b/fs/coda/coda_linux.c index 2bdbcc11b373..854ace712685 100644 --- a/fs/coda/coda_linux.c +++ b/fs/coda/coda_linux.c | |||
@@ -104,7 +104,7 @@ void coda_vattr_to_iattr(struct inode *inode, struct coda_vattr *attr) | |||
104 | if (attr->va_gid != -1) | 104 | if (attr->va_gid != -1) |
105 | inode->i_gid = (gid_t) attr->va_gid; | 105 | inode->i_gid = (gid_t) attr->va_gid; |
106 | if (attr->va_nlink != -1) | 106 | if (attr->va_nlink != -1) |
107 | inode->i_nlink = attr->va_nlink; | 107 | set_nlink(inode, attr->va_nlink); |
108 | if (attr->va_size != -1) | 108 | if (attr->va_size != -1) |
109 | inode->i_size = attr->va_size; | 109 | inode->i_size = attr->va_size; |
110 | if (attr->va_size != -1) | 110 | if (attr->va_size != -1) |
diff --git a/fs/coda/dir.c b/fs/coda/dir.c index 0239433f50cb..28e7e135cfab 100644 --- a/fs/coda/dir.c +++ b/fs/coda/dir.c | |||
@@ -340,7 +340,7 @@ static int coda_rmdir(struct inode *dir, struct dentry *de) | |||
340 | if (!error) { | 340 | if (!error) { |
341 | /* VFS may delete the child */ | 341 | /* VFS may delete the child */ |
342 | if (de->d_inode) | 342 | if (de->d_inode) |
343 | de->d_inode->i_nlink = 0; | 343 | clear_nlink(de->d_inode); |
344 | 344 | ||
345 | /* fix the link count of the parent */ | 345 | /* fix the link count of the parent */ |
346 | coda_dir_drop_nlink(dir); | 346 | coda_dir_drop_nlink(dir); |
diff --git a/fs/dcache.c b/fs/dcache.c index a88948b8bd17..274f13e2f094 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
@@ -225,7 +225,7 @@ static void dentry_unlink_inode(struct dentry * dentry) | |||
225 | } | 225 | } |
226 | 226 | ||
227 | /* | 227 | /* |
228 | * dentry_lru_(add|del|move_tail) must be called with d_lock held. | 228 | * dentry_lru_(add|del|prune|move_tail) must be called with d_lock held. |
229 | */ | 229 | */ |
230 | static void dentry_lru_add(struct dentry *dentry) | 230 | static void dentry_lru_add(struct dentry *dentry) |
231 | { | 231 | { |
@@ -245,6 +245,9 @@ static void __dentry_lru_del(struct dentry *dentry) | |||
245 | dentry_stat.nr_unused--; | 245 | dentry_stat.nr_unused--; |
246 | } | 246 | } |
247 | 247 | ||
248 | /* | ||
249 | * Remove a dentry with references from the LRU. | ||
250 | */ | ||
248 | static void dentry_lru_del(struct dentry *dentry) | 251 | static void dentry_lru_del(struct dentry *dentry) |
249 | { | 252 | { |
250 | if (!list_empty(&dentry->d_lru)) { | 253 | if (!list_empty(&dentry->d_lru)) { |
@@ -254,6 +257,23 @@ static void dentry_lru_del(struct dentry *dentry) | |||
254 | } | 257 | } |
255 | } | 258 | } |
256 | 259 | ||
260 | /* | ||
261 | * Remove a dentry that is unreferenced and about to be pruned | ||
262 | * (unhashed and destroyed) from the LRU, and inform the file system. | ||
263 | * This wrapper should be called _prior_ to unhashing a victim dentry. | ||
264 | */ | ||
265 | static void dentry_lru_prune(struct dentry *dentry) | ||
266 | { | ||
267 | if (!list_empty(&dentry->d_lru)) { | ||
268 | if (dentry->d_flags & DCACHE_OP_PRUNE) | ||
269 | dentry->d_op->d_prune(dentry); | ||
270 | |||
271 | spin_lock(&dcache_lru_lock); | ||
272 | __dentry_lru_del(dentry); | ||
273 | spin_unlock(&dcache_lru_lock); | ||
274 | } | ||
275 | } | ||
276 | |||
257 | static void dentry_lru_move_tail(struct dentry *dentry) | 277 | static void dentry_lru_move_tail(struct dentry *dentry) |
258 | { | 278 | { |
259 | spin_lock(&dcache_lru_lock); | 279 | spin_lock(&dcache_lru_lock); |
@@ -403,8 +423,12 @@ relock: | |||
403 | 423 | ||
404 | if (ref) | 424 | if (ref) |
405 | dentry->d_count--; | 425 | dentry->d_count--; |
406 | /* if dentry was on the d_lru list delete it from there */ | 426 | /* |
407 | dentry_lru_del(dentry); | 427 | * if dentry was on the d_lru list delete it from there. |
428 | * inform the fs via d_prune that this dentry is about to be | ||
429 | * unhashed and destroyed. | ||
430 | */ | ||
431 | dentry_lru_prune(dentry); | ||
408 | /* if it was on the hash then remove it */ | 432 | /* if it was on the hash then remove it */ |
409 | __d_drop(dentry); | 433 | __d_drop(dentry); |
410 | return d_kill(dentry, parent); | 434 | return d_kill(dentry, parent); |
@@ -854,8 +878,12 @@ static void shrink_dcache_for_umount_subtree(struct dentry *dentry) | |||
854 | do { | 878 | do { |
855 | struct inode *inode; | 879 | struct inode *inode; |
856 | 880 | ||
857 | /* detach from the system */ | 881 | /* |
858 | dentry_lru_del(dentry); | 882 | * remove the dentry from the lru, and inform |
883 | * the fs that this dentry is about to be | ||
884 | * unhashed and destroyed. | ||
885 | */ | ||
886 | dentry_lru_prune(dentry); | ||
859 | __d_shrink(dentry); | 887 | __d_shrink(dentry); |
860 | 888 | ||
861 | if (dentry->d_count != 0) { | 889 | if (dentry->d_count != 0) { |
@@ -1283,6 +1311,8 @@ void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op) | |||
1283 | dentry->d_flags |= DCACHE_OP_REVALIDATE; | 1311 | dentry->d_flags |= DCACHE_OP_REVALIDATE; |
1284 | if (op->d_delete) | 1312 | if (op->d_delete) |
1285 | dentry->d_flags |= DCACHE_OP_DELETE; | 1313 | dentry->d_flags |= DCACHE_OP_DELETE; |
1314 | if (op->d_prune) | ||
1315 | dentry->d_flags |= DCACHE_OP_PRUNE; | ||
1286 | 1316 | ||
1287 | } | 1317 | } |
1288 | EXPORT_SYMBOL(d_set_d_op); | 1318 | EXPORT_SYMBOL(d_set_d_op); |
diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index 2f27e578d466..d5d5297efe97 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c | |||
@@ -307,7 +307,7 @@ devpts_fill_super(struct super_block *s, void *data, int silent) | |||
307 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR; | 307 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO | S_IWUSR; |
308 | inode->i_op = &simple_dir_inode_operations; | 308 | inode->i_op = &simple_dir_inode_operations; |
309 | inode->i_fop = &simple_dir_operations; | 309 | inode->i_fop = &simple_dir_operations; |
310 | inode->i_nlink = 2; | 310 | set_nlink(inode, 2); |
311 | 311 | ||
312 | s->s_root = d_alloc_root(inode); | 312 | s->s_root = d_alloc_root(inode); |
313 | if (s->s_root) | 313 | if (s->s_root) |
@@ -549,7 +549,7 @@ void devpts_pty_kill(struct tty_struct *tty) | |||
549 | 549 | ||
550 | dentry = d_find_alias(inode); | 550 | dentry = d_find_alias(inode); |
551 | 551 | ||
552 | inode->i_nlink--; | 552 | drop_nlink(inode); |
553 | d_delete(dentry); | 553 | d_delete(dentry); |
554 | dput(dentry); /* d_alloc_name() in devpts_pty_new() */ | 554 | dput(dentry); /* d_alloc_name() in devpts_pty_new() */ |
555 | dput(dentry); /* d_find_alias above */ | 555 | dput(dentry); /* d_find_alias above */ |
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index 11f8582d7218..a36d327f1521 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c | |||
@@ -474,8 +474,8 @@ static int ecryptfs_link(struct dentry *old_dentry, struct inode *dir, | |||
474 | goto out_lock; | 474 | goto out_lock; |
475 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); | 475 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); |
476 | fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode); | 476 | fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode); |
477 | old_dentry->d_inode->i_nlink = | 477 | set_nlink(old_dentry->d_inode, |
478 | ecryptfs_inode_to_lower(old_dentry->d_inode)->i_nlink; | 478 | ecryptfs_inode_to_lower(old_dentry->d_inode)->i_nlink); |
479 | i_size_write(new_dentry->d_inode, file_size_save); | 479 | i_size_write(new_dentry->d_inode, file_size_save); |
480 | out_lock: | 480 | out_lock: |
481 | unlock_dir(lower_dir_dentry); | 481 | unlock_dir(lower_dir_dentry); |
@@ -499,8 +499,8 @@ static int ecryptfs_unlink(struct inode *dir, struct dentry *dentry) | |||
499 | goto out_unlock; | 499 | goto out_unlock; |
500 | } | 500 | } |
501 | fsstack_copy_attr_times(dir, lower_dir_inode); | 501 | fsstack_copy_attr_times(dir, lower_dir_inode); |
502 | dentry->d_inode->i_nlink = | 502 | set_nlink(dentry->d_inode, |
503 | ecryptfs_inode_to_lower(dentry->d_inode)->i_nlink; | 503 | ecryptfs_inode_to_lower(dentry->d_inode)->i_nlink); |
504 | dentry->d_inode->i_ctime = dir->i_ctime; | 504 | dentry->d_inode->i_ctime = dir->i_ctime; |
505 | d_drop(dentry); | 505 | d_drop(dentry); |
506 | out_unlock: | 506 | out_unlock: |
@@ -565,7 +565,7 @@ static int ecryptfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
565 | goto out; | 565 | goto out; |
566 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); | 566 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); |
567 | fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode); | 567 | fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode); |
568 | dir->i_nlink = lower_dir_dentry->d_inode->i_nlink; | 568 | set_nlink(dir, lower_dir_dentry->d_inode->i_nlink); |
569 | out: | 569 | out: |
570 | unlock_dir(lower_dir_dentry); | 570 | unlock_dir(lower_dir_dentry); |
571 | if (!dentry->d_inode) | 571 | if (!dentry->d_inode) |
@@ -588,7 +588,7 @@ static int ecryptfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
588 | if (!rc && dentry->d_inode) | 588 | if (!rc && dentry->d_inode) |
589 | clear_nlink(dentry->d_inode); | 589 | clear_nlink(dentry->d_inode); |
590 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); | 590 | fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); |
591 | dir->i_nlink = lower_dir_dentry->d_inode->i_nlink; | 591 | set_nlink(dir, lower_dir_dentry->d_inode->i_nlink); |
592 | unlock_dir(lower_dir_dentry); | 592 | unlock_dir(lower_dir_dentry); |
593 | if (!rc) | 593 | if (!rc) |
594 | d_drop(dentry); | 594 | d_drop(dentry); |
diff --git a/fs/efs/inode.c b/fs/efs/inode.c index 9c13412e6c99..bc84f365d75c 100644 --- a/fs/efs/inode.c +++ b/fs/efs/inode.c | |||
@@ -96,7 +96,7 @@ struct inode *efs_iget(struct super_block *super, unsigned long ino) | |||
96 | efs_inode = (struct efs_dinode *) (bh->b_data + offset); | 96 | efs_inode = (struct efs_dinode *) (bh->b_data + offset); |
97 | 97 | ||
98 | inode->i_mode = be16_to_cpu(efs_inode->di_mode); | 98 | inode->i_mode = be16_to_cpu(efs_inode->di_mode); |
99 | inode->i_nlink = be16_to_cpu(efs_inode->di_nlink); | 99 | set_nlink(inode, be16_to_cpu(efs_inode->di_nlink)); |
100 | inode->i_uid = (uid_t)be16_to_cpu(efs_inode->di_uid); | 100 | inode->i_uid = (uid_t)be16_to_cpu(efs_inode->di_uid); |
101 | inode->i_gid = (gid_t)be16_to_cpu(efs_inode->di_gid); | 101 | inode->i_gid = (gid_t)be16_to_cpu(efs_inode->di_gid); |
102 | inode->i_size = be32_to_cpu(efs_inode->di_size); | 102 | inode->i_size = be32_to_cpu(efs_inode->di_size); |
diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c index 3e5f3a6be90a..f6dbf7768ce6 100644 --- a/fs/exofs/inode.c +++ b/fs/exofs/inode.c | |||
@@ -1165,7 +1165,7 @@ struct inode *exofs_iget(struct super_block *sb, unsigned long ino) | |||
1165 | inode->i_mode = le16_to_cpu(fcb.i_mode); | 1165 | inode->i_mode = le16_to_cpu(fcb.i_mode); |
1166 | inode->i_uid = le32_to_cpu(fcb.i_uid); | 1166 | inode->i_uid = le32_to_cpu(fcb.i_uid); |
1167 | inode->i_gid = le32_to_cpu(fcb.i_gid); | 1167 | inode->i_gid = le32_to_cpu(fcb.i_gid); |
1168 | inode->i_nlink = le16_to_cpu(fcb.i_links_count); | 1168 | set_nlink(inode, le16_to_cpu(fcb.i_links_count)); |
1169 | inode->i_ctime.tv_sec = (signed)le32_to_cpu(fcb.i_ctime); | 1169 | inode->i_ctime.tv_sec = (signed)le32_to_cpu(fcb.i_ctime); |
1170 | inode->i_atime.tv_sec = (signed)le32_to_cpu(fcb.i_atime); | 1170 | inode->i_atime.tv_sec = (signed)le32_to_cpu(fcb.i_atime); |
1171 | inode->i_mtime.tv_sec = (signed)le32_to_cpu(fcb.i_mtime); | 1171 | inode->i_mtime.tv_sec = (signed)le32_to_cpu(fcb.i_mtime); |
diff --git a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c index ee9ed31948e1..c4e81dfb74ba 100644 --- a/fs/ext2/ialloc.c +++ b/fs/ext2/ialloc.c | |||
@@ -601,7 +601,7 @@ fail_free_drop: | |||
601 | fail_drop: | 601 | fail_drop: |
602 | dquot_drop(inode); | 602 | dquot_drop(inode); |
603 | inode->i_flags |= S_NOQUOTA; | 603 | inode->i_flags |= S_NOQUOTA; |
604 | inode->i_nlink = 0; | 604 | clear_nlink(inode); |
605 | unlock_new_inode(inode); | 605 | unlock_new_inode(inode); |
606 | iput(inode); | 606 | iput(inode); |
607 | return ERR_PTR(err); | 607 | return ERR_PTR(err); |
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index a8a58f63f07c..91a6945af6d8 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c | |||
@@ -1321,7 +1321,7 @@ struct inode *ext2_iget (struct super_block *sb, unsigned long ino) | |||
1321 | inode->i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16; | 1321 | inode->i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16; |
1322 | inode->i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16; | 1322 | inode->i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16; |
1323 | } | 1323 | } |
1324 | inode->i_nlink = le16_to_cpu(raw_inode->i_links_count); | 1324 | set_nlink(inode, le16_to_cpu(raw_inode->i_links_count)); |
1325 | inode->i_size = le32_to_cpu(raw_inode->i_size); | 1325 | inode->i_size = le32_to_cpu(raw_inode->i_size); |
1326 | inode->i_atime.tv_sec = (signed)le32_to_cpu(raw_inode->i_atime); | 1326 | inode->i_atime.tv_sec = (signed)le32_to_cpu(raw_inode->i_atime); |
1327 | inode->i_ctime.tv_sec = (signed)le32_to_cpu(raw_inode->i_ctime); | 1327 | inode->i_ctime.tv_sec = (signed)le32_to_cpu(raw_inode->i_ctime); |
diff --git a/fs/ext3/ialloc.c b/fs/ext3/ialloc.c index 635bd8ce6d59..5c866e06e7ab 100644 --- a/fs/ext3/ialloc.c +++ b/fs/ext3/ialloc.c | |||
@@ -582,7 +582,7 @@ fail_free_drop: | |||
582 | fail_drop: | 582 | fail_drop: |
583 | dquot_drop(inode); | 583 | dquot_drop(inode); |
584 | inode->i_flags |= S_NOQUOTA; | 584 | inode->i_flags |= S_NOQUOTA; |
585 | inode->i_nlink = 0; | 585 | clear_nlink(inode); |
586 | unlock_new_inode(inode); | 586 | unlock_new_inode(inode); |
587 | iput(inode); | 587 | iput(inode); |
588 | brelse(bitmap_bh); | 588 | brelse(bitmap_bh); |
diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index 12661e1deedd..85fe655fe3e0 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c | |||
@@ -2899,7 +2899,7 @@ struct inode *ext3_iget(struct super_block *sb, unsigned long ino) | |||
2899 | inode->i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16; | 2899 | inode->i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16; |
2900 | inode->i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16; | 2900 | inode->i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16; |
2901 | } | 2901 | } |
2902 | inode->i_nlink = le16_to_cpu(raw_inode->i_links_count); | 2902 | set_nlink(inode, le16_to_cpu(raw_inode->i_links_count)); |
2903 | inode->i_size = le32_to_cpu(raw_inode->i_size); | 2903 | inode->i_size = le32_to_cpu(raw_inode->i_size); |
2904 | inode->i_atime.tv_sec = (signed)le32_to_cpu(raw_inode->i_atime); | 2904 | inode->i_atime.tv_sec = (signed)le32_to_cpu(raw_inode->i_atime); |
2905 | inode->i_ctime.tv_sec = (signed)le32_to_cpu(raw_inode->i_ctime); | 2905 | inode->i_ctime.tv_sec = (signed)le32_to_cpu(raw_inode->i_ctime); |
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c index 0629e09f6511..642dc6d66dfd 100644 --- a/fs/ext3/namei.c +++ b/fs/ext3/namei.c | |||
@@ -1821,7 +1821,7 @@ retry: | |||
1821 | de->name_len = 2; | 1821 | de->name_len = 2; |
1822 | strcpy (de->name, ".."); | 1822 | strcpy (de->name, ".."); |
1823 | ext3_set_de_type(dir->i_sb, de, S_IFDIR); | 1823 | ext3_set_de_type(dir->i_sb, de, S_IFDIR); |
1824 | inode->i_nlink = 2; | 1824 | set_nlink(inode, 2); |
1825 | BUFFER_TRACE(dir_block, "call ext3_journal_dirty_metadata"); | 1825 | BUFFER_TRACE(dir_block, "call ext3_journal_dirty_metadata"); |
1826 | err = ext3_journal_dirty_metadata(handle, dir_block); | 1826 | err = ext3_journal_dirty_metadata(handle, dir_block); |
1827 | if (err) | 1827 | if (err) |
@@ -1833,7 +1833,7 @@ retry: | |||
1833 | 1833 | ||
1834 | if (err) { | 1834 | if (err) { |
1835 | out_clear_inode: | 1835 | out_clear_inode: |
1836 | inode->i_nlink = 0; | 1836 | clear_nlink(inode); |
1837 | unlock_new_inode(inode); | 1837 | unlock_new_inode(inode); |
1838 | ext3_mark_inode_dirty(handle, inode); | 1838 | ext3_mark_inode_dirty(handle, inode); |
1839 | iput (inode); | 1839 | iput (inode); |
@@ -2170,7 +2170,7 @@ static int ext3_unlink(struct inode * dir, struct dentry *dentry) | |||
2170 | ext3_warning (inode->i_sb, "ext3_unlink", | 2170 | ext3_warning (inode->i_sb, "ext3_unlink", |
2171 | "Deleting nonexistent file (%lu), %d", | 2171 | "Deleting nonexistent file (%lu), %d", |
2172 | inode->i_ino, inode->i_nlink); | 2172 | inode->i_ino, inode->i_nlink); |
2173 | inode->i_nlink = 1; | 2173 | set_nlink(inode, 1); |
2174 | } | 2174 | } |
2175 | retval = ext3_delete_entry(handle, dir, de, bh); | 2175 | retval = ext3_delete_entry(handle, dir, de, bh); |
2176 | if (retval) | 2176 | if (retval) |
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index 612bec255c6c..00beb4f9cc4f 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c | |||
@@ -948,7 +948,7 @@ fail_free_drop: | |||
948 | fail_drop: | 948 | fail_drop: |
949 | dquot_drop(inode); | 949 | dquot_drop(inode); |
950 | inode->i_flags |= S_NOQUOTA; | 950 | inode->i_flags |= S_NOQUOTA; |
951 | inode->i_nlink = 0; | 951 | clear_nlink(inode); |
952 | unlock_new_inode(inode); | 952 | unlock_new_inode(inode); |
953 | iput(inode); | 953 | iput(inode); |
954 | brelse(inode_bitmap_bh); | 954 | brelse(inode_bitmap_bh); |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index f2419a15b81a..cc5a6da030a1 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -3791,7 +3791,7 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino) | |||
3791 | inode->i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16; | 3791 | inode->i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16; |
3792 | inode->i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16; | 3792 | inode->i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16; |
3793 | } | 3793 | } |
3794 | inode->i_nlink = le16_to_cpu(raw_inode->i_links_count); | 3794 | set_nlink(inode, le16_to_cpu(raw_inode->i_links_count)); |
3795 | 3795 | ||
3796 | ext4_clear_state_flags(ei); /* Only relevant on 32-bit archs */ | 3796 | ext4_clear_state_flags(ei); /* Only relevant on 32-bit archs */ |
3797 | ei->i_dir_start_lookup = 0; | 3797 | ei->i_dir_start_lookup = 0; |
diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c index f729377bf043..16ac228dbec6 100644 --- a/fs/ext4/migrate.c +++ b/fs/ext4/migrate.c | |||
@@ -481,7 +481,7 @@ int ext4_ext_migrate(struct inode *inode) | |||
481 | * Set the i_nlink to zero so it will be deleted later | 481 | * Set the i_nlink to zero so it will be deleted later |
482 | * when we drop inode reference. | 482 | * when we drop inode reference. |
483 | */ | 483 | */ |
484 | tmp_inode->i_nlink = 0; | 484 | clear_nlink(tmp_inode); |
485 | 485 | ||
486 | ext4_ext_tree_init(handle, tmp_inode); | 486 | ext4_ext_tree_init(handle, tmp_inode); |
487 | ext4_orphan_add(handle, tmp_inode); | 487 | ext4_orphan_add(handle, tmp_inode); |
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 2a75eed2ef06..aa4c782c9dd7 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c | |||
@@ -1694,7 +1694,7 @@ static void ext4_inc_count(handle_t *handle, struct inode *inode) | |||
1694 | if (is_dx(inode) && inode->i_nlink > 1) { | 1694 | if (is_dx(inode) && inode->i_nlink > 1) { |
1695 | /* limit is 16-bit i_links_count */ | 1695 | /* limit is 16-bit i_links_count */ |
1696 | if (inode->i_nlink >= EXT4_LINK_MAX || inode->i_nlink == 2) { | 1696 | if (inode->i_nlink >= EXT4_LINK_MAX || inode->i_nlink == 2) { |
1697 | inode->i_nlink = 1; | 1697 | set_nlink(inode, 1); |
1698 | EXT4_SET_RO_COMPAT_FEATURE(inode->i_sb, | 1698 | EXT4_SET_RO_COMPAT_FEATURE(inode->i_sb, |
1699 | EXT4_FEATURE_RO_COMPAT_DIR_NLINK); | 1699 | EXT4_FEATURE_RO_COMPAT_DIR_NLINK); |
1700 | } | 1700 | } |
@@ -1860,7 +1860,7 @@ retry: | |||
1860 | de->name_len = 2; | 1860 | de->name_len = 2; |
1861 | strcpy(de->name, ".."); | 1861 | strcpy(de->name, ".."); |
1862 | ext4_set_de_type(dir->i_sb, de, S_IFDIR); | 1862 | ext4_set_de_type(dir->i_sb, de, S_IFDIR); |
1863 | inode->i_nlink = 2; | 1863 | set_nlink(inode, 2); |
1864 | BUFFER_TRACE(dir_block, "call ext4_handle_dirty_metadata"); | 1864 | BUFFER_TRACE(dir_block, "call ext4_handle_dirty_metadata"); |
1865 | err = ext4_handle_dirty_metadata(handle, inode, dir_block); | 1865 | err = ext4_handle_dirty_metadata(handle, inode, dir_block); |
1866 | if (err) | 1866 | if (err) |
@@ -2213,7 +2213,7 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry) | |||
2213 | ext4_warning(inode->i_sb, | 2213 | ext4_warning(inode->i_sb, |
2214 | "Deleting nonexistent file (%lu), %d", | 2214 | "Deleting nonexistent file (%lu), %d", |
2215 | inode->i_ino, inode->i_nlink); | 2215 | inode->i_ino, inode->i_nlink); |
2216 | inode->i_nlink = 1; | 2216 | set_nlink(inode, 1); |
2217 | } | 2217 | } |
2218 | retval = ext4_delete_entry(handle, dir, de, bh); | 2218 | retval = ext4_delete_entry(handle, dir, de, bh); |
2219 | if (retval) | 2219 | if (retval) |
@@ -2538,7 +2538,7 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
2538 | if (new_inode) { | 2538 | if (new_inode) { |
2539 | /* checked empty_dir above, can't have another parent, | 2539 | /* checked empty_dir above, can't have another parent, |
2540 | * ext4_dec_count() won't work for many-linked dirs */ | 2540 | * ext4_dec_count() won't work for many-linked dirs */ |
2541 | new_inode->i_nlink = 0; | 2541 | clear_nlink(new_inode); |
2542 | } else { | 2542 | } else { |
2543 | ext4_inc_count(handle, new_dir); | 2543 | ext4_inc_count(handle, new_dir); |
2544 | ext4_update_dx_flag(new_dir); | 2544 | ext4_update_dx_flag(new_dir); |
diff --git a/fs/fat/inode.c b/fs/fat/inode.c index 1726d7303047..808cac7edcfb 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c | |||
@@ -379,7 +379,7 @@ static int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de) | |||
379 | return error; | 379 | return error; |
380 | MSDOS_I(inode)->mmu_private = inode->i_size; | 380 | MSDOS_I(inode)->mmu_private = inode->i_size; |
381 | 381 | ||
382 | inode->i_nlink = fat_subdirs(inode); | 382 | set_nlink(inode, fat_subdirs(inode)); |
383 | } else { /* not a directory */ | 383 | } else { /* not a directory */ |
384 | inode->i_generation |= 1; | 384 | inode->i_generation |= 1; |
385 | inode->i_mode = fat_make_mode(sbi, de->attr, | 385 | inode->i_mode = fat_make_mode(sbi, de->attr, |
@@ -1233,7 +1233,7 @@ static int fat_read_root(struct inode *inode) | |||
1233 | fat_save_attrs(inode, ATTR_DIR); | 1233 | fat_save_attrs(inode, ATTR_DIR); |
1234 | inode->i_mtime.tv_sec = inode->i_atime.tv_sec = inode->i_ctime.tv_sec = 0; | 1234 | inode->i_mtime.tv_sec = inode->i_atime.tv_sec = inode->i_ctime.tv_sec = 0; |
1235 | inode->i_mtime.tv_nsec = inode->i_atime.tv_nsec = inode->i_ctime.tv_nsec = 0; | 1235 | inode->i_mtime.tv_nsec = inode->i_atime.tv_nsec = inode->i_ctime.tv_nsec = 0; |
1236 | inode->i_nlink = fat_subdirs(inode)+2; | 1236 | set_nlink(inode, fat_subdirs(inode)+2); |
1237 | 1237 | ||
1238 | return 0; | 1238 | return 0; |
1239 | } | 1239 | } |
diff --git a/fs/fat/namei_msdos.c b/fs/fat/namei_msdos.c index 66e83b845455..216b419f30e2 100644 --- a/fs/fat/namei_msdos.c +++ b/fs/fat/namei_msdos.c | |||
@@ -387,7 +387,7 @@ static int msdos_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
387 | /* the directory was completed, just return a error */ | 387 | /* the directory was completed, just return a error */ |
388 | goto out; | 388 | goto out; |
389 | } | 389 | } |
390 | inode->i_nlink = 2; | 390 | set_nlink(inode, 2); |
391 | inode->i_mtime = inode->i_atime = inode->i_ctime = ts; | 391 | inode->i_mtime = inode->i_atime = inode->i_ctime = ts; |
392 | /* timestamp is already written, so mark_inode_dirty() is unneeded. */ | 392 | /* timestamp is already written, so mark_inode_dirty() is unneeded. */ |
393 | 393 | ||
diff --git a/fs/fat/namei_vfat.c b/fs/fat/namei_vfat.c index bb3f29c3557b..a87a65663c25 100644 --- a/fs/fat/namei_vfat.c +++ b/fs/fat/namei_vfat.c | |||
@@ -900,7 +900,7 @@ static int vfat_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
900 | goto out; | 900 | goto out; |
901 | } | 901 | } |
902 | inode->i_version++; | 902 | inode->i_version++; |
903 | inode->i_nlink = 2; | 903 | set_nlink(inode, 2); |
904 | inode->i_mtime = inode->i_atime = inode->i_ctime = ts; | 904 | inode->i_mtime = inode->i_atime = inode->i_ctime = ts; |
905 | /* timestamp is already written, so mark_inode_dirty() is unneeded. */ | 905 | /* timestamp is already written, so mark_inode_dirty() is unneeded. */ |
906 | 906 | ||
diff --git a/fs/freevxfs/vxfs_inode.c b/fs/freevxfs/vxfs_inode.c index 1a4311437a8b..7b2af5abe2fa 100644 --- a/fs/freevxfs/vxfs_inode.c +++ b/fs/freevxfs/vxfs_inode.c | |||
@@ -227,7 +227,7 @@ vxfs_iinit(struct inode *ip, struct vxfs_inode_info *vip) | |||
227 | ip->i_uid = (uid_t)vip->vii_uid; | 227 | ip->i_uid = (uid_t)vip->vii_uid; |
228 | ip->i_gid = (gid_t)vip->vii_gid; | 228 | ip->i_gid = (gid_t)vip->vii_gid; |
229 | 229 | ||
230 | ip->i_nlink = vip->vii_nlink; | 230 | set_nlink(ip, vip->vii_nlink); |
231 | ip->i_size = vip->vii_size; | 231 | ip->i_size = vip->vii_size; |
232 | 232 | ||
233 | ip->i_atime.tv_sec = vip->vii_atime; | 233 | ip->i_atime.tv_sec = vip->vii_atime; |
diff --git a/fs/fuse/control.c b/fs/fuse/control.c index 85542a7daf40..42593c587d48 100644 --- a/fs/fuse/control.c +++ b/fs/fuse/control.c | |||
@@ -231,7 +231,7 @@ static struct dentry *fuse_ctl_add_dentry(struct dentry *parent, | |||
231 | if (iop) | 231 | if (iop) |
232 | inode->i_op = iop; | 232 | inode->i_op = iop; |
233 | inode->i_fop = fop; | 233 | inode->i_fop = fop; |
234 | inode->i_nlink = nlink; | 234 | set_nlink(inode, nlink); |
235 | inode->i_private = fc; | 235 | inode->i_private = fc; |
236 | d_add(dentry, inode); | 236 | d_add(dentry, inode); |
237 | return dentry; | 237 | return dentry; |
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index add96f6ffda5..3e6d72756479 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c | |||
@@ -151,7 +151,7 @@ void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr, | |||
151 | 151 | ||
152 | inode->i_ino = attr->ino; | 152 | inode->i_ino = attr->ino; |
153 | inode->i_mode = (inode->i_mode & S_IFMT) | (attr->mode & 07777); | 153 | inode->i_mode = (inode->i_mode & S_IFMT) | (attr->mode & 07777); |
154 | inode->i_nlink = attr->nlink; | 154 | set_nlink(inode, attr->nlink); |
155 | inode->i_uid = attr->uid; | 155 | inode->i_uid = attr->uid; |
156 | inode->i_gid = attr->gid; | 156 | inode->i_gid = attr->gid; |
157 | inode->i_blocks = attr->blocks; | 157 | inode->i_blocks = attr->blocks; |
diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c index 78418b4fa857..1656df7aacd2 100644 --- a/fs/gfs2/glops.c +++ b/fs/gfs2/glops.c | |||
@@ -299,7 +299,7 @@ static void gfs2_set_nlink(struct inode *inode, u32 nlink) | |||
299 | if (nlink == 0) | 299 | if (nlink == 0) |
300 | clear_nlink(inode); | 300 | clear_nlink(inode); |
301 | else | 301 | else |
302 | inode->i_nlink = nlink; | 302 | set_nlink(inode, nlink); |
303 | } | 303 | } |
304 | } | 304 | } |
305 | 305 | ||
diff --git a/fs/hfs/dir.c b/fs/hfs/dir.c index b4d70b13be92..bce4eef91a06 100644 --- a/fs/hfs/dir.c +++ b/fs/hfs/dir.c | |||
@@ -198,7 +198,7 @@ static int hfs_create(struct inode *dir, struct dentry *dentry, int mode, | |||
198 | 198 | ||
199 | res = hfs_cat_create(inode->i_ino, dir, &dentry->d_name, inode); | 199 | res = hfs_cat_create(inode->i_ino, dir, &dentry->d_name, inode); |
200 | if (res) { | 200 | if (res) { |
201 | inode->i_nlink = 0; | 201 | clear_nlink(inode); |
202 | hfs_delete_inode(inode); | 202 | hfs_delete_inode(inode); |
203 | iput(inode); | 203 | iput(inode); |
204 | return res; | 204 | return res; |
@@ -227,7 +227,7 @@ static int hfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
227 | 227 | ||
228 | res = hfs_cat_create(inode->i_ino, dir, &dentry->d_name, inode); | 228 | res = hfs_cat_create(inode->i_ino, dir, &dentry->d_name, inode); |
229 | if (res) { | 229 | if (res) { |
230 | inode->i_nlink = 0; | 230 | clear_nlink(inode); |
231 | hfs_delete_inode(inode); | 231 | hfs_delete_inode(inode); |
232 | iput(inode); | 232 | iput(inode); |
233 | return res; | 233 | return res; |
diff --git a/fs/hfs/inode.c b/fs/hfs/inode.c index 96a1b625fc74..a1a9fdcd2a00 100644 --- a/fs/hfs/inode.c +++ b/fs/hfs/inode.c | |||
@@ -183,7 +183,7 @@ struct inode *hfs_new_inode(struct inode *dir, struct qstr *name, int mode) | |||
183 | inode->i_mode = mode; | 183 | inode->i_mode = mode; |
184 | inode->i_uid = current_fsuid(); | 184 | inode->i_uid = current_fsuid(); |
185 | inode->i_gid = current_fsgid(); | 185 | inode->i_gid = current_fsgid(); |
186 | inode->i_nlink = 1; | 186 | set_nlink(inode, 1); |
187 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC; | 187 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC; |
188 | HFS_I(inode)->flags = 0; | 188 | HFS_I(inode)->flags = 0; |
189 | HFS_I(inode)->rsrc_inode = NULL; | 189 | HFS_I(inode)->rsrc_inode = NULL; |
@@ -313,7 +313,7 @@ static int hfs_read_inode(struct inode *inode, void *data) | |||
313 | /* Initialize the inode */ | 313 | /* Initialize the inode */ |
314 | inode->i_uid = hsb->s_uid; | 314 | inode->i_uid = hsb->s_uid; |
315 | inode->i_gid = hsb->s_gid; | 315 | inode->i_gid = hsb->s_gid; |
316 | inode->i_nlink = 1; | 316 | set_nlink(inode, 1); |
317 | 317 | ||
318 | if (idata->key) | 318 | if (idata->key) |
319 | HFS_I(inode)->cat_key = *idata->key; | 319 | HFS_I(inode)->cat_key = *idata->key; |
diff --git a/fs/hfsplus/dir.c b/fs/hfsplus/dir.c index 25b2443a004c..4536cd3f15ae 100644 --- a/fs/hfsplus/dir.c +++ b/fs/hfsplus/dir.c | |||
@@ -415,7 +415,7 @@ static int hfsplus_symlink(struct inode *dir, struct dentry *dentry, | |||
415 | goto out; | 415 | goto out; |
416 | 416 | ||
417 | out_err: | 417 | out_err: |
418 | inode->i_nlink = 0; | 418 | clear_nlink(inode); |
419 | hfsplus_delete_inode(inode); | 419 | hfsplus_delete_inode(inode); |
420 | iput(inode); | 420 | iput(inode); |
421 | out: | 421 | out: |
@@ -440,7 +440,7 @@ static int hfsplus_mknod(struct inode *dir, struct dentry *dentry, | |||
440 | 440 | ||
441 | res = hfsplus_create_cat(inode->i_ino, dir, &dentry->d_name, inode); | 441 | res = hfsplus_create_cat(inode->i_ino, dir, &dentry->d_name, inode); |
442 | if (res) { | 442 | if (res) { |
443 | inode->i_nlink = 0; | 443 | clear_nlink(inode); |
444 | hfsplus_delete_inode(inode); | 444 | hfsplus_delete_inode(inode); |
445 | iput(inode); | 445 | iput(inode); |
446 | goto out; | 446 | goto out; |
diff --git a/fs/hfsplus/inode.c b/fs/hfsplus/inode.c index 4cc1e3a36ec7..40e1413be4cf 100644 --- a/fs/hfsplus/inode.c +++ b/fs/hfsplus/inode.c | |||
@@ -391,7 +391,7 @@ struct inode *hfsplus_new_inode(struct super_block *sb, int mode) | |||
391 | inode->i_mode = mode; | 391 | inode->i_mode = mode; |
392 | inode->i_uid = current_fsuid(); | 392 | inode->i_uid = current_fsuid(); |
393 | inode->i_gid = current_fsgid(); | 393 | inode->i_gid = current_fsgid(); |
394 | inode->i_nlink = 1; | 394 | set_nlink(inode, 1); |
395 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC; | 395 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC; |
396 | 396 | ||
397 | hip = HFSPLUS_I(inode); | 397 | hip = HFSPLUS_I(inode); |
@@ -512,7 +512,7 @@ int hfsplus_cat_read_inode(struct inode *inode, struct hfs_find_data *fd) | |||
512 | hfs_bnode_read(fd->bnode, &entry, fd->entryoffset, | 512 | hfs_bnode_read(fd->bnode, &entry, fd->entryoffset, |
513 | sizeof(struct hfsplus_cat_folder)); | 513 | sizeof(struct hfsplus_cat_folder)); |
514 | hfsplus_get_perms(inode, &folder->permissions, 1); | 514 | hfsplus_get_perms(inode, &folder->permissions, 1); |
515 | inode->i_nlink = 1; | 515 | set_nlink(inode, 1); |
516 | inode->i_size = 2 + be32_to_cpu(folder->valence); | 516 | inode->i_size = 2 + be32_to_cpu(folder->valence); |
517 | inode->i_atime = hfsp_mt2ut(folder->access_date); | 517 | inode->i_atime = hfsp_mt2ut(folder->access_date); |
518 | inode->i_mtime = hfsp_mt2ut(folder->content_mod_date); | 518 | inode->i_mtime = hfsp_mt2ut(folder->content_mod_date); |
@@ -532,11 +532,11 @@ int hfsplus_cat_read_inode(struct inode *inode, struct hfs_find_data *fd) | |||
532 | hfsplus_inode_read_fork(inode, HFSPLUS_IS_RSRC(inode) ? | 532 | hfsplus_inode_read_fork(inode, HFSPLUS_IS_RSRC(inode) ? |
533 | &file->rsrc_fork : &file->data_fork); | 533 | &file->rsrc_fork : &file->data_fork); |
534 | hfsplus_get_perms(inode, &file->permissions, 0); | 534 | hfsplus_get_perms(inode, &file->permissions, 0); |
535 | inode->i_nlink = 1; | 535 | set_nlink(inode, 1); |
536 | if (S_ISREG(inode->i_mode)) { | 536 | if (S_ISREG(inode->i_mode)) { |
537 | if (file->permissions.dev) | 537 | if (file->permissions.dev) |
538 | inode->i_nlink = | 538 | set_nlink(inode, |
539 | be32_to_cpu(file->permissions.dev); | 539 | be32_to_cpu(file->permissions.dev)); |
540 | inode->i_op = &hfsplus_file_inode_operations; | 540 | inode->i_op = &hfsplus_file_inode_operations; |
541 | inode->i_fop = &hfsplus_file_operations; | 541 | inode->i_fop = &hfsplus_file_operations; |
542 | inode->i_mapping->a_ops = &hfsplus_aops; | 542 | inode->i_mapping->a_ops = &hfsplus_aops; |
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index 0d22afdd4611..2f72da5ae686 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c | |||
@@ -541,7 +541,7 @@ static int read_name(struct inode *ino, char *name) | |||
541 | 541 | ||
542 | ino->i_ino = st.ino; | 542 | ino->i_ino = st.ino; |
543 | ino->i_mode = st.mode; | 543 | ino->i_mode = st.mode; |
544 | ino->i_nlink = st.nlink; | 544 | set_nlink(ino, st.nlink); |
545 | ino->i_uid = st.uid; | 545 | ino->i_uid = st.uid; |
546 | ino->i_gid = st.gid; | 546 | ino->i_gid = st.gid; |
547 | ino->i_atime = st.atime; | 547 | ino->i_atime = st.atime; |
diff --git a/fs/hpfs/dir.c b/fs/hpfs/dir.c index 96a8ed91cedd..2fa0089a02a8 100644 --- a/fs/hpfs/dir.c +++ b/fs/hpfs/dir.c | |||
@@ -247,7 +247,7 @@ struct dentry *hpfs_lookup(struct inode *dir, struct dentry *dentry, struct name | |||
247 | result->i_mode &= ~0111; | 247 | result->i_mode &= ~0111; |
248 | result->i_op = &hpfs_file_iops; | 248 | result->i_op = &hpfs_file_iops; |
249 | result->i_fop = &hpfs_file_ops; | 249 | result->i_fop = &hpfs_file_ops; |
250 | result->i_nlink = 1; | 250 | set_nlink(result, 1); |
251 | } | 251 | } |
252 | unlock_new_inode(result); | 252 | unlock_new_inode(result); |
253 | } | 253 | } |
diff --git a/fs/hpfs/inode.c b/fs/hpfs/inode.c index 338cd8368451..3b2cec29972b 100644 --- a/fs/hpfs/inode.c +++ b/fs/hpfs/inode.c | |||
@@ -53,7 +53,7 @@ void hpfs_read_inode(struct inode *i) | |||
53 | i->i_mode &= ~0111; | 53 | i->i_mode &= ~0111; |
54 | i->i_op = &hpfs_file_iops; | 54 | i->i_op = &hpfs_file_iops; |
55 | i->i_fop = &hpfs_file_ops; | 55 | i->i_fop = &hpfs_file_ops; |
56 | i->i_nlink = 0;*/ | 56 | clear_nlink(i);*/ |
57 | make_bad_inode(i); | 57 | make_bad_inode(i); |
58 | return; | 58 | return; |
59 | } | 59 | } |
@@ -77,7 +77,7 @@ void hpfs_read_inode(struct inode *i) | |||
77 | i->i_mode = S_IFLNK | 0777; | 77 | i->i_mode = S_IFLNK | 0777; |
78 | i->i_op = &page_symlink_inode_operations; | 78 | i->i_op = &page_symlink_inode_operations; |
79 | i->i_data.a_ops = &hpfs_symlink_aops; | 79 | i->i_data.a_ops = &hpfs_symlink_aops; |
80 | i->i_nlink = 1; | 80 | set_nlink(i, 1); |
81 | i->i_size = ea_size; | 81 | i->i_size = ea_size; |
82 | i->i_blocks = 1; | 82 | i->i_blocks = 1; |
83 | brelse(bh); | 83 | brelse(bh); |
@@ -101,7 +101,7 @@ void hpfs_read_inode(struct inode *i) | |||
101 | } | 101 | } |
102 | if (S_ISBLK(mode) || S_ISCHR(mode) || S_ISFIFO(mode) || S_ISSOCK(mode)) { | 102 | if (S_ISBLK(mode) || S_ISCHR(mode) || S_ISFIFO(mode) || S_ISSOCK(mode)) { |
103 | brelse(bh); | 103 | brelse(bh); |
104 | i->i_nlink = 1; | 104 | set_nlink(i, 1); |
105 | i->i_size = 0; | 105 | i->i_size = 0; |
106 | i->i_blocks = 1; | 106 | i->i_blocks = 1; |
107 | init_special_inode(i, mode, | 107 | init_special_inode(i, mode, |
@@ -125,13 +125,13 @@ void hpfs_read_inode(struct inode *i) | |||
125 | hpfs_count_dnodes(i->i_sb, hpfs_inode->i_dno, &n_dnodes, &n_subdirs, NULL); | 125 | hpfs_count_dnodes(i->i_sb, hpfs_inode->i_dno, &n_dnodes, &n_subdirs, NULL); |
126 | i->i_blocks = 4 * n_dnodes; | 126 | i->i_blocks = 4 * n_dnodes; |
127 | i->i_size = 2048 * n_dnodes; | 127 | i->i_size = 2048 * n_dnodes; |
128 | i->i_nlink = 2 + n_subdirs; | 128 | set_nlink(i, 2 + n_subdirs); |
129 | } else { | 129 | } else { |
130 | i->i_mode |= S_IFREG; | 130 | i->i_mode |= S_IFREG; |
131 | if (!hpfs_inode->i_ea_mode) i->i_mode &= ~0111; | 131 | if (!hpfs_inode->i_ea_mode) i->i_mode &= ~0111; |
132 | i->i_op = &hpfs_file_iops; | 132 | i->i_op = &hpfs_file_iops; |
133 | i->i_fop = &hpfs_file_ops; | 133 | i->i_fop = &hpfs_file_ops; |
134 | i->i_nlink = 1; | 134 | set_nlink(i, 1); |
135 | i->i_size = le32_to_cpu(fnode->file_size); | 135 | i->i_size = le32_to_cpu(fnode->file_size); |
136 | i->i_blocks = ((i->i_size + 511) >> 9) + 1; | 136 | i->i_blocks = ((i->i_size + 511) >> 9) + 1; |
137 | i->i_data.a_ops = &hpfs_aops; | 137 | i->i_data.a_ops = &hpfs_aops; |
diff --git a/fs/hpfs/namei.c b/fs/hpfs/namei.c index 2df69e2f07cf..ea91fcb0ef9b 100644 --- a/fs/hpfs/namei.c +++ b/fs/hpfs/namei.c | |||
@@ -56,7 +56,7 @@ static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
56 | result->i_fop = &hpfs_dir_ops; | 56 | result->i_fop = &hpfs_dir_ops; |
57 | result->i_blocks = 4; | 57 | result->i_blocks = 4; |
58 | result->i_size = 2048; | 58 | result->i_size = 2048; |
59 | result->i_nlink = 2; | 59 | set_nlink(result, 2); |
60 | if (dee.read_only) | 60 | if (dee.read_only) |
61 | result->i_mode &= ~0222; | 61 | result->i_mode &= ~0222; |
62 | 62 | ||
@@ -150,7 +150,7 @@ static int hpfs_create(struct inode *dir, struct dentry *dentry, int mode, struc | |||
150 | result->i_mode &= ~0111; | 150 | result->i_mode &= ~0111; |
151 | result->i_op = &hpfs_file_iops; | 151 | result->i_op = &hpfs_file_iops; |
152 | result->i_fop = &hpfs_file_ops; | 152 | result->i_fop = &hpfs_file_ops; |
153 | result->i_nlink = 1; | 153 | set_nlink(result, 1); |
154 | hpfs_i(result)->i_parent_dir = dir->i_ino; | 154 | hpfs_i(result)->i_parent_dir = dir->i_ino; |
155 | result->i_ctime.tv_sec = result->i_mtime.tv_sec = result->i_atime.tv_sec = local_to_gmt(dir->i_sb, le32_to_cpu(dee.creation_date)); | 155 | result->i_ctime.tv_sec = result->i_mtime.tv_sec = result->i_atime.tv_sec = local_to_gmt(dir->i_sb, le32_to_cpu(dee.creation_date)); |
156 | result->i_ctime.tv_nsec = 0; | 156 | result->i_ctime.tv_nsec = 0; |
@@ -242,7 +242,7 @@ static int hpfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t | |||
242 | hpfs_i(result)->i_ea_size = 0; | 242 | hpfs_i(result)->i_ea_size = 0; |
243 | result->i_uid = current_fsuid(); | 243 | result->i_uid = current_fsuid(); |
244 | result->i_gid = current_fsgid(); | 244 | result->i_gid = current_fsgid(); |
245 | result->i_nlink = 1; | 245 | set_nlink(result, 1); |
246 | result->i_size = 0; | 246 | result->i_size = 0; |
247 | result->i_blocks = 1; | 247 | result->i_blocks = 1; |
248 | init_special_inode(result, mode, rdev); | 248 | init_special_inode(result, mode, rdev); |
@@ -318,7 +318,7 @@ static int hpfs_symlink(struct inode *dir, struct dentry *dentry, const char *sy | |||
318 | result->i_uid = current_fsuid(); | 318 | result->i_uid = current_fsuid(); |
319 | result->i_gid = current_fsgid(); | 319 | result->i_gid = current_fsgid(); |
320 | result->i_blocks = 1; | 320 | result->i_blocks = 1; |
321 | result->i_nlink = 1; | 321 | set_nlink(result, 1); |
322 | result->i_size = strlen(symlink); | 322 | result->i_size = strlen(symlink); |
323 | result->i_op = &page_symlink_inode_operations; | 323 | result->i_op = &page_symlink_inode_operations; |
324 | result->i_data.a_ops = &hpfs_symlink_aops; | 324 | result->i_data.a_ops = &hpfs_symlink_aops; |
diff --git a/fs/hppfs/hppfs.c b/fs/hppfs/hppfs.c index 970ea987b3f6..f590b1160c6c 100644 --- a/fs/hppfs/hppfs.c +++ b/fs/hppfs/hppfs.c | |||
@@ -702,7 +702,7 @@ static struct inode *get_inode(struct super_block *sb, struct dentry *dentry) | |||
702 | inode->i_ctime = proc_ino->i_ctime; | 702 | inode->i_ctime = proc_ino->i_ctime; |
703 | inode->i_ino = proc_ino->i_ino; | 703 | inode->i_ino = proc_ino->i_ino; |
704 | inode->i_mode = proc_ino->i_mode; | 704 | inode->i_mode = proc_ino->i_mode; |
705 | inode->i_nlink = proc_ino->i_nlink; | 705 | set_nlink(inode, proc_ino->i_nlink); |
706 | inode->i_size = proc_ino->i_size; | 706 | inode->i_size = proc_ino->i_size; |
707 | inode->i_blocks = proc_ino->i_blocks; | 707 | inode->i_blocks = proc_ino->i_blocks; |
708 | 708 | ||
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index ec889538e5a6..0be5a78598d0 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c | |||
@@ -970,7 +970,7 @@ struct file *hugetlb_file_setup(const char *name, size_t size, | |||
970 | 970 | ||
971 | d_instantiate(path.dentry, inode); | 971 | d_instantiate(path.dentry, inode); |
972 | inode->i_size = size; | 972 | inode->i_size = size; |
973 | inode->i_nlink = 0; | 973 | clear_nlink(inode); |
974 | 974 | ||
975 | error = -ENFILE; | 975 | error = -ENFILE; |
976 | file = alloc_file(&path, FMODE_WRITE | FMODE_READ, | 976 | file = alloc_file(&path, FMODE_WRITE | FMODE_READ, |
diff --git a/fs/inode.c b/fs/inode.c index ecbb68dc7e2a..ee4e66b998f4 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
@@ -142,7 +142,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode) | |||
142 | atomic_set(&inode->i_count, 1); | 142 | atomic_set(&inode->i_count, 1); |
143 | inode->i_op = &empty_iops; | 143 | inode->i_op = &empty_iops; |
144 | inode->i_fop = &empty_fops; | 144 | inode->i_fop = &empty_fops; |
145 | inode->i_nlink = 1; | 145 | inode->__i_nlink = 1; |
146 | inode->i_opflags = 0; | 146 | inode->i_opflags = 0; |
147 | inode->i_uid = 0; | 147 | inode->i_uid = 0; |
148 | inode->i_gid = 0; | 148 | inode->i_gid = 0; |
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index a5d03672d04e..562adabef985 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c | |||
@@ -1319,7 +1319,7 @@ static int isofs_read_inode(struct inode *inode) | |||
1319 | inode->i_mode = S_IFDIR | sbi->s_dmode; | 1319 | inode->i_mode = S_IFDIR | sbi->s_dmode; |
1320 | else | 1320 | else |
1321 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; | 1321 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; |
1322 | inode->i_nlink = 1; /* | 1322 | set_nlink(inode, 1); /* |
1323 | * Set to 1. We know there are 2, but | 1323 | * Set to 1. We know there are 2, but |
1324 | * the find utility tries to optimize | 1324 | * the find utility tries to optimize |
1325 | * if it is 2, and it screws up. It is | 1325 | * if it is 2, and it screws up. It is |
@@ -1337,7 +1337,7 @@ static int isofs_read_inode(struct inode *inode) | |||
1337 | */ | 1337 | */ |
1338 | inode->i_mode = S_IFREG | S_IRUGO | S_IXUGO; | 1338 | inode->i_mode = S_IFREG | S_IRUGO | S_IXUGO; |
1339 | } | 1339 | } |
1340 | inode->i_nlink = 1; | 1340 | set_nlink(inode, 1); |
1341 | } | 1341 | } |
1342 | inode->i_uid = sbi->s_uid; | 1342 | inode->i_uid = sbi->s_uid; |
1343 | inode->i_gid = sbi->s_gid; | 1343 | inode->i_gid = sbi->s_gid; |
diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c index 1fbc7de88f50..70e79d0c756a 100644 --- a/fs/isofs/rock.c +++ b/fs/isofs/rock.c | |||
@@ -363,7 +363,7 @@ repeat: | |||
363 | break; | 363 | break; |
364 | case SIG('P', 'X'): | 364 | case SIG('P', 'X'): |
365 | inode->i_mode = isonum_733(rr->u.PX.mode); | 365 | inode->i_mode = isonum_733(rr->u.PX.mode); |
366 | inode->i_nlink = isonum_733(rr->u.PX.n_links); | 366 | set_nlink(inode, isonum_733(rr->u.PX.n_links)); |
367 | inode->i_uid = isonum_733(rr->u.PX.uid); | 367 | inode->i_uid = isonum_733(rr->u.PX.uid); |
368 | inode->i_gid = isonum_733(rr->u.PX.gid); | 368 | inode->i_gid = isonum_733(rr->u.PX.gid); |
369 | break; | 369 | break; |
@@ -496,7 +496,7 @@ repeat: | |||
496 | goto out; | 496 | goto out; |
497 | } | 497 | } |
498 | inode->i_mode = reloc->i_mode; | 498 | inode->i_mode = reloc->i_mode; |
499 | inode->i_nlink = reloc->i_nlink; | 499 | set_nlink(inode, reloc->i_nlink); |
500 | inode->i_uid = reloc->i_uid; | 500 | inode->i_uid = reloc->i_uid; |
501 | inode->i_gid = reloc->i_gid; | 501 | inode->i_gid = reloc->i_gid; |
502 | inode->i_rdev = reloc->i_rdev; | 502 | inode->i_rdev = reloc->i_rdev; |
diff --git a/fs/jffs2/dir.c b/fs/jffs2/dir.c index 9659b7c00468..be6169bd8acd 100644 --- a/fs/jffs2/dir.c +++ b/fs/jffs2/dir.c | |||
@@ -245,7 +245,7 @@ static int jffs2_unlink(struct inode *dir_i, struct dentry *dentry) | |||
245 | ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name, | 245 | ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name, |
246 | dentry->d_name.len, dead_f, now); | 246 | dentry->d_name.len, dead_f, now); |
247 | if (dead_f->inocache) | 247 | if (dead_f->inocache) |
248 | dentry->d_inode->i_nlink = dead_f->inocache->pino_nlink; | 248 | set_nlink(dentry->d_inode, dead_f->inocache->pino_nlink); |
249 | if (!ret) | 249 | if (!ret) |
250 | dir_i->i_mtime = dir_i->i_ctime = ITIME(now); | 250 | dir_i->i_mtime = dir_i->i_ctime = ITIME(now); |
251 | return ret; | 251 | return ret; |
@@ -278,7 +278,7 @@ static int jffs2_link (struct dentry *old_dentry, struct inode *dir_i, struct de | |||
278 | 278 | ||
279 | if (!ret) { | 279 | if (!ret) { |
280 | mutex_lock(&f->sem); | 280 | mutex_lock(&f->sem); |
281 | old_dentry->d_inode->i_nlink = ++f->inocache->pino_nlink; | 281 | set_nlink(old_dentry->d_inode, ++f->inocache->pino_nlink); |
282 | mutex_unlock(&f->sem); | 282 | mutex_unlock(&f->sem); |
283 | d_instantiate(dentry, old_dentry->d_inode); | 283 | d_instantiate(dentry, old_dentry->d_inode); |
284 | dir_i->i_mtime = dir_i->i_ctime = ITIME(now); | 284 | dir_i->i_mtime = dir_i->i_ctime = ITIME(now); |
@@ -497,7 +497,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode) | |||
497 | f = JFFS2_INODE_INFO(inode); | 497 | f = JFFS2_INODE_INFO(inode); |
498 | 498 | ||
499 | /* Directories get nlink 2 at start */ | 499 | /* Directories get nlink 2 at start */ |
500 | inode->i_nlink = 2; | 500 | set_nlink(inode, 2); |
501 | /* but ic->pino_nlink is the parent ino# */ | 501 | /* but ic->pino_nlink is the parent ino# */ |
502 | f->inocache->pino_nlink = dir_i->i_ino; | 502 | f->inocache->pino_nlink = dir_i->i_ino; |
503 | 503 | ||
diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c index bbcb9755dd2b..7286e44ac665 100644 --- a/fs/jffs2/fs.c +++ b/fs/jffs2/fs.c | |||
@@ -278,7 +278,7 @@ struct inode *jffs2_iget(struct super_block *sb, unsigned long ino) | |||
278 | inode->i_mtime = ITIME(je32_to_cpu(latest_node.mtime)); | 278 | inode->i_mtime = ITIME(je32_to_cpu(latest_node.mtime)); |
279 | inode->i_ctime = ITIME(je32_to_cpu(latest_node.ctime)); | 279 | inode->i_ctime = ITIME(je32_to_cpu(latest_node.ctime)); |
280 | 280 | ||
281 | inode->i_nlink = f->inocache->pino_nlink; | 281 | set_nlink(inode, f->inocache->pino_nlink); |
282 | 282 | ||
283 | inode->i_blocks = (inode->i_size + 511) >> 9; | 283 | inode->i_blocks = (inode->i_size + 511) >> 9; |
284 | 284 | ||
@@ -291,7 +291,7 @@ struct inode *jffs2_iget(struct super_block *sb, unsigned long ino) | |||
291 | case S_IFDIR: | 291 | case S_IFDIR: |
292 | { | 292 | { |
293 | struct jffs2_full_dirent *fd; | 293 | struct jffs2_full_dirent *fd; |
294 | inode->i_nlink = 2; /* parent and '.' */ | 294 | set_nlink(inode, 2); /* parent and '.' */ |
295 | 295 | ||
296 | for (fd=f->dents; fd; fd = fd->next) { | 296 | for (fd=f->dents; fd; fd = fd->next) { |
297 | if (fd->type == DT_DIR && fd->ino) | 297 | if (fd->type == DT_DIR && fd->ino) |
@@ -453,7 +453,7 @@ struct inode *jffs2_new_inode (struct inode *dir_i, umode_t mode, struct jffs2_r | |||
453 | iput(inode); | 453 | iput(inode); |
454 | return ERR_PTR(ret); | 454 | return ERR_PTR(ret); |
455 | } | 455 | } |
456 | inode->i_nlink = 1; | 456 | set_nlink(inode, 1); |
457 | inode->i_ino = je32_to_cpu(ri->ino); | 457 | inode->i_ino = je32_to_cpu(ri->ino); |
458 | inode->i_mode = jemode_to_cpu(ri->mode); | 458 | inode->i_mode = jemode_to_cpu(ri->mode); |
459 | inode->i_gid = je16_to_cpu(ri->gid); | 459 | inode->i_gid = je16_to_cpu(ri->gid); |
diff --git a/fs/jfs/jfs_imap.c b/fs/jfs/jfs_imap.c index b78b2f978f04..1b6f15f191b3 100644 --- a/fs/jfs/jfs_imap.c +++ b/fs/jfs/jfs_imap.c | |||
@@ -457,7 +457,7 @@ struct inode *diReadSpecial(struct super_block *sb, ino_t inum, int secondary) | |||
457 | /* read the page of fixed disk inode (AIT) in raw mode */ | 457 | /* read the page of fixed disk inode (AIT) in raw mode */ |
458 | mp = read_metapage(ip, address << sbi->l2nbperpage, PSIZE, 1); | 458 | mp = read_metapage(ip, address << sbi->l2nbperpage, PSIZE, 1); |
459 | if (mp == NULL) { | 459 | if (mp == NULL) { |
460 | ip->i_nlink = 1; /* Don't want iput() deleting it */ | 460 | set_nlink(ip, 1); /* Don't want iput() deleting it */ |
461 | iput(ip); | 461 | iput(ip); |
462 | return (NULL); | 462 | return (NULL); |
463 | } | 463 | } |
@@ -469,7 +469,7 @@ struct inode *diReadSpecial(struct super_block *sb, ino_t inum, int secondary) | |||
469 | /* copy on-disk inode to in-memory inode */ | 469 | /* copy on-disk inode to in-memory inode */ |
470 | if ((copy_from_dinode(dp, ip)) != 0) { | 470 | if ((copy_from_dinode(dp, ip)) != 0) { |
471 | /* handle bad return by returning NULL for ip */ | 471 | /* handle bad return by returning NULL for ip */ |
472 | ip->i_nlink = 1; /* Don't want iput() deleting it */ | 472 | set_nlink(ip, 1); /* Don't want iput() deleting it */ |
473 | iput(ip); | 473 | iput(ip); |
474 | /* release the page */ | 474 | /* release the page */ |
475 | release_metapage(mp); | 475 | release_metapage(mp); |
@@ -3076,7 +3076,7 @@ static int copy_from_dinode(struct dinode * dip, struct inode *ip) | |||
3076 | ip->i_mode |= 0001; | 3076 | ip->i_mode |= 0001; |
3077 | } | 3077 | } |
3078 | } | 3078 | } |
3079 | ip->i_nlink = le32_to_cpu(dip->di_nlink); | 3079 | set_nlink(ip, le32_to_cpu(dip->di_nlink)); |
3080 | 3080 | ||
3081 | jfs_ip->saved_uid = le32_to_cpu(dip->di_uid); | 3081 | jfs_ip->saved_uid = le32_to_cpu(dip->di_uid); |
3082 | if (sbi->uid == -1) | 3082 | if (sbi->uid == -1) |
diff --git a/fs/jfs/jfs_inode.c b/fs/jfs/jfs_inode.c index 2686531e235a..c1a3e603279c 100644 --- a/fs/jfs/jfs_inode.c +++ b/fs/jfs/jfs_inode.c | |||
@@ -157,7 +157,7 @@ fail_drop: | |||
157 | dquot_drop(inode); | 157 | dquot_drop(inode); |
158 | inode->i_flags |= S_NOQUOTA; | 158 | inode->i_flags |= S_NOQUOTA; |
159 | fail_unlock: | 159 | fail_unlock: |
160 | inode->i_nlink = 0; | 160 | clear_nlink(inode); |
161 | unlock_new_inode(inode); | 161 | unlock_new_inode(inode); |
162 | fail_put: | 162 | fail_put: |
163 | iput(inode); | 163 | iput(inode); |
diff --git a/fs/jfs/namei.c b/fs/jfs/namei.c index e17545e15664..a112ad96e474 100644 --- a/fs/jfs/namei.c +++ b/fs/jfs/namei.c | |||
@@ -172,7 +172,7 @@ static int jfs_create(struct inode *dip, struct dentry *dentry, int mode, | |||
172 | mutex_unlock(&JFS_IP(dip)->commit_mutex); | 172 | mutex_unlock(&JFS_IP(dip)->commit_mutex); |
173 | if (rc) { | 173 | if (rc) { |
174 | free_ea_wmap(ip); | 174 | free_ea_wmap(ip); |
175 | ip->i_nlink = 0; | 175 | clear_nlink(ip); |
176 | unlock_new_inode(ip); | 176 | unlock_new_inode(ip); |
177 | iput(ip); | 177 | iput(ip); |
178 | } else { | 178 | } else { |
@@ -292,7 +292,7 @@ static int jfs_mkdir(struct inode *dip, struct dentry *dentry, int mode) | |||
292 | goto out3; | 292 | goto out3; |
293 | } | 293 | } |
294 | 294 | ||
295 | ip->i_nlink = 2; /* for '.' */ | 295 | set_nlink(ip, 2); /* for '.' */ |
296 | ip->i_op = &jfs_dir_inode_operations; | 296 | ip->i_op = &jfs_dir_inode_operations; |
297 | ip->i_fop = &jfs_dir_operations; | 297 | ip->i_fop = &jfs_dir_operations; |
298 | 298 | ||
@@ -311,7 +311,7 @@ static int jfs_mkdir(struct inode *dip, struct dentry *dentry, int mode) | |||
311 | mutex_unlock(&JFS_IP(dip)->commit_mutex); | 311 | mutex_unlock(&JFS_IP(dip)->commit_mutex); |
312 | if (rc) { | 312 | if (rc) { |
313 | free_ea_wmap(ip); | 313 | free_ea_wmap(ip); |
314 | ip->i_nlink = 0; | 314 | clear_nlink(ip); |
315 | unlock_new_inode(ip); | 315 | unlock_new_inode(ip); |
316 | iput(ip); | 316 | iput(ip); |
317 | } else { | 317 | } else { |
@@ -844,7 +844,7 @@ static int jfs_link(struct dentry *old_dentry, | |||
844 | rc = txCommit(tid, 2, &iplist[0], 0); | 844 | rc = txCommit(tid, 2, &iplist[0], 0); |
845 | 845 | ||
846 | if (rc) { | 846 | if (rc) { |
847 | ip->i_nlink--; /* never instantiated */ | 847 | drop_nlink(ip); /* never instantiated */ |
848 | iput(ip); | 848 | iput(ip); |
849 | } else | 849 | } else |
850 | d_instantiate(dentry, ip); | 850 | d_instantiate(dentry, ip); |
@@ -1048,7 +1048,7 @@ static int jfs_symlink(struct inode *dip, struct dentry *dentry, | |||
1048 | mutex_unlock(&JFS_IP(dip)->commit_mutex); | 1048 | mutex_unlock(&JFS_IP(dip)->commit_mutex); |
1049 | if (rc) { | 1049 | if (rc) { |
1050 | free_ea_wmap(ip); | 1050 | free_ea_wmap(ip); |
1051 | ip->i_nlink = 0; | 1051 | clear_nlink(ip); |
1052 | unlock_new_inode(ip); | 1052 | unlock_new_inode(ip); |
1053 | iput(ip); | 1053 | iput(ip); |
1054 | } else { | 1054 | } else { |
@@ -1433,7 +1433,7 @@ static int jfs_mknod(struct inode *dir, struct dentry *dentry, | |||
1433 | mutex_unlock(&JFS_IP(dir)->commit_mutex); | 1433 | mutex_unlock(&JFS_IP(dir)->commit_mutex); |
1434 | if (rc) { | 1434 | if (rc) { |
1435 | free_ea_wmap(ip); | 1435 | free_ea_wmap(ip); |
1436 | ip->i_nlink = 0; | 1436 | clear_nlink(ip); |
1437 | unlock_new_inode(ip); | 1437 | unlock_new_inode(ip); |
1438 | iput(ip); | 1438 | iput(ip); |
1439 | } else { | 1439 | } else { |
diff --git a/fs/jfs/super.c b/fs/jfs/super.c index 06c8a67cbe76..a44eff076c17 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c | |||
@@ -485,7 +485,6 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) | |||
485 | goto out_unload; | 485 | goto out_unload; |
486 | } | 486 | } |
487 | inode->i_ino = 0; | 487 | inode->i_ino = 0; |
488 | inode->i_nlink = 1; | ||
489 | inode->i_size = sb->s_bdev->bd_inode->i_size; | 488 | inode->i_size = sb->s_bdev->bd_inode->i_size; |
490 | inode->i_mapping->a_ops = &jfs_metapage_aops; | 489 | inode->i_mapping->a_ops = &jfs_metapage_aops; |
491 | insert_inode_hash(inode); | 490 | insert_inode_hash(inode); |
diff --git a/fs/libfs.c b/fs/libfs.c index c18e9a1235b6..f6d411eef1e7 100644 --- a/fs/libfs.c +++ b/fs/libfs.c | |||
@@ -490,7 +490,7 @@ int simple_fill_super(struct super_block *s, unsigned long magic, | |||
490 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 490 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
491 | inode->i_op = &simple_dir_inode_operations; | 491 | inode->i_op = &simple_dir_inode_operations; |
492 | inode->i_fop = &simple_dir_operations; | 492 | inode->i_fop = &simple_dir_operations; |
493 | inode->i_nlink = 2; | 493 | set_nlink(inode, 2); |
494 | root = d_alloc_root(inode); | 494 | root = d_alloc_root(inode); |
495 | if (!root) { | 495 | if (!root) { |
496 | iput(inode); | 496 | iput(inode); |
@@ -510,8 +510,10 @@ int simple_fill_super(struct super_block *s, unsigned long magic, | |||
510 | if (!dentry) | 510 | if (!dentry) |
511 | goto out; | 511 | goto out; |
512 | inode = new_inode(s); | 512 | inode = new_inode(s); |
513 | if (!inode) | 513 | if (!inode) { |
514 | dput(dentry); | ||
514 | goto out; | 515 | goto out; |
516 | } | ||
515 | inode->i_mode = S_IFREG | files->mode; | 517 | inode->i_mode = S_IFREG | files->mode; |
516 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; | 518 | inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; |
517 | inode->i_fop = files->ops; | 519 | inode->i_fop = files->ops; |
diff --git a/fs/logfs/dir.c b/fs/logfs/dir.c index b3ff3d894165..b7d7f67cee5a 100644 --- a/fs/logfs/dir.c +++ b/fs/logfs/dir.c | |||
@@ -197,7 +197,7 @@ static int logfs_remove_inode(struct inode *inode) | |||
197 | { | 197 | { |
198 | int ret; | 198 | int ret; |
199 | 199 | ||
200 | inode->i_nlink--; | 200 | drop_nlink(inode); |
201 | ret = write_inode(inode); | 201 | ret = write_inode(inode); |
202 | LOGFS_BUG_ON(ret, inode->i_sb); | 202 | LOGFS_BUG_ON(ret, inode->i_sb); |
203 | return ret; | 203 | return ret; |
@@ -433,7 +433,7 @@ static int __logfs_create(struct inode *dir, struct dentry *dentry, | |||
433 | 433 | ||
434 | ta = kzalloc(sizeof(*ta), GFP_KERNEL); | 434 | ta = kzalloc(sizeof(*ta), GFP_KERNEL); |
435 | if (!ta) { | 435 | if (!ta) { |
436 | inode->i_nlink--; | 436 | drop_nlink(inode); |
437 | iput(inode); | 437 | iput(inode); |
438 | return -ENOMEM; | 438 | return -ENOMEM; |
439 | } | 439 | } |
@@ -456,7 +456,7 @@ static int __logfs_create(struct inode *dir, struct dentry *dentry, | |||
456 | abort_transaction(inode, ta); | 456 | abort_transaction(inode, ta); |
457 | li->li_flags |= LOGFS_IF_STILLBORN; | 457 | li->li_flags |= LOGFS_IF_STILLBORN; |
458 | /* FIXME: truncate symlink */ | 458 | /* FIXME: truncate symlink */ |
459 | inode->i_nlink--; | 459 | drop_nlink(inode); |
460 | iput(inode); | 460 | iput(inode); |
461 | goto out; | 461 | goto out; |
462 | } | 462 | } |
@@ -563,7 +563,7 @@ static int logfs_link(struct dentry *old_dentry, struct inode *dir, | |||
563 | 563 | ||
564 | inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME; | 564 | inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME; |
565 | ihold(inode); | 565 | ihold(inode); |
566 | inode->i_nlink++; | 566 | inc_nlink(inode); |
567 | mark_inode_dirty_sync(inode); | 567 | mark_inode_dirty_sync(inode); |
568 | 568 | ||
569 | return __logfs_create(dir, dentry, inode, NULL, 0); | 569 | return __logfs_create(dir, dentry, inode, NULL, 0); |
diff --git a/fs/logfs/inode.c b/fs/logfs/inode.c index edfea7a3a747..7e441ad5f792 100644 --- a/fs/logfs/inode.c +++ b/fs/logfs/inode.c | |||
@@ -93,7 +93,7 @@ static struct inode *__logfs_iget(struct super_block *sb, ino_t ino) | |||
93 | /* inode->i_nlink == 0 can be true when called from | 93 | /* inode->i_nlink == 0 can be true when called from |
94 | * block validator */ | 94 | * block validator */ |
95 | /* set i_nlink to 0 to prevent caching */ | 95 | /* set i_nlink to 0 to prevent caching */ |
96 | inode->i_nlink = 0; | 96 | clear_nlink(inode); |
97 | logfs_inode(inode)->li_flags |= LOGFS_IF_ZOMBIE; | 97 | logfs_inode(inode)->li_flags |= LOGFS_IF_ZOMBIE; |
98 | iget_failed(inode); | 98 | iget_failed(inode); |
99 | if (!err) | 99 | if (!err) |
@@ -199,7 +199,6 @@ static void logfs_init_inode(struct super_block *sb, struct inode *inode) | |||
199 | inode->i_blocks = 0; | 199 | inode->i_blocks = 0; |
200 | inode->i_ctime = CURRENT_TIME; | 200 | inode->i_ctime = CURRENT_TIME; |
201 | inode->i_mtime = CURRENT_TIME; | 201 | inode->i_mtime = CURRENT_TIME; |
202 | inode->i_nlink = 1; | ||
203 | li->li_refcount = 1; | 202 | li->li_refcount = 1; |
204 | INIT_LIST_HEAD(&li->li_freeing_list); | 203 | INIT_LIST_HEAD(&li->li_freeing_list); |
205 | 204 | ||
diff --git a/fs/logfs/readwrite.c b/fs/logfs/readwrite.c index d8d09380c7de..2ac4217b7901 100644 --- a/fs/logfs/readwrite.c +++ b/fs/logfs/readwrite.c | |||
@@ -126,7 +126,7 @@ static void logfs_disk_to_inode(struct logfs_disk_inode *di, struct inode*inode) | |||
126 | inode->i_atime = be64_to_timespec(di->di_atime); | 126 | inode->i_atime = be64_to_timespec(di->di_atime); |
127 | inode->i_ctime = be64_to_timespec(di->di_ctime); | 127 | inode->i_ctime = be64_to_timespec(di->di_ctime); |
128 | inode->i_mtime = be64_to_timespec(di->di_mtime); | 128 | inode->i_mtime = be64_to_timespec(di->di_mtime); |
129 | inode->i_nlink = be32_to_cpu(di->di_refcount); | 129 | set_nlink(inode, be32_to_cpu(di->di_refcount)); |
130 | inode->i_generation = be32_to_cpu(di->di_generation); | 130 | inode->i_generation = be32_to_cpu(di->di_generation); |
131 | 131 | ||
132 | switch (inode->i_mode & S_IFMT) { | 132 | switch (inode->i_mode & S_IFMT) { |
diff --git a/fs/minix/inode.c b/fs/minix/inode.c index e7d23e25bf1d..64cdcd662ffc 100644 --- a/fs/minix/inode.c +++ b/fs/minix/inode.c | |||
@@ -446,7 +446,7 @@ static struct inode *V1_minix_iget(struct inode *inode) | |||
446 | inode->i_mode = raw_inode->i_mode; | 446 | inode->i_mode = raw_inode->i_mode; |
447 | inode->i_uid = (uid_t)raw_inode->i_uid; | 447 | inode->i_uid = (uid_t)raw_inode->i_uid; |
448 | inode->i_gid = (gid_t)raw_inode->i_gid; | 448 | inode->i_gid = (gid_t)raw_inode->i_gid; |
449 | inode->i_nlink = raw_inode->i_nlinks; | 449 | set_nlink(inode, raw_inode->i_nlinks); |
450 | inode->i_size = raw_inode->i_size; | 450 | inode->i_size = raw_inode->i_size; |
451 | inode->i_mtime.tv_sec = inode->i_atime.tv_sec = inode->i_ctime.tv_sec = raw_inode->i_time; | 451 | inode->i_mtime.tv_sec = inode->i_atime.tv_sec = inode->i_ctime.tv_sec = raw_inode->i_time; |
452 | inode->i_mtime.tv_nsec = 0; | 452 | inode->i_mtime.tv_nsec = 0; |
@@ -479,7 +479,7 @@ static struct inode *V2_minix_iget(struct inode *inode) | |||
479 | inode->i_mode = raw_inode->i_mode; | 479 | inode->i_mode = raw_inode->i_mode; |
480 | inode->i_uid = (uid_t)raw_inode->i_uid; | 480 | inode->i_uid = (uid_t)raw_inode->i_uid; |
481 | inode->i_gid = (gid_t)raw_inode->i_gid; | 481 | inode->i_gid = (gid_t)raw_inode->i_gid; |
482 | inode->i_nlink = raw_inode->i_nlinks; | 482 | set_nlink(inode, raw_inode->i_nlinks); |
483 | inode->i_size = raw_inode->i_size; | 483 | inode->i_size = raw_inode->i_size; |
484 | inode->i_mtime.tv_sec = raw_inode->i_mtime; | 484 | inode->i_mtime.tv_sec = raw_inode->i_mtime; |
485 | inode->i_atime.tv_sec = raw_inode->i_atime; | 485 | inode->i_atime.tv_sec = raw_inode->i_atime; |
diff --git a/fs/namei.c b/fs/namei.c index 7657be4352bf..ac6d214da827 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
@@ -137,7 +137,7 @@ static int do_getname(const char __user *filename, char *page) | |||
137 | return retval; | 137 | return retval; |
138 | } | 138 | } |
139 | 139 | ||
140 | static char *getname_flags(const char __user * filename, int flags) | 140 | static char *getname_flags(const char __user *filename, int flags, int *empty) |
141 | { | 141 | { |
142 | char *tmp, *result; | 142 | char *tmp, *result; |
143 | 143 | ||
@@ -148,6 +148,8 @@ static char *getname_flags(const char __user * filename, int flags) | |||
148 | 148 | ||
149 | result = tmp; | 149 | result = tmp; |
150 | if (retval < 0) { | 150 | if (retval < 0) { |
151 | if (retval == -ENOENT && empty) | ||
152 | *empty = 1; | ||
151 | if (retval != -ENOENT || !(flags & LOOKUP_EMPTY)) { | 153 | if (retval != -ENOENT || !(flags & LOOKUP_EMPTY)) { |
152 | __putname(tmp); | 154 | __putname(tmp); |
153 | result = ERR_PTR(retval); | 155 | result = ERR_PTR(retval); |
@@ -160,7 +162,7 @@ static char *getname_flags(const char __user * filename, int flags) | |||
160 | 162 | ||
161 | char *getname(const char __user * filename) | 163 | char *getname(const char __user * filename) |
162 | { | 164 | { |
163 | return getname_flags(filename, 0); | 165 | return getname_flags(filename, 0, 0); |
164 | } | 166 | } |
165 | 167 | ||
166 | #ifdef CONFIG_AUDITSYSCALL | 168 | #ifdef CONFIG_AUDITSYSCALL |
@@ -1798,11 +1800,11 @@ struct dentry *lookup_one_len(const char *name, struct dentry *base, int len) | |||
1798 | return __lookup_hash(&this, base, NULL); | 1800 | return __lookup_hash(&this, base, NULL); |
1799 | } | 1801 | } |
1800 | 1802 | ||
1801 | int user_path_at(int dfd, const char __user *name, unsigned flags, | 1803 | int user_path_at_empty(int dfd, const char __user *name, unsigned flags, |
1802 | struct path *path) | 1804 | struct path *path, int *empty) |
1803 | { | 1805 | { |
1804 | struct nameidata nd; | 1806 | struct nameidata nd; |
1805 | char *tmp = getname_flags(name, flags); | 1807 | char *tmp = getname_flags(name, flags, empty); |
1806 | int err = PTR_ERR(tmp); | 1808 | int err = PTR_ERR(tmp); |
1807 | if (!IS_ERR(tmp)) { | 1809 | if (!IS_ERR(tmp)) { |
1808 | 1810 | ||
@@ -1816,6 +1818,12 @@ int user_path_at(int dfd, const char __user *name, unsigned flags, | |||
1816 | return err; | 1818 | return err; |
1817 | } | 1819 | } |
1818 | 1820 | ||
1821 | int user_path_at(int dfd, const char __user *name, unsigned flags, | ||
1822 | struct path *path) | ||
1823 | { | ||
1824 | return user_path_at_empty(dfd, name, flags, path, 0); | ||
1825 | } | ||
1826 | |||
1819 | static int user_path_parent(int dfd, const char __user *path, | 1827 | static int user_path_parent(int dfd, const char __user *path, |
1820 | struct nameidata *nd, char **name) | 1828 | struct nameidata *nd, char **name) |
1821 | { | 1829 | { |
diff --git a/fs/ncpfs/inode.c b/fs/ncpfs/inode.c index 202f370526a7..5b5fa33b6b9d 100644 --- a/fs/ncpfs/inode.c +++ b/fs/ncpfs/inode.c | |||
@@ -228,7 +228,7 @@ static void ncp_set_attr(struct inode *inode, struct ncp_entry_info *nwinfo) | |||
228 | 228 | ||
229 | DDPRINTK("ncp_read_inode: inode->i_mode = %u\n", inode->i_mode); | 229 | DDPRINTK("ncp_read_inode: inode->i_mode = %u\n", inode->i_mode); |
230 | 230 | ||
231 | inode->i_nlink = 1; | 231 | set_nlink(inode, 1); |
232 | inode->i_uid = server->m.uid; | 232 | inode->i_uid = server->m.uid; |
233 | inode->i_gid = server->m.gid; | 233 | inode->i_gid = server->m.gid; |
234 | 234 | ||
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 4dc6d078f108..c07a55aec838 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -320,7 +320,7 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr) | |||
320 | memset(&inode->i_ctime, 0, sizeof(inode->i_ctime)); | 320 | memset(&inode->i_ctime, 0, sizeof(inode->i_ctime)); |
321 | inode->i_version = 0; | 321 | inode->i_version = 0; |
322 | inode->i_size = 0; | 322 | inode->i_size = 0; |
323 | inode->i_nlink = 0; | 323 | clear_nlink(inode); |
324 | inode->i_uid = -2; | 324 | inode->i_uid = -2; |
325 | inode->i_gid = -2; | 325 | inode->i_gid = -2; |
326 | inode->i_blocks = 0; | 326 | inode->i_blocks = 0; |
@@ -355,7 +355,7 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr) | |||
355 | | NFS_INO_INVALID_DATA | 355 | | NFS_INO_INVALID_DATA |
356 | | NFS_INO_REVAL_PAGECACHE; | 356 | | NFS_INO_REVAL_PAGECACHE; |
357 | if (fattr->valid & NFS_ATTR_FATTR_NLINK) | 357 | if (fattr->valid & NFS_ATTR_FATTR_NLINK) |
358 | inode->i_nlink = fattr->nlink; | 358 | set_nlink(inode, fattr->nlink); |
359 | else if (nfs_server_capable(inode, NFS_CAP_NLINK)) | 359 | else if (nfs_server_capable(inode, NFS_CAP_NLINK)) |
360 | nfsi->cache_validity |= NFS_INO_INVALID_ATTR; | 360 | nfsi->cache_validity |= NFS_INO_INVALID_ATTR; |
361 | if (fattr->valid & NFS_ATTR_FATTR_OWNER) | 361 | if (fattr->valid & NFS_ATTR_FATTR_OWNER) |
@@ -1361,7 +1361,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) | |||
1361 | invalid |= NFS_INO_INVALID_ATTR; | 1361 | invalid |= NFS_INO_INVALID_ATTR; |
1362 | if (S_ISDIR(inode->i_mode)) | 1362 | if (S_ISDIR(inode->i_mode)) |
1363 | invalid |= NFS_INO_INVALID_DATA; | 1363 | invalid |= NFS_INO_INVALID_DATA; |
1364 | inode->i_nlink = fattr->nlink; | 1364 | set_nlink(inode, fattr->nlink); |
1365 | } | 1365 | } |
1366 | } else if (server->caps & NFS_CAP_NLINK) | 1366 | } else if (server->caps & NFS_CAP_NLINK) |
1367 | invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR | 1367 | invalid |= save_cache_validity & (NFS_INO_INVALID_ATTR |
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c index 666628b395f1..b50ffb72e5b3 100644 --- a/fs/nilfs2/inode.c +++ b/fs/nilfs2/inode.c | |||
@@ -354,7 +354,7 @@ struct inode *nilfs_new_inode(struct inode *dir, int mode) | |||
354 | 354 | ||
355 | failed_acl: | 355 | failed_acl: |
356 | failed_bmap: | 356 | failed_bmap: |
357 | inode->i_nlink = 0; | 357 | clear_nlink(inode); |
358 | iput(inode); /* raw_inode will be deleted through | 358 | iput(inode); /* raw_inode will be deleted through |
359 | generic_delete_inode() */ | 359 | generic_delete_inode() */ |
360 | goto failed; | 360 | goto failed; |
@@ -396,7 +396,7 @@ int nilfs_read_inode_common(struct inode *inode, | |||
396 | inode->i_mode = le16_to_cpu(raw_inode->i_mode); | 396 | inode->i_mode = le16_to_cpu(raw_inode->i_mode); |
397 | inode->i_uid = (uid_t)le32_to_cpu(raw_inode->i_uid); | 397 | inode->i_uid = (uid_t)le32_to_cpu(raw_inode->i_uid); |
398 | inode->i_gid = (gid_t)le32_to_cpu(raw_inode->i_gid); | 398 | inode->i_gid = (gid_t)le32_to_cpu(raw_inode->i_gid); |
399 | inode->i_nlink = le16_to_cpu(raw_inode->i_links_count); | 399 | set_nlink(inode, le16_to_cpu(raw_inode->i_links_count)); |
400 | inode->i_size = le64_to_cpu(raw_inode->i_size); | 400 | inode->i_size = le64_to_cpu(raw_inode->i_size); |
401 | inode->i_atime.tv_sec = le64_to_cpu(raw_inode->i_mtime); | 401 | inode->i_atime.tv_sec = le64_to_cpu(raw_inode->i_mtime); |
402 | inode->i_ctime.tv_sec = le64_to_cpu(raw_inode->i_ctime); | 402 | inode->i_ctime.tv_sec = le64_to_cpu(raw_inode->i_ctime); |
diff --git a/fs/nilfs2/namei.c b/fs/nilfs2/namei.c index a3141990061e..768982de10e4 100644 --- a/fs/nilfs2/namei.c +++ b/fs/nilfs2/namei.c | |||
@@ -289,7 +289,7 @@ static int nilfs_do_unlink(struct inode *dir, struct dentry *dentry) | |||
289 | nilfs_warning(inode->i_sb, __func__, | 289 | nilfs_warning(inode->i_sb, __func__, |
290 | "deleting nonexistent file (%lu), %d\n", | 290 | "deleting nonexistent file (%lu), %d\n", |
291 | inode->i_ino, inode->i_nlink); | 291 | inode->i_ino, inode->i_nlink); |
292 | inode->i_nlink = 1; | 292 | set_nlink(inode, 1); |
293 | } | 293 | } |
294 | err = nilfs_delete_entry(de, page); | 294 | err = nilfs_delete_entry(de, page); |
295 | if (err) | 295 | if (err) |
diff --git a/fs/ntfs/inode.c b/fs/ntfs/inode.c index 1371487da955..97e2dacbc867 100644 --- a/fs/ntfs/inode.c +++ b/fs/ntfs/inode.c | |||
@@ -612,7 +612,7 @@ static int ntfs_read_locked_inode(struct inode *vi) | |||
612 | * might be tricky due to vfs interactions. Need to think about this | 612 | * might be tricky due to vfs interactions. Need to think about this |
613 | * some more when implementing the unlink command. | 613 | * some more when implementing the unlink command. |
614 | */ | 614 | */ |
615 | vi->i_nlink = le16_to_cpu(m->link_count); | 615 | set_nlink(vi, le16_to_cpu(m->link_count)); |
616 | /* | 616 | /* |
617 | * FIXME: Reparse points can have the directory bit set even though | 617 | * FIXME: Reparse points can have the directory bit set even though |
618 | * they would be S_IFLNK. Need to deal with this further below when we | 618 | * they would be S_IFLNK. Need to deal with this further below when we |
@@ -634,7 +634,7 @@ static int ntfs_read_locked_inode(struct inode *vi) | |||
634 | vi->i_mode &= ~vol->dmask; | 634 | vi->i_mode &= ~vol->dmask; |
635 | /* Things break without this kludge! */ | 635 | /* Things break without this kludge! */ |
636 | if (vi->i_nlink > 1) | 636 | if (vi->i_nlink > 1) |
637 | vi->i_nlink = 1; | 637 | set_nlink(vi, 1); |
638 | } else { | 638 | } else { |
639 | vi->i_mode |= S_IFREG; | 639 | vi->i_mode |= S_IFREG; |
640 | /* Apply the file permissions mask set in the mount options. */ | 640 | /* Apply the file permissions mask set in the mount options. */ |
@@ -1242,7 +1242,7 @@ static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi) | |||
1242 | vi->i_version = base_vi->i_version; | 1242 | vi->i_version = base_vi->i_version; |
1243 | vi->i_uid = base_vi->i_uid; | 1243 | vi->i_uid = base_vi->i_uid; |
1244 | vi->i_gid = base_vi->i_gid; | 1244 | vi->i_gid = base_vi->i_gid; |
1245 | vi->i_nlink = base_vi->i_nlink; | 1245 | set_nlink(vi, base_vi->i_nlink); |
1246 | vi->i_mtime = base_vi->i_mtime; | 1246 | vi->i_mtime = base_vi->i_mtime; |
1247 | vi->i_ctime = base_vi->i_ctime; | 1247 | vi->i_ctime = base_vi->i_ctime; |
1248 | vi->i_atime = base_vi->i_atime; | 1248 | vi->i_atime = base_vi->i_atime; |
@@ -1508,7 +1508,7 @@ static int ntfs_read_locked_index_inode(struct inode *base_vi, struct inode *vi) | |||
1508 | vi->i_version = base_vi->i_version; | 1508 | vi->i_version = base_vi->i_version; |
1509 | vi->i_uid = base_vi->i_uid; | 1509 | vi->i_uid = base_vi->i_uid; |
1510 | vi->i_gid = base_vi->i_gid; | 1510 | vi->i_gid = base_vi->i_gid; |
1511 | vi->i_nlink = base_vi->i_nlink; | 1511 | set_nlink(vi, base_vi->i_nlink); |
1512 | vi->i_mtime = base_vi->i_mtime; | 1512 | vi->i_mtime = base_vi->i_mtime; |
1513 | vi->i_ctime = base_vi->i_ctime; | 1513 | vi->i_ctime = base_vi->i_ctime; |
1514 | vi->i_atime = base_vi->i_atime; | 1514 | vi->i_atime = base_vi->i_atime; |
diff --git a/fs/ocfs2/dir.c b/fs/ocfs2/dir.c index 8582e3f4f120..e2878b5895fb 100644 --- a/fs/ocfs2/dir.c +++ b/fs/ocfs2/dir.c | |||
@@ -2292,7 +2292,7 @@ static int ocfs2_fill_new_dir_id(struct ocfs2_super *osb, | |||
2292 | ocfs2_journal_dirty(handle, di_bh); | 2292 | ocfs2_journal_dirty(handle, di_bh); |
2293 | 2293 | ||
2294 | i_size_write(inode, size); | 2294 | i_size_write(inode, size); |
2295 | inode->i_nlink = 2; | 2295 | set_nlink(inode, 2); |
2296 | inode->i_blocks = ocfs2_inode_sector_count(inode); | 2296 | inode->i_blocks = ocfs2_inode_sector_count(inode); |
2297 | 2297 | ||
2298 | ret = ocfs2_mark_inode_dirty(handle, inode, di_bh); | 2298 | ret = ocfs2_mark_inode_dirty(handle, inode, di_bh); |
@@ -2354,7 +2354,7 @@ static int ocfs2_fill_new_dir_el(struct ocfs2_super *osb, | |||
2354 | ocfs2_journal_dirty(handle, new_bh); | 2354 | ocfs2_journal_dirty(handle, new_bh); |
2355 | 2355 | ||
2356 | i_size_write(inode, inode->i_sb->s_blocksize); | 2356 | i_size_write(inode, inode->i_sb->s_blocksize); |
2357 | inode->i_nlink = 2; | 2357 | set_nlink(inode, 2); |
2358 | inode->i_blocks = ocfs2_inode_sector_count(inode); | 2358 | inode->i_blocks = ocfs2_inode_sector_count(inode); |
2359 | status = ocfs2_mark_inode_dirty(handle, inode, fe_bh); | 2359 | status = ocfs2_mark_inode_dirty(handle, inode, fe_bh); |
2360 | if (status < 0) { | 2360 | if (status < 0) { |
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c index 7642d7ca73e5..e1ed5e502ff2 100644 --- a/fs/ocfs2/dlmglue.c +++ b/fs/ocfs2/dlmglue.c | |||
@@ -2092,7 +2092,7 @@ static void ocfs2_refresh_inode_from_lvb(struct inode *inode) | |||
2092 | inode->i_uid = be32_to_cpu(lvb->lvb_iuid); | 2092 | inode->i_uid = be32_to_cpu(lvb->lvb_iuid); |
2093 | inode->i_gid = be32_to_cpu(lvb->lvb_igid); | 2093 | inode->i_gid = be32_to_cpu(lvb->lvb_igid); |
2094 | inode->i_mode = be16_to_cpu(lvb->lvb_imode); | 2094 | inode->i_mode = be16_to_cpu(lvb->lvb_imode); |
2095 | inode->i_nlink = be16_to_cpu(lvb->lvb_inlink); | 2095 | set_nlink(inode, be16_to_cpu(lvb->lvb_inlink)); |
2096 | ocfs2_unpack_timespec(&inode->i_atime, | 2096 | ocfs2_unpack_timespec(&inode->i_atime, |
2097 | be64_to_cpu(lvb->lvb_iatime_packed)); | 2097 | be64_to_cpu(lvb->lvb_iatime_packed)); |
2098 | ocfs2_unpack_timespec(&inode->i_mtime, | 2098 | ocfs2_unpack_timespec(&inode->i_mtime, |
diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c index b4c8bb6b8d28..a22d2c098890 100644 --- a/fs/ocfs2/inode.c +++ b/fs/ocfs2/inode.c | |||
@@ -291,7 +291,7 @@ void ocfs2_populate_inode(struct inode *inode, struct ocfs2_dinode *fe, | |||
291 | (unsigned long long)OCFS2_I(inode)->ip_blkno, | 291 | (unsigned long long)OCFS2_I(inode)->ip_blkno, |
292 | (unsigned long long)le64_to_cpu(fe->i_blkno)); | 292 | (unsigned long long)le64_to_cpu(fe->i_blkno)); |
293 | 293 | ||
294 | inode->i_nlink = ocfs2_read_links_count(fe); | 294 | set_nlink(inode, ocfs2_read_links_count(fe)); |
295 | 295 | ||
296 | trace_ocfs2_populate_inode(OCFS2_I(inode)->ip_blkno, | 296 | trace_ocfs2_populate_inode(OCFS2_I(inode)->ip_blkno, |
297 | le32_to_cpu(fe->i_flags)); | 297 | le32_to_cpu(fe->i_flags)); |
@@ -1290,7 +1290,7 @@ void ocfs2_refresh_inode(struct inode *inode, | |||
1290 | OCFS2_I(inode)->ip_dyn_features = le16_to_cpu(fe->i_dyn_features); | 1290 | OCFS2_I(inode)->ip_dyn_features = le16_to_cpu(fe->i_dyn_features); |
1291 | ocfs2_set_inode_flags(inode); | 1291 | ocfs2_set_inode_flags(inode); |
1292 | i_size_write(inode, le64_to_cpu(fe->i_size)); | 1292 | i_size_write(inode, le64_to_cpu(fe->i_size)); |
1293 | inode->i_nlink = ocfs2_read_links_count(fe); | 1293 | set_nlink(inode, ocfs2_read_links_count(fe)); |
1294 | inode->i_uid = le32_to_cpu(fe->i_uid); | 1294 | inode->i_uid = le32_to_cpu(fe->i_uid); |
1295 | inode->i_gid = le32_to_cpu(fe->i_gid); | 1295 | inode->i_gid = le32_to_cpu(fe->i_gid); |
1296 | inode->i_mode = le16_to_cpu(fe->i_mode); | 1296 | inode->i_mode = le16_to_cpu(fe->i_mode); |
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c index 53aa41ed7bf3..a8b2bfea574e 100644 --- a/fs/ocfs2/namei.c +++ b/fs/ocfs2/namei.c | |||
@@ -199,9 +199,7 @@ static struct inode *ocfs2_get_init_inode(struct inode *dir, int mode) | |||
199 | * these are used by the support functions here and in | 199 | * these are used by the support functions here and in |
200 | * callers. */ | 200 | * callers. */ |
201 | if (S_ISDIR(mode)) | 201 | if (S_ISDIR(mode)) |
202 | inode->i_nlink = 2; | 202 | set_nlink(inode, 2); |
203 | else | ||
204 | inode->i_nlink = 1; | ||
205 | inode_init_owner(inode, dir, mode); | 203 | inode_init_owner(inode, dir, mode); |
206 | dquot_initialize(inode); | 204 | dquot_initialize(inode); |
207 | return inode; | 205 | return inode; |
@@ -1379,7 +1377,7 @@ static int ocfs2_rename(struct inode *old_dir, | |||
1379 | } | 1377 | } |
1380 | 1378 | ||
1381 | if (new_inode) { | 1379 | if (new_inode) { |
1382 | new_inode->i_nlink--; | 1380 | drop_nlink(new_inode); |
1383 | new_inode->i_ctime = CURRENT_TIME; | 1381 | new_inode->i_ctime = CURRENT_TIME; |
1384 | } | 1382 | } |
1385 | old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME; | 1383 | old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME; |
@@ -1387,9 +1385,9 @@ static int ocfs2_rename(struct inode *old_dir, | |||
1387 | if (update_dot_dot) { | 1385 | if (update_dot_dot) { |
1388 | status = ocfs2_update_entry(old_inode, handle, | 1386 | status = ocfs2_update_entry(old_inode, handle, |
1389 | &old_inode_dot_dot_res, new_dir); | 1387 | &old_inode_dot_dot_res, new_dir); |
1390 | old_dir->i_nlink--; | 1388 | drop_nlink(old_dir); |
1391 | if (new_inode) { | 1389 | if (new_inode) { |
1392 | new_inode->i_nlink--; | 1390 | drop_nlink(new_inode); |
1393 | } else { | 1391 | } else { |
1394 | inc_nlink(new_dir); | 1392 | inc_nlink(new_dir); |
1395 | mark_inode_dirty(new_dir); | 1393 | mark_inode_dirty(new_dir); |
@@ -2018,7 +2016,7 @@ static int ocfs2_orphan_add(struct ocfs2_super *osb, | |||
2018 | orphan_fe = (struct ocfs2_dinode *) orphan_dir_bh->b_data; | 2016 | orphan_fe = (struct ocfs2_dinode *) orphan_dir_bh->b_data; |
2019 | if (S_ISDIR(inode->i_mode)) | 2017 | if (S_ISDIR(inode->i_mode)) |
2020 | ocfs2_add_links_count(orphan_fe, 1); | 2018 | ocfs2_add_links_count(orphan_fe, 1); |
2021 | orphan_dir_inode->i_nlink = ocfs2_read_links_count(orphan_fe); | 2019 | set_nlink(orphan_dir_inode, ocfs2_read_links_count(orphan_fe)); |
2022 | ocfs2_journal_dirty(handle, orphan_dir_bh); | 2020 | ocfs2_journal_dirty(handle, orphan_dir_bh); |
2023 | 2021 | ||
2024 | status = __ocfs2_add_entry(handle, orphan_dir_inode, name, | 2022 | status = __ocfs2_add_entry(handle, orphan_dir_inode, name, |
@@ -2116,7 +2114,7 @@ int ocfs2_orphan_del(struct ocfs2_super *osb, | |||
2116 | orphan_fe = (struct ocfs2_dinode *) orphan_dir_bh->b_data; | 2114 | orphan_fe = (struct ocfs2_dinode *) orphan_dir_bh->b_data; |
2117 | if (S_ISDIR(inode->i_mode)) | 2115 | if (S_ISDIR(inode->i_mode)) |
2118 | ocfs2_add_links_count(orphan_fe, -1); | 2116 | ocfs2_add_links_count(orphan_fe, -1); |
2119 | orphan_dir_inode->i_nlink = ocfs2_read_links_count(orphan_fe); | 2117 | set_nlink(orphan_dir_inode, ocfs2_read_links_count(orphan_fe)); |
2120 | ocfs2_journal_dirty(handle, orphan_dir_bh); | 2118 | ocfs2_journal_dirty(handle, orphan_dir_bh); |
2121 | 2119 | ||
2122 | leave: | 2120 | leave: |
@@ -2282,7 +2280,7 @@ int ocfs2_create_inode_in_orphan(struct inode *dir, | |||
2282 | goto leave; | 2280 | goto leave; |
2283 | } | 2281 | } |
2284 | 2282 | ||
2285 | inode->i_nlink = 0; | 2283 | clear_nlink(inode); |
2286 | /* do the real work now. */ | 2284 | /* do the real work now. */ |
2287 | status = __ocfs2_mknod_locked(dir, inode, | 2285 | status = __ocfs2_mknod_locked(dir, inode, |
2288 | 0, &new_di_bh, parent_di_bh, handle, | 2286 | 0, &new_di_bh, parent_di_bh, handle, |
@@ -2437,7 +2435,7 @@ int ocfs2_mv_orphaned_inode_to_new(struct inode *dir, | |||
2437 | di = (struct ocfs2_dinode *)di_bh->b_data; | 2435 | di = (struct ocfs2_dinode *)di_bh->b_data; |
2438 | le32_add_cpu(&di->i_flags, -OCFS2_ORPHANED_FL); | 2436 | le32_add_cpu(&di->i_flags, -OCFS2_ORPHANED_FL); |
2439 | di->i_orphaned_slot = 0; | 2437 | di->i_orphaned_slot = 0; |
2440 | inode->i_nlink = 1; | 2438 | set_nlink(inode, 1); |
2441 | ocfs2_set_links_count(di, inode->i_nlink); | 2439 | ocfs2_set_links_count(di, inode->i_nlink); |
2442 | ocfs2_journal_dirty(handle, di_bh); | 2440 | ocfs2_journal_dirty(handle, di_bh); |
2443 | 2441 | ||
diff --git a/fs/openpromfs/inode.c b/fs/openpromfs/inode.c index a2a5bff774e3..e4e0ff7962e2 100644 --- a/fs/openpromfs/inode.c +++ b/fs/openpromfs/inode.c | |||
@@ -242,7 +242,7 @@ found: | |||
242 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; | 242 | inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO; |
243 | inode->i_op = &openprom_inode_operations; | 243 | inode->i_op = &openprom_inode_operations; |
244 | inode->i_fop = &openprom_operations; | 244 | inode->i_fop = &openprom_operations; |
245 | inode->i_nlink = 2; | 245 | set_nlink(inode, 2); |
246 | break; | 246 | break; |
247 | case op_inode_prop: | 247 | case op_inode_prop: |
248 | if (!strcmp(dp->name, "options") && (len == 17) && | 248 | if (!strcmp(dp->name, "options") && (len == 17) && |
@@ -251,7 +251,7 @@ found: | |||
251 | else | 251 | else |
252 | inode->i_mode = S_IFREG | S_IRUGO; | 252 | inode->i_mode = S_IFREG | S_IRUGO; |
253 | inode->i_fop = &openpromfs_prop_ops; | 253 | inode->i_fop = &openpromfs_prop_ops; |
254 | inode->i_nlink = 1; | 254 | set_nlink(inode, 1); |
255 | inode->i_size = ent_oi->u.prop->length; | 255 | inode->i_size = ent_oi->u.prop->length; |
256 | break; | 256 | break; |
257 | } | 257 | } |
diff --git a/fs/proc/base.c b/fs/proc/base.c index 8f0087e20e16..851ba3dcdc29 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
@@ -2248,7 +2248,7 @@ static struct dentry *proc_pident_instantiate(struct inode *dir, | |||
2248 | ei = PROC_I(inode); | 2248 | ei = PROC_I(inode); |
2249 | inode->i_mode = p->mode; | 2249 | inode->i_mode = p->mode; |
2250 | if (S_ISDIR(inode->i_mode)) | 2250 | if (S_ISDIR(inode->i_mode)) |
2251 | inode->i_nlink = 2; /* Use getattr to fix if necessary */ | 2251 | set_nlink(inode, 2); /* Use getattr to fix if necessary */ |
2252 | if (p->iop) | 2252 | if (p->iop) |
2253 | inode->i_op = p->iop; | 2253 | inode->i_op = p->iop; |
2254 | if (p->fop) | 2254 | if (p->fop) |
@@ -2642,7 +2642,7 @@ static struct dentry *proc_base_instantiate(struct inode *dir, | |||
2642 | 2642 | ||
2643 | inode->i_mode = p->mode; | 2643 | inode->i_mode = p->mode; |
2644 | if (S_ISDIR(inode->i_mode)) | 2644 | if (S_ISDIR(inode->i_mode)) |
2645 | inode->i_nlink = 2; | 2645 | set_nlink(inode, 2); |
2646 | if (S_ISLNK(inode->i_mode)) | 2646 | if (S_ISLNK(inode->i_mode)) |
2647 | inode->i_size = 64; | 2647 | inode->i_size = 64; |
2648 | if (p->iop) | 2648 | if (p->iop) |
@@ -2981,8 +2981,8 @@ static struct dentry *proc_pid_instantiate(struct inode *dir, | |||
2981 | inode->i_fop = &proc_tgid_base_operations; | 2981 | inode->i_fop = &proc_tgid_base_operations; |
2982 | inode->i_flags|=S_IMMUTABLE; | 2982 | inode->i_flags|=S_IMMUTABLE; |
2983 | 2983 | ||
2984 | inode->i_nlink = 2 + pid_entry_count_dirs(tgid_base_stuff, | 2984 | set_nlink(inode, 2 + pid_entry_count_dirs(tgid_base_stuff, |
2985 | ARRAY_SIZE(tgid_base_stuff)); | 2985 | ARRAY_SIZE(tgid_base_stuff))); |
2986 | 2986 | ||
2987 | d_set_d_op(dentry, &pid_dentry_operations); | 2987 | d_set_d_op(dentry, &pid_dentry_operations); |
2988 | 2988 | ||
@@ -3233,8 +3233,8 @@ static struct dentry *proc_task_instantiate(struct inode *dir, | |||
3233 | inode->i_fop = &proc_tid_base_operations; | 3233 | inode->i_fop = &proc_tid_base_operations; |
3234 | inode->i_flags|=S_IMMUTABLE; | 3234 | inode->i_flags|=S_IMMUTABLE; |
3235 | 3235 | ||
3236 | inode->i_nlink = 2 + pid_entry_count_dirs(tid_base_stuff, | 3236 | set_nlink(inode, 2 + pid_entry_count_dirs(tid_base_stuff, |
3237 | ARRAY_SIZE(tid_base_stuff)); | 3237 | ARRAY_SIZE(tid_base_stuff))); |
3238 | 3238 | ||
3239 | d_set_d_op(dentry, &pid_dentry_operations); | 3239 | d_set_d_op(dentry, &pid_dentry_operations); |
3240 | 3240 | ||
diff --git a/fs/proc/generic.c b/fs/proc/generic.c index 9d99131d0d65..10090d9c7ad5 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c | |||
@@ -283,7 +283,7 @@ static int proc_getattr(struct vfsmount *mnt, struct dentry *dentry, | |||
283 | struct inode *inode = dentry->d_inode; | 283 | struct inode *inode = dentry->d_inode; |
284 | struct proc_dir_entry *de = PROC_I(inode)->pde; | 284 | struct proc_dir_entry *de = PROC_I(inode)->pde; |
285 | if (de && de->nlink) | 285 | if (de && de->nlink) |
286 | inode->i_nlink = de->nlink; | 286 | set_nlink(inode, de->nlink); |
287 | 287 | ||
288 | generic_fillattr(inode, stat); | 288 | generic_fillattr(inode, stat); |
289 | return 0; | 289 | return 0; |
diff --git a/fs/proc/inode.c b/fs/proc/inode.c index 7ed72d6c1c6f..7737c5468a40 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c | |||
@@ -445,7 +445,7 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de) | |||
445 | if (de->size) | 445 | if (de->size) |
446 | inode->i_size = de->size; | 446 | inode->i_size = de->size; |
447 | if (de->nlink) | 447 | if (de->nlink) |
448 | inode->i_nlink = de->nlink; | 448 | set_nlink(inode, de->nlink); |
449 | if (de->proc_iops) | 449 | if (de->proc_iops) |
450 | inode->i_op = de->proc_iops; | 450 | inode->i_op = de->proc_iops; |
451 | if (de->proc_fops) { | 451 | if (de->proc_fops) { |
diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c index 1a77dbef226f..b44113279e30 100644 --- a/fs/proc/proc_sysctl.c +++ b/fs/proc/proc_sysctl.c | |||
@@ -39,7 +39,7 @@ static struct inode *proc_sys_make_inode(struct super_block *sb, | |||
39 | inode->i_fop = &proc_sys_file_operations; | 39 | inode->i_fop = &proc_sys_file_operations; |
40 | } else { | 40 | } else { |
41 | inode->i_mode |= S_IFDIR; | 41 | inode->i_mode |= S_IFDIR; |
42 | inode->i_nlink = 0; | 42 | clear_nlink(inode); |
43 | inode->i_op = &proc_sys_dir_operations; | 43 | inode->i_op = &proc_sys_dir_operations; |
44 | inode->i_fop = &proc_sys_dir_file_operations; | 44 | inode->i_fop = &proc_sys_dir_file_operations; |
45 | } | 45 | } |
diff --git a/fs/qnx4/inode.c b/fs/qnx4/inode.c index 2b0646613f5a..3bdd21418432 100644 --- a/fs/qnx4/inode.c +++ b/fs/qnx4/inode.c | |||
@@ -379,7 +379,7 @@ struct inode *qnx4_iget(struct super_block *sb, unsigned long ino) | |||
379 | inode->i_mode = le16_to_cpu(raw_inode->di_mode); | 379 | inode->i_mode = le16_to_cpu(raw_inode->di_mode); |
380 | inode->i_uid = (uid_t)le16_to_cpu(raw_inode->di_uid); | 380 | inode->i_uid = (uid_t)le16_to_cpu(raw_inode->di_uid); |
381 | inode->i_gid = (gid_t)le16_to_cpu(raw_inode->di_gid); | 381 | inode->i_gid = (gid_t)le16_to_cpu(raw_inode->di_gid); |
382 | inode->i_nlink = le16_to_cpu(raw_inode->di_nlink); | 382 | set_nlink(inode, le16_to_cpu(raw_inode->di_nlink)); |
383 | inode->i_size = le32_to_cpu(raw_inode->di_size); | 383 | inode->i_size = le32_to_cpu(raw_inode->di_size); |
384 | inode->i_mtime.tv_sec = le32_to_cpu(raw_inode->di_mtime); | 384 | inode->i_mtime.tv_sec = le32_to_cpu(raw_inode->di_mtime); |
385 | inode->i_mtime.tv_nsec = 0; | 385 | inode->i_mtime.tv_nsec = 0; |
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index 9b0d4b78b4fb..950f13af0951 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c | |||
@@ -1154,7 +1154,7 @@ static void init_inode(struct inode *inode, struct treepath *path) | |||
1154 | set_inode_item_key_version(inode, KEY_FORMAT_3_5); | 1154 | set_inode_item_key_version(inode, KEY_FORMAT_3_5); |
1155 | set_inode_sd_version(inode, STAT_DATA_V1); | 1155 | set_inode_sd_version(inode, STAT_DATA_V1); |
1156 | inode->i_mode = sd_v1_mode(sd); | 1156 | inode->i_mode = sd_v1_mode(sd); |
1157 | inode->i_nlink = sd_v1_nlink(sd); | 1157 | set_nlink(inode, sd_v1_nlink(sd)); |
1158 | inode->i_uid = sd_v1_uid(sd); | 1158 | inode->i_uid = sd_v1_uid(sd); |
1159 | inode->i_gid = sd_v1_gid(sd); | 1159 | inode->i_gid = sd_v1_gid(sd); |
1160 | inode->i_size = sd_v1_size(sd); | 1160 | inode->i_size = sd_v1_size(sd); |
@@ -1199,7 +1199,7 @@ static void init_inode(struct inode *inode, struct treepath *path) | |||
1199 | struct stat_data *sd = (struct stat_data *)B_I_PITEM(bh, ih); | 1199 | struct stat_data *sd = (struct stat_data *)B_I_PITEM(bh, ih); |
1200 | 1200 | ||
1201 | inode->i_mode = sd_v2_mode(sd); | 1201 | inode->i_mode = sd_v2_mode(sd); |
1202 | inode->i_nlink = sd_v2_nlink(sd); | 1202 | set_nlink(inode, sd_v2_nlink(sd)); |
1203 | inode->i_uid = sd_v2_uid(sd); | 1203 | inode->i_uid = sd_v2_uid(sd); |
1204 | inode->i_size = sd_v2_size(sd); | 1204 | inode->i_size = sd_v2_size(sd); |
1205 | inode->i_gid = sd_v2_gid(sd); | 1205 | inode->i_gid = sd_v2_gid(sd); |
@@ -1444,7 +1444,7 @@ void reiserfs_read_locked_inode(struct inode *inode, | |||
1444 | /* a stale NFS handle can trigger this without it being an error */ | 1444 | /* a stale NFS handle can trigger this without it being an error */ |
1445 | pathrelse(&path_to_sd); | 1445 | pathrelse(&path_to_sd); |
1446 | reiserfs_make_bad_inode(inode); | 1446 | reiserfs_make_bad_inode(inode); |
1447 | inode->i_nlink = 0; | 1447 | clear_nlink(inode); |
1448 | return; | 1448 | return; |
1449 | } | 1449 | } |
1450 | 1450 | ||
@@ -1832,7 +1832,7 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th, | |||
1832 | #endif | 1832 | #endif |
1833 | 1833 | ||
1834 | /* fill stat data */ | 1834 | /* fill stat data */ |
1835 | inode->i_nlink = (S_ISDIR(mode) ? 2 : 1); | 1835 | set_nlink(inode, (S_ISDIR(mode) ? 2 : 1)); |
1836 | 1836 | ||
1837 | /* uid and gid must already be set by the caller for quota init */ | 1837 | /* uid and gid must already be set by the caller for quota init */ |
1838 | 1838 | ||
@@ -1987,7 +1987,7 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th, | |||
1987 | make_bad_inode(inode); | 1987 | make_bad_inode(inode); |
1988 | 1988 | ||
1989 | out_inserted_sd: | 1989 | out_inserted_sd: |
1990 | inode->i_nlink = 0; | 1990 | clear_nlink(inode); |
1991 | th->t_trans_id = 0; /* so the caller can't use this handle later */ | 1991 | th->t_trans_id = 0; /* so the caller can't use this handle later */ |
1992 | unlock_new_inode(inode); /* OK to do even if we hadn't locked it */ | 1992 | unlock_new_inode(inode); /* OK to do even if we hadn't locked it */ |
1993 | iput(inode); | 1993 | iput(inode); |
diff --git a/fs/reiserfs/namei.c b/fs/reiserfs/namei.c index ef392324bbf1..80058e8ce361 100644 --- a/fs/reiserfs/namei.c +++ b/fs/reiserfs/namei.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <linux/reiserfs_xattr.h> | 19 | #include <linux/reiserfs_xattr.h> |
20 | #include <linux/quotaops.h> | 20 | #include <linux/quotaops.h> |
21 | 21 | ||
22 | #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; } | 22 | #define INC_DIR_INODE_NLINK(i) if (i->i_nlink != 1) { inc_nlink(i); if (i->i_nlink >= REISERFS_LINK_MAX) set_nlink(i, 1); } |
23 | #define DEC_DIR_INODE_NLINK(i) if (i->i_nlink != 1) drop_nlink(i); | 23 | #define DEC_DIR_INODE_NLINK(i) if (i->i_nlink != 1) drop_nlink(i); |
24 | 24 | ||
25 | // directory item contains array of entry headers. This performs | 25 | // directory item contains array of entry headers. This performs |
@@ -622,7 +622,7 @@ static int reiserfs_create(struct inode *dir, struct dentry *dentry, int mode, | |||
622 | dentry->d_name.len, inode, 1 /*visible */ ); | 622 | dentry->d_name.len, inode, 1 /*visible */ ); |
623 | if (retval) { | 623 | if (retval) { |
624 | int err; | 624 | int err; |
625 | inode->i_nlink--; | 625 | drop_nlink(inode); |
626 | reiserfs_update_sd(&th, inode); | 626 | reiserfs_update_sd(&th, inode); |
627 | err = journal_end(&th, dir->i_sb, jbegin_count); | 627 | err = journal_end(&th, dir->i_sb, jbegin_count); |
628 | if (err) | 628 | if (err) |
@@ -702,7 +702,7 @@ static int reiserfs_mknod(struct inode *dir, struct dentry *dentry, int mode, | |||
702 | dentry->d_name.len, inode, 1 /*visible */ ); | 702 | dentry->d_name.len, inode, 1 /*visible */ ); |
703 | if (retval) { | 703 | if (retval) { |
704 | int err; | 704 | int err; |
705 | inode->i_nlink--; | 705 | drop_nlink(inode); |
706 | reiserfs_update_sd(&th, inode); | 706 | reiserfs_update_sd(&th, inode); |
707 | err = journal_end(&th, dir->i_sb, jbegin_count); | 707 | err = journal_end(&th, dir->i_sb, jbegin_count); |
708 | if (err) | 708 | if (err) |
@@ -787,7 +787,7 @@ static int reiserfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
787 | dentry->d_name.len, inode, 1 /*visible */ ); | 787 | dentry->d_name.len, inode, 1 /*visible */ ); |
788 | if (retval) { | 788 | if (retval) { |
789 | int err; | 789 | int err; |
790 | inode->i_nlink = 0; | 790 | clear_nlink(inode); |
791 | DEC_DIR_INODE_NLINK(dir); | 791 | DEC_DIR_INODE_NLINK(dir); |
792 | reiserfs_update_sd(&th, inode); | 792 | reiserfs_update_sd(&th, inode); |
793 | err = journal_end(&th, dir->i_sb, jbegin_count); | 793 | err = journal_end(&th, dir->i_sb, jbegin_count); |
@@ -964,7 +964,7 @@ static int reiserfs_unlink(struct inode *dir, struct dentry *dentry) | |||
964 | reiserfs_warning(inode->i_sb, "reiserfs-7042", | 964 | reiserfs_warning(inode->i_sb, "reiserfs-7042", |
965 | "deleting nonexistent file (%lu), %d", | 965 | "deleting nonexistent file (%lu), %d", |
966 | inode->i_ino, inode->i_nlink); | 966 | inode->i_ino, inode->i_nlink); |
967 | inode->i_nlink = 1; | 967 | set_nlink(inode, 1); |
968 | } | 968 | } |
969 | 969 | ||
970 | drop_nlink(inode); | 970 | drop_nlink(inode); |
@@ -1086,7 +1086,7 @@ static int reiserfs_symlink(struct inode *parent_dir, | |||
1086 | dentry->d_name.len, inode, 1 /*visible */ ); | 1086 | dentry->d_name.len, inode, 1 /*visible */ ); |
1087 | if (retval) { | 1087 | if (retval) { |
1088 | int err; | 1088 | int err; |
1089 | inode->i_nlink--; | 1089 | drop_nlink(inode); |
1090 | reiserfs_update_sd(&th, inode); | 1090 | reiserfs_update_sd(&th, inode); |
1091 | err = journal_end(&th, parent_dir->i_sb, jbegin_count); | 1091 | err = journal_end(&th, parent_dir->i_sb, jbegin_count); |
1092 | if (err) | 1092 | if (err) |
@@ -1129,7 +1129,7 @@ static int reiserfs_link(struct dentry *old_dentry, struct inode *dir, | |||
1129 | 1129 | ||
1130 | retval = journal_begin(&th, dir->i_sb, jbegin_count); | 1130 | retval = journal_begin(&th, dir->i_sb, jbegin_count); |
1131 | if (retval) { | 1131 | if (retval) { |
1132 | inode->i_nlink--; | 1132 | drop_nlink(inode); |
1133 | reiserfs_write_unlock(dir->i_sb); | 1133 | reiserfs_write_unlock(dir->i_sb); |
1134 | return retval; | 1134 | return retval; |
1135 | } | 1135 | } |
@@ -1144,7 +1144,7 @@ static int reiserfs_link(struct dentry *old_dentry, struct inode *dir, | |||
1144 | 1144 | ||
1145 | if (retval) { | 1145 | if (retval) { |
1146 | int err; | 1146 | int err; |
1147 | inode->i_nlink--; | 1147 | drop_nlink(inode); |
1148 | err = journal_end(&th, dir->i_sb, jbegin_count); | 1148 | err = journal_end(&th, dir->i_sb, jbegin_count); |
1149 | reiserfs_write_unlock(dir->i_sb); | 1149 | reiserfs_write_unlock(dir->i_sb); |
1150 | return err ? err : retval; | 1150 | return err ? err : retval; |
diff --git a/fs/romfs/super.c b/fs/romfs/super.c index 2305e3121cb1..8b4089f30408 100644 --- a/fs/romfs/super.c +++ b/fs/romfs/super.c | |||
@@ -337,7 +337,7 @@ static struct inode *romfs_iget(struct super_block *sb, unsigned long pos) | |||
337 | inode->i_metasize = (ROMFH_SIZE + nlen + 1 + ROMFH_PAD) & ROMFH_MASK; | 337 | inode->i_metasize = (ROMFH_SIZE + nlen + 1 + ROMFH_PAD) & ROMFH_MASK; |
338 | inode->i_dataoffset = pos + inode->i_metasize; | 338 | inode->i_dataoffset = pos + inode->i_metasize; |
339 | 339 | ||
340 | i->i_nlink = 1; /* Hard to decide.. */ | 340 | set_nlink(i, 1); /* Hard to decide.. */ |
341 | i->i_size = be32_to_cpu(ri.size); | 341 | i->i_size = be32_to_cpu(ri.size); |
342 | i->i_mtime.tv_sec = i->i_atime.tv_sec = i->i_ctime.tv_sec = 0; | 342 | i->i_mtime.tv_sec = i->i_atime.tv_sec = i->i_ctime.tv_sec = 0; |
343 | i->i_mtime.tv_nsec = i->i_atime.tv_nsec = i->i_ctime.tv_nsec = 0; | 343 | i->i_mtime.tv_nsec = i->i_atime.tv_nsec = i->i_ctime.tv_nsec = 0; |
diff --git a/fs/squashfs/inode.c b/fs/squashfs/inode.c index 04bebcaa2373..fd7b3b3bda13 100644 --- a/fs/squashfs/inode.c +++ b/fs/squashfs/inode.c | |||
@@ -159,7 +159,7 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
159 | frag_offset = 0; | 159 | frag_offset = 0; |
160 | } | 160 | } |
161 | 161 | ||
162 | inode->i_nlink = 1; | 162 | set_nlink(inode, 1); |
163 | inode->i_size = le32_to_cpu(sqsh_ino->file_size); | 163 | inode->i_size = le32_to_cpu(sqsh_ino->file_size); |
164 | inode->i_fop = &generic_ro_fops; | 164 | inode->i_fop = &generic_ro_fops; |
165 | inode->i_mode |= S_IFREG; | 165 | inode->i_mode |= S_IFREG; |
@@ -203,7 +203,7 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
203 | } | 203 | } |
204 | 204 | ||
205 | xattr_id = le32_to_cpu(sqsh_ino->xattr); | 205 | xattr_id = le32_to_cpu(sqsh_ino->xattr); |
206 | inode->i_nlink = le32_to_cpu(sqsh_ino->nlink); | 206 | set_nlink(inode, le32_to_cpu(sqsh_ino->nlink)); |
207 | inode->i_size = le64_to_cpu(sqsh_ino->file_size); | 207 | inode->i_size = le64_to_cpu(sqsh_ino->file_size); |
208 | inode->i_op = &squashfs_inode_ops; | 208 | inode->i_op = &squashfs_inode_ops; |
209 | inode->i_fop = &generic_ro_fops; | 209 | inode->i_fop = &generic_ro_fops; |
@@ -232,7 +232,7 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
232 | if (err < 0) | 232 | if (err < 0) |
233 | goto failed_read; | 233 | goto failed_read; |
234 | 234 | ||
235 | inode->i_nlink = le32_to_cpu(sqsh_ino->nlink); | 235 | set_nlink(inode, le32_to_cpu(sqsh_ino->nlink)); |
236 | inode->i_size = le16_to_cpu(sqsh_ino->file_size); | 236 | inode->i_size = le16_to_cpu(sqsh_ino->file_size); |
237 | inode->i_op = &squashfs_dir_inode_ops; | 237 | inode->i_op = &squashfs_dir_inode_ops; |
238 | inode->i_fop = &squashfs_dir_ops; | 238 | inode->i_fop = &squashfs_dir_ops; |
@@ -257,7 +257,7 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
257 | goto failed_read; | 257 | goto failed_read; |
258 | 258 | ||
259 | xattr_id = le32_to_cpu(sqsh_ino->xattr); | 259 | xattr_id = le32_to_cpu(sqsh_ino->xattr); |
260 | inode->i_nlink = le32_to_cpu(sqsh_ino->nlink); | 260 | set_nlink(inode, le32_to_cpu(sqsh_ino->nlink)); |
261 | inode->i_size = le32_to_cpu(sqsh_ino->file_size); | 261 | inode->i_size = le32_to_cpu(sqsh_ino->file_size); |
262 | inode->i_op = &squashfs_dir_inode_ops; | 262 | inode->i_op = &squashfs_dir_inode_ops; |
263 | inode->i_fop = &squashfs_dir_ops; | 263 | inode->i_fop = &squashfs_dir_ops; |
@@ -284,7 +284,7 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
284 | if (err < 0) | 284 | if (err < 0) |
285 | goto failed_read; | 285 | goto failed_read; |
286 | 286 | ||
287 | inode->i_nlink = le32_to_cpu(sqsh_ino->nlink); | 287 | set_nlink(inode, le32_to_cpu(sqsh_ino->nlink)); |
288 | inode->i_size = le32_to_cpu(sqsh_ino->symlink_size); | 288 | inode->i_size = le32_to_cpu(sqsh_ino->symlink_size); |
289 | inode->i_op = &squashfs_symlink_inode_ops; | 289 | inode->i_op = &squashfs_symlink_inode_ops; |
290 | inode->i_data.a_ops = &squashfs_symlink_aops; | 290 | inode->i_data.a_ops = &squashfs_symlink_aops; |
@@ -325,7 +325,7 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
325 | inode->i_mode |= S_IFCHR; | 325 | inode->i_mode |= S_IFCHR; |
326 | else | 326 | else |
327 | inode->i_mode |= S_IFBLK; | 327 | inode->i_mode |= S_IFBLK; |
328 | inode->i_nlink = le32_to_cpu(sqsh_ino->nlink); | 328 | set_nlink(inode, le32_to_cpu(sqsh_ino->nlink)); |
329 | rdev = le32_to_cpu(sqsh_ino->rdev); | 329 | rdev = le32_to_cpu(sqsh_ino->rdev); |
330 | init_special_inode(inode, inode->i_mode, new_decode_dev(rdev)); | 330 | init_special_inode(inode, inode->i_mode, new_decode_dev(rdev)); |
331 | 331 | ||
@@ -349,7 +349,7 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
349 | inode->i_mode |= S_IFBLK; | 349 | inode->i_mode |= S_IFBLK; |
350 | xattr_id = le32_to_cpu(sqsh_ino->xattr); | 350 | xattr_id = le32_to_cpu(sqsh_ino->xattr); |
351 | inode->i_op = &squashfs_inode_ops; | 351 | inode->i_op = &squashfs_inode_ops; |
352 | inode->i_nlink = le32_to_cpu(sqsh_ino->nlink); | 352 | set_nlink(inode, le32_to_cpu(sqsh_ino->nlink)); |
353 | rdev = le32_to_cpu(sqsh_ino->rdev); | 353 | rdev = le32_to_cpu(sqsh_ino->rdev); |
354 | init_special_inode(inode, inode->i_mode, new_decode_dev(rdev)); | 354 | init_special_inode(inode, inode->i_mode, new_decode_dev(rdev)); |
355 | 355 | ||
@@ -370,7 +370,7 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
370 | inode->i_mode |= S_IFIFO; | 370 | inode->i_mode |= S_IFIFO; |
371 | else | 371 | else |
372 | inode->i_mode |= S_IFSOCK; | 372 | inode->i_mode |= S_IFSOCK; |
373 | inode->i_nlink = le32_to_cpu(sqsh_ino->nlink); | 373 | set_nlink(inode, le32_to_cpu(sqsh_ino->nlink)); |
374 | init_special_inode(inode, inode->i_mode, 0); | 374 | init_special_inode(inode, inode->i_mode, 0); |
375 | break; | 375 | break; |
376 | } | 376 | } |
@@ -389,7 +389,7 @@ int squashfs_read_inode(struct inode *inode, long long ino) | |||
389 | inode->i_mode |= S_IFSOCK; | 389 | inode->i_mode |= S_IFSOCK; |
390 | xattr_id = le32_to_cpu(sqsh_ino->xattr); | 390 | xattr_id = le32_to_cpu(sqsh_ino->xattr); |
391 | inode->i_op = &squashfs_inode_ops; | 391 | inode->i_op = &squashfs_inode_ops; |
392 | inode->i_nlink = le32_to_cpu(sqsh_ino->nlink); | 392 | set_nlink(inode, le32_to_cpu(sqsh_ino->nlink)); |
393 | init_special_inode(inode, inode->i_mode, 0); | 393 | init_special_inode(inode, inode->i_mode, 0); |
394 | break; | 394 | break; |
395 | } | 395 | } |
diff --git a/fs/stack.c b/fs/stack.c index b4f2ab48a61f..9c11519245a6 100644 --- a/fs/stack.c +++ b/fs/stack.c | |||
@@ -71,6 +71,6 @@ void fsstack_copy_attr_all(struct inode *dest, const struct inode *src) | |||
71 | dest->i_ctime = src->i_ctime; | 71 | dest->i_ctime = src->i_ctime; |
72 | dest->i_blkbits = src->i_blkbits; | 72 | dest->i_blkbits = src->i_blkbits; |
73 | dest->i_flags = src->i_flags; | 73 | dest->i_flags = src->i_flags; |
74 | dest->i_nlink = src->i_nlink; | 74 | set_nlink(dest, src->i_nlink); |
75 | } | 75 | } |
76 | EXPORT_SYMBOL_GPL(fsstack_copy_attr_all); | 76 | EXPORT_SYMBOL_GPL(fsstack_copy_attr_all); |
@@ -294,15 +294,16 @@ SYSCALL_DEFINE4(readlinkat, int, dfd, const char __user *, pathname, | |||
294 | { | 294 | { |
295 | struct path path; | 295 | struct path path; |
296 | int error; | 296 | int error; |
297 | int empty = 0; | ||
297 | 298 | ||
298 | if (bufsiz <= 0) | 299 | if (bufsiz <= 0) |
299 | return -EINVAL; | 300 | return -EINVAL; |
300 | 301 | ||
301 | error = user_path_at(dfd, pathname, LOOKUP_EMPTY, &path); | 302 | error = user_path_at_empty(dfd, pathname, LOOKUP_EMPTY, &path, &empty); |
302 | if (!error) { | 303 | if (!error) { |
303 | struct inode *inode = path.dentry->d_inode; | 304 | struct inode *inode = path.dentry->d_inode; |
304 | 305 | ||
305 | error = -EINVAL; | 306 | error = empty ? -ENOENT : -EINVAL; |
306 | if (inode->i_op->readlink) { | 307 | if (inode->i_op->readlink) { |
307 | error = security_inode_readlink(path.dentry); | 308 | error = security_inode_readlink(path.dentry); |
308 | if (!error) { | 309 | if (!error) { |
diff --git a/fs/super.c b/fs/super.c index 32a81f3467e0..afd0f1ad45e0 100644 --- a/fs/super.c +++ b/fs/super.c | |||
@@ -727,8 +727,13 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force) | |||
727 | 727 | ||
728 | if (sb->s_op->remount_fs) { | 728 | if (sb->s_op->remount_fs) { |
729 | retval = sb->s_op->remount_fs(sb, &flags, data); | 729 | retval = sb->s_op->remount_fs(sb, &flags, data); |
730 | if (retval) | 730 | if (retval) { |
731 | return retval; | 731 | if (!force) |
732 | return retval; | ||
733 | /* If forced remount, go ahead despite any errors */ | ||
734 | WARN(1, "forced remount of a %s fs returned %i\n", | ||
735 | sb->s_type->name, retval); | ||
736 | } | ||
732 | } | 737 | } |
733 | sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (flags & MS_RMT_MASK); | 738 | sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (flags & MS_RMT_MASK); |
734 | 739 | ||
diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c index e23f28894a3a..c81b22f3ace1 100644 --- a/fs/sysfs/inode.c +++ b/fs/sysfs/inode.c | |||
@@ -218,7 +218,7 @@ static void sysfs_refresh_inode(struct sysfs_dirent *sd, struct inode *inode) | |||
218 | } | 218 | } |
219 | 219 | ||
220 | if (sysfs_type(sd) == SYSFS_DIR) | 220 | if (sysfs_type(sd) == SYSFS_DIR) |
221 | inode->i_nlink = sd->s_dir.subdirs + 2; | 221 | set_nlink(inode, sd->s_dir.subdirs + 2); |
222 | } | 222 | } |
223 | 223 | ||
224 | int sysfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) | 224 | int sysfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) |
diff --git a/fs/sysv/inode.c b/fs/sysv/inode.c index 0630eb969a28..25ffb3e9a3f8 100644 --- a/fs/sysv/inode.c +++ b/fs/sysv/inode.c | |||
@@ -219,7 +219,7 @@ struct inode *sysv_iget(struct super_block *sb, unsigned int ino) | |||
219 | inode->i_mode = fs16_to_cpu(sbi, raw_inode->i_mode); | 219 | inode->i_mode = fs16_to_cpu(sbi, raw_inode->i_mode); |
220 | inode->i_uid = (uid_t)fs16_to_cpu(sbi, raw_inode->i_uid); | 220 | inode->i_uid = (uid_t)fs16_to_cpu(sbi, raw_inode->i_uid); |
221 | inode->i_gid = (gid_t)fs16_to_cpu(sbi, raw_inode->i_gid); | 221 | inode->i_gid = (gid_t)fs16_to_cpu(sbi, raw_inode->i_gid); |
222 | inode->i_nlink = fs16_to_cpu(sbi, raw_inode->i_nlink); | 222 | set_nlink(inode, fs16_to_cpu(sbi, raw_inode->i_nlink)); |
223 | inode->i_size = fs32_to_cpu(sbi, raw_inode->i_size); | 223 | inode->i_size = fs32_to_cpu(sbi, raw_inode->i_size); |
224 | inode->i_atime.tv_sec = fs32_to_cpu(sbi, raw_inode->i_atime); | 224 | inode->i_atime.tv_sec = fs32_to_cpu(sbi, raw_inode->i_atime); |
225 | inode->i_mtime.tv_sec = fs32_to_cpu(sbi, raw_inode->i_mtime); | 225 | inode->i_mtime.tv_sec = fs32_to_cpu(sbi, raw_inode->i_mtime); |
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c index b28121278d46..20403dc5d437 100644 --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c | |||
@@ -129,7 +129,7 @@ struct inode *ubifs_iget(struct super_block *sb, unsigned long inum) | |||
129 | goto out_ino; | 129 | goto out_ino; |
130 | 130 | ||
131 | inode->i_flags |= (S_NOCMTIME | S_NOATIME); | 131 | inode->i_flags |= (S_NOCMTIME | S_NOATIME); |
132 | inode->i_nlink = le32_to_cpu(ino->nlink); | 132 | set_nlink(inode, le32_to_cpu(ino->nlink)); |
133 | inode->i_uid = le32_to_cpu(ino->uid); | 133 | inode->i_uid = le32_to_cpu(ino->uid); |
134 | inode->i_gid = le32_to_cpu(ino->gid); | 134 | inode->i_gid = le32_to_cpu(ino->gid); |
135 | inode->i_atime.tv_sec = (int64_t)le64_to_cpu(ino->atime_sec); | 135 | inode->i_atime.tv_sec = (int64_t)le64_to_cpu(ino->atime_sec); |
diff --git a/fs/ubifs/xattr.c b/fs/ubifs/xattr.c index 16f19f55e63f..bf18f7a04544 100644 --- a/fs/ubifs/xattr.c +++ b/fs/ubifs/xattr.c | |||
@@ -558,10 +558,10 @@ int ubifs_removexattr(struct dentry *dentry, const char *name) | |||
558 | } | 558 | } |
559 | 559 | ||
560 | ubifs_assert(inode->i_nlink == 1); | 560 | ubifs_assert(inode->i_nlink == 1); |
561 | inode->i_nlink = 0; | 561 | clear_nlink(inode); |
562 | err = remove_xattr(c, host, inode, &nm); | 562 | err = remove_xattr(c, host, inode, &nm); |
563 | if (err) | 563 | if (err) |
564 | inode->i_nlink = 1; | 564 | set_nlink(inode, 1); |
565 | 565 | ||
566 | /* If @i_nlink is 0, 'iput()' will delete the inode */ | 566 | /* If @i_nlink is 0, 'iput()' will delete the inode */ |
567 | iput(inode); | 567 | iput(inode); |
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 329e7a108ab7..4fd1d809738c 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c | |||
@@ -1241,6 +1241,7 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) | |||
1241 | int offset; | 1241 | int offset; |
1242 | struct udf_sb_info *sbi = UDF_SB(inode->i_sb); | 1242 | struct udf_sb_info *sbi = UDF_SB(inode->i_sb); |
1243 | struct udf_inode_info *iinfo = UDF_I(inode); | 1243 | struct udf_inode_info *iinfo = UDF_I(inode); |
1244 | unsigned int link_count; | ||
1244 | 1245 | ||
1245 | fe = (struct fileEntry *)bh->b_data; | 1246 | fe = (struct fileEntry *)bh->b_data; |
1246 | efe = (struct extendedFileEntry *)bh->b_data; | 1247 | efe = (struct extendedFileEntry *)bh->b_data; |
@@ -1323,9 +1324,10 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) | |||
1323 | inode->i_mode &= ~sbi->s_umask; | 1324 | inode->i_mode &= ~sbi->s_umask; |
1324 | read_unlock(&sbi->s_cred_lock); | 1325 | read_unlock(&sbi->s_cred_lock); |
1325 | 1326 | ||
1326 | inode->i_nlink = le16_to_cpu(fe->fileLinkCount); | 1327 | link_count = le16_to_cpu(fe->fileLinkCount); |
1327 | if (!inode->i_nlink) | 1328 | if (!link_count) |
1328 | inode->i_nlink = 1; | 1329 | link_count = 1; |
1330 | set_nlink(inode, link_count); | ||
1329 | 1331 | ||
1330 | inode->i_size = le64_to_cpu(fe->informationLength); | 1332 | inode->i_size = le64_to_cpu(fe->informationLength); |
1331 | iinfo->i_lenExtents = inode->i_size; | 1333 | iinfo->i_lenExtents = inode->i_size; |
diff --git a/fs/udf/namei.c b/fs/udf/namei.c index 78d59ebd0656..4639e137222f 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c | |||
@@ -577,8 +577,7 @@ static int udf_create(struct inode *dir, struct dentry *dentry, int mode, | |||
577 | 577 | ||
578 | fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); | 578 | fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); |
579 | if (!fi) { | 579 | if (!fi) { |
580 | inode->i_nlink--; | 580 | inode_dec_link_count(inode); |
581 | mark_inode_dirty(inode); | ||
582 | iput(inode); | 581 | iput(inode); |
583 | return err; | 582 | return err; |
584 | } | 583 | } |
@@ -618,8 +617,7 @@ static int udf_mknod(struct inode *dir, struct dentry *dentry, int mode, | |||
618 | init_special_inode(inode, mode, rdev); | 617 | init_special_inode(inode, mode, rdev); |
619 | fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); | 618 | fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); |
620 | if (!fi) { | 619 | if (!fi) { |
621 | inode->i_nlink--; | 620 | inode_dec_link_count(inode); |
622 | mark_inode_dirty(inode); | ||
623 | iput(inode); | 621 | iput(inode); |
624 | return err; | 622 | return err; |
625 | } | 623 | } |
@@ -665,12 +663,11 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
665 | inode->i_fop = &udf_dir_operations; | 663 | inode->i_fop = &udf_dir_operations; |
666 | fi = udf_add_entry(inode, NULL, &fibh, &cfi, &err); | 664 | fi = udf_add_entry(inode, NULL, &fibh, &cfi, &err); |
667 | if (!fi) { | 665 | if (!fi) { |
668 | inode->i_nlink--; | 666 | inode_dec_link_count(inode); |
669 | mark_inode_dirty(inode); | ||
670 | iput(inode); | 667 | iput(inode); |
671 | goto out; | 668 | goto out; |
672 | } | 669 | } |
673 | inode->i_nlink = 2; | 670 | set_nlink(inode, 2); |
674 | cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); | 671 | cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); |
675 | cfi.icb.extLocation = cpu_to_lelb(dinfo->i_location); | 672 | cfi.icb.extLocation = cpu_to_lelb(dinfo->i_location); |
676 | *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse = | 673 | *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse = |
@@ -683,7 +680,7 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
683 | 680 | ||
684 | fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); | 681 | fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); |
685 | if (!fi) { | 682 | if (!fi) { |
686 | inode->i_nlink = 0; | 683 | clear_nlink(inode); |
687 | mark_inode_dirty(inode); | 684 | mark_inode_dirty(inode); |
688 | iput(inode); | 685 | iput(inode); |
689 | goto out; | 686 | goto out; |
@@ -839,7 +836,7 @@ static int udf_unlink(struct inode *dir, struct dentry *dentry) | |||
839 | if (!inode->i_nlink) { | 836 | if (!inode->i_nlink) { |
840 | udf_debug("Deleting nonexistent file (%lu), %d\n", | 837 | udf_debug("Deleting nonexistent file (%lu), %d\n", |
841 | inode->i_ino, inode->i_nlink); | 838 | inode->i_ino, inode->i_nlink); |
842 | inode->i_nlink = 1; | 839 | set_nlink(inode, 1); |
843 | } | 840 | } |
844 | retval = udf_delete_entry(dir, fi, &fibh, &cfi); | 841 | retval = udf_delete_entry(dir, fi, &fibh, &cfi); |
845 | if (retval) | 842 | if (retval) |
diff --git a/fs/ufs/ialloc.c b/fs/ufs/ialloc.c index 2eabf04af3de..78a4c70d46b5 100644 --- a/fs/ufs/ialloc.c +++ b/fs/ufs/ialloc.c | |||
@@ -341,7 +341,7 @@ cg_found: | |||
341 | 341 | ||
342 | fail_remove_inode: | 342 | fail_remove_inode: |
343 | unlock_super(sb); | 343 | unlock_super(sb); |
344 | inode->i_nlink = 0; | 344 | clear_nlink(inode); |
345 | iput(inode); | 345 | iput(inode); |
346 | UFSD("EXIT (FAILED): err %d\n", err); | 346 | UFSD("EXIT (FAILED): err %d\n", err); |
347 | return ERR_PTR(err); | 347 | return ERR_PTR(err); |
diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c index b4d791a83207..879b13436fa4 100644 --- a/fs/ufs/inode.c +++ b/fs/ufs/inode.c | |||
@@ -589,7 +589,7 @@ static int ufs1_read_inode(struct inode *inode, struct ufs_inode *ufs_inode) | |||
589 | * Copy data to the in-core inode. | 589 | * Copy data to the in-core inode. |
590 | */ | 590 | */ |
591 | inode->i_mode = mode = fs16_to_cpu(sb, ufs_inode->ui_mode); | 591 | inode->i_mode = mode = fs16_to_cpu(sb, ufs_inode->ui_mode); |
592 | inode->i_nlink = fs16_to_cpu(sb, ufs_inode->ui_nlink); | 592 | set_nlink(inode, fs16_to_cpu(sb, ufs_inode->ui_nlink)); |
593 | if (inode->i_nlink == 0) { | 593 | if (inode->i_nlink == 0) { |
594 | ufs_error (sb, "ufs_read_inode", "inode %lu has zero nlink\n", inode->i_ino); | 594 | ufs_error (sb, "ufs_read_inode", "inode %lu has zero nlink\n", inode->i_ino); |
595 | return -1; | 595 | return -1; |
@@ -637,7 +637,7 @@ static int ufs2_read_inode(struct inode *inode, struct ufs2_inode *ufs2_inode) | |||
637 | * Copy data to the in-core inode. | 637 | * Copy data to the in-core inode. |
638 | */ | 638 | */ |
639 | inode->i_mode = mode = fs16_to_cpu(sb, ufs2_inode->ui_mode); | 639 | inode->i_mode = mode = fs16_to_cpu(sb, ufs2_inode->ui_mode); |
640 | inode->i_nlink = fs16_to_cpu(sb, ufs2_inode->ui_nlink); | 640 | set_nlink(inode, fs16_to_cpu(sb, ufs2_inode->ui_nlink)); |
641 | if (inode->i_nlink == 0) { | 641 | if (inode->i_nlink == 0) { |
642 | ufs_error (sb, "ufs_read_inode", "inode %lu has zero nlink\n", inode->i_ino); | 642 | ufs_error (sb, "ufs_read_inode", "inode %lu has zero nlink\n", inode->i_ino); |
643 | return -1; | 643 | return -1; |
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 9ba2a07b7343..23ce927973a4 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c | |||
@@ -1153,7 +1153,7 @@ xfs_setup_inode( | |||
1153 | hlist_add_fake(&inode->i_hash); | 1153 | hlist_add_fake(&inode->i_hash); |
1154 | 1154 | ||
1155 | inode->i_mode = ip->i_d.di_mode; | 1155 | inode->i_mode = ip->i_d.di_mode; |
1156 | inode->i_nlink = ip->i_d.di_nlink; | 1156 | set_nlink(inode, ip->i_d.di_nlink); |
1157 | inode->i_uid = ip->i_d.di_uid; | 1157 | inode->i_uid = ip->i_d.di_uid; |
1158 | inode->i_gid = ip->i_d.di_gid; | 1158 | inode->i_gid = ip->i_d.di_gid; |
1159 | 1159 | ||
diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 62157c03caf7..4df926199369 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h | |||
@@ -165,6 +165,7 @@ struct dentry_operations { | |||
165 | unsigned int, const char *, const struct qstr *); | 165 | unsigned int, const char *, const struct qstr *); |
166 | int (*d_delete)(const struct dentry *); | 166 | int (*d_delete)(const struct dentry *); |
167 | void (*d_release)(struct dentry *); | 167 | void (*d_release)(struct dentry *); |
168 | void (*d_prune)(struct dentry *); | ||
168 | void (*d_iput)(struct dentry *, struct inode *); | 169 | void (*d_iput)(struct dentry *, struct inode *); |
169 | char *(*d_dname)(struct dentry *, char *, int); | 170 | char *(*d_dname)(struct dentry *, char *, int); |
170 | struct vfsmount *(*d_automount)(struct path *); | 171 | struct vfsmount *(*d_automount)(struct path *); |
@@ -184,8 +185,9 @@ struct dentry_operations { | |||
184 | #define DCACHE_OP_COMPARE 0x0002 | 185 | #define DCACHE_OP_COMPARE 0x0002 |
185 | #define DCACHE_OP_REVALIDATE 0x0004 | 186 | #define DCACHE_OP_REVALIDATE 0x0004 |
186 | #define DCACHE_OP_DELETE 0x0008 | 187 | #define DCACHE_OP_DELETE 0x0008 |
188 | #define DCACHE_OP_PRUNE 0x0010 | ||
187 | 189 | ||
188 | #define DCACHE_DISCONNECTED 0x0010 | 190 | #define DCACHE_DISCONNECTED 0x0020 |
189 | /* This dentry is possibly not currently connected to the dcache tree, in | 191 | /* This dentry is possibly not currently connected to the dcache tree, in |
190 | * which case its parent will either be itself, or will have this flag as | 192 | * which case its parent will either be itself, or will have this flag as |
191 | * well. nfsd will not use a dentry with this bit set, but will first | 193 | * well. nfsd will not use a dentry with this bit set, but will first |
@@ -196,8 +198,8 @@ struct dentry_operations { | |||
196 | * dentry into place and return that dentry rather than the passed one, | 198 | * dentry into place and return that dentry rather than the passed one, |
197 | * typically using d_splice_alias. */ | 199 | * typically using d_splice_alias. */ |
198 | 200 | ||
199 | #define DCACHE_REFERENCED 0x0020 /* Recently used, don't discard. */ | 201 | #define DCACHE_REFERENCED 0x0040 /* Recently used, don't discard. */ |
200 | #define DCACHE_RCUACCESS 0x0040 /* Entry has ever been RCU-visible */ | 202 | #define DCACHE_RCUACCESS 0x0080 /* Entry has ever been RCU-visible */ |
201 | 203 | ||
202 | #define DCACHE_CANT_MOUNT 0x0100 | 204 | #define DCACHE_CANT_MOUNT 0x0100 |
203 | #define DCACHE_GENOCIDE 0x0200 | 205 | #define DCACHE_GENOCIDE 0x0200 |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 78af9385f415..0c4df261af7e 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -768,7 +768,17 @@ struct inode { | |||
768 | 768 | ||
769 | /* Stat data, not accessed from path walking */ | 769 | /* Stat data, not accessed from path walking */ |
770 | unsigned long i_ino; | 770 | unsigned long i_ino; |
771 | unsigned int i_nlink; | 771 | /* |
772 | * Filesystems may only read i_nlink directly. They shall use the | ||
773 | * following functions for modification: | ||
774 | * | ||
775 | * (set|clear|inc|drop)_nlink | ||
776 | * inode_(inc|dec)_link_count | ||
777 | */ | ||
778 | union { | ||
779 | const unsigned int i_nlink; | ||
780 | unsigned int __i_nlink; | ||
781 | }; | ||
772 | dev_t i_rdev; | 782 | dev_t i_rdev; |
773 | struct timespec i_atime; | 783 | struct timespec i_atime; |
774 | struct timespec i_mtime; | 784 | struct timespec i_mtime; |
@@ -1755,6 +1765,19 @@ static inline void mark_inode_dirty_sync(struct inode *inode) | |||
1755 | } | 1765 | } |
1756 | 1766 | ||
1757 | /** | 1767 | /** |
1768 | * set_nlink - directly set an inode's link count | ||
1769 | * @inode: inode | ||
1770 | * @nlink: new nlink (should be non-zero) | ||
1771 | * | ||
1772 | * This is a low-level filesystem helper to replace any | ||
1773 | * direct filesystem manipulation of i_nlink. | ||
1774 | */ | ||
1775 | static inline void set_nlink(struct inode *inode, unsigned int nlink) | ||
1776 | { | ||
1777 | inode->__i_nlink = nlink; | ||
1778 | } | ||
1779 | |||
1780 | /** | ||
1758 | * inc_nlink - directly increment an inode's link count | 1781 | * inc_nlink - directly increment an inode's link count |
1759 | * @inode: inode | 1782 | * @inode: inode |
1760 | * | 1783 | * |
@@ -1764,7 +1787,7 @@ static inline void mark_inode_dirty_sync(struct inode *inode) | |||
1764 | */ | 1787 | */ |
1765 | static inline void inc_nlink(struct inode *inode) | 1788 | static inline void inc_nlink(struct inode *inode) |
1766 | { | 1789 | { |
1767 | inode->i_nlink++; | 1790 | inode->__i_nlink++; |
1768 | } | 1791 | } |
1769 | 1792 | ||
1770 | static inline void inode_inc_link_count(struct inode *inode) | 1793 | static inline void inode_inc_link_count(struct inode *inode) |
@@ -1786,7 +1809,7 @@ static inline void inode_inc_link_count(struct inode *inode) | |||
1786 | */ | 1809 | */ |
1787 | static inline void drop_nlink(struct inode *inode) | 1810 | static inline void drop_nlink(struct inode *inode) |
1788 | { | 1811 | { |
1789 | inode->i_nlink--; | 1812 | inode->__i_nlink--; |
1790 | } | 1813 | } |
1791 | 1814 | ||
1792 | /** | 1815 | /** |
@@ -1799,7 +1822,7 @@ static inline void drop_nlink(struct inode *inode) | |||
1799 | */ | 1822 | */ |
1800 | static inline void clear_nlink(struct inode *inode) | 1823 | static inline void clear_nlink(struct inode *inode) |
1801 | { | 1824 | { |
1802 | inode->i_nlink = 0; | 1825 | inode->__i_nlink = 0; |
1803 | } | 1826 | } |
1804 | 1827 | ||
1805 | static inline void inode_dec_link_count(struct inode *inode) | 1828 | static inline void inode_dec_link_count(struct inode *inode) |
diff --git a/include/linux/namei.h b/include/linux/namei.h index 409328d1cbbb..ffc02135c483 100644 --- a/include/linux/namei.h +++ b/include/linux/namei.h | |||
@@ -67,6 +67,7 @@ enum {LAST_NORM, LAST_ROOT, LAST_DOT, LAST_DOTDOT, LAST_BIND}; | |||
67 | #define LOOKUP_EMPTY 0x4000 | 67 | #define LOOKUP_EMPTY 0x4000 |
68 | 68 | ||
69 | extern int user_path_at(int, const char __user *, unsigned, struct path *); | 69 | extern int user_path_at(int, const char __user *, unsigned, struct path *); |
70 | extern int user_path_at_empty(int, const char __user *, unsigned, struct path *, int *empty); | ||
70 | 71 | ||
71 | #define user_path(name, path) user_path_at(AT_FDCWD, name, LOOKUP_FOLLOW, path) | 72 | #define user_path(name, path) user_path_at(AT_FDCWD, name, LOOKUP_FOLLOW, path) |
72 | #define user_lpath(name, path) user_path_at(AT_FDCWD, name, 0, path) | 73 | #define user_lpath(name, path) user_path_at(AT_FDCWD, name, 0, path) |
diff --git a/mm/shmem.c b/mm/shmem.c index fa4fa6ce13bc..45b9acb575f9 100644 --- a/mm/shmem.c +++ b/mm/shmem.c | |||
@@ -2503,7 +2503,7 @@ struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags | |||
2503 | 2503 | ||
2504 | d_instantiate(path.dentry, inode); | 2504 | d_instantiate(path.dentry, inode); |
2505 | inode->i_size = size; | 2505 | inode->i_size = size; |
2506 | inode->i_nlink = 0; /* It is unlinked */ | 2506 | clear_nlink(inode); /* It is unlinked */ |
2507 | #ifndef CONFIG_MMU | 2507 | #ifndef CONFIG_MMU |
2508 | error = ramfs_nommu_expand_for_mapping(inode, size); | 2508 | error = ramfs_nommu_expand_for_mapping(inode, size); |
2509 | if (error) | 2509 | if (error) |