aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2016-02-09 00:54:58 -0500
committerDave Chinner <david@fromorbit.com>2016-02-09 00:54:58 -0500
commit54d7b5c1d03e9711cce2d72237d5b3f5c87431f4 (patch)
tree217051439807a7bc0fba823d0319c7a5900cc2c3
parent50997470ef95fd8ae0ef6acab3b2e1d886ae2445 (diff)
xfs: use vfs inode nlink field everywhere
The VFS tracks the inode nlink just like the xfs_icdinode. We can remove the variable from the icdinode and use the VFS inode variable everywhere, reducing the size of the xfs_icdinode by a further 4 bytes. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dave Chinner <david@fromorbit.com>
-rw-r--r--fs/xfs/libxfs/xfs_inode_buf.c6
-rw-r--r--fs/xfs/libxfs/xfs_inode_buf.h1
-rw-r--r--fs/xfs/xfs_icache.c2
-rw-r--r--fs/xfs/xfs_inode.c77
-rw-r--r--fs/xfs/xfs_inode.h2
-rw-r--r--fs/xfs/xfs_inode_item.c2
-rw-r--r--fs/xfs/xfs_iops.c3
-rw-r--r--fs/xfs/xfs_itable.c2
-rw-r--r--fs/xfs/xfs_log_recover.c2
9 files changed, 43 insertions, 54 deletions
diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
index fe8f4f349b37..cc509c1af75e 100644
--- a/fs/xfs/libxfs/xfs_inode_buf.c
+++ b/fs/xfs/libxfs/xfs_inode_buf.c
@@ -210,12 +210,12 @@ xfs_inode_from_disk(
210 * minimum inode version format we support in the rest of the code. 210 * minimum inode version format we support in the rest of the code.
211 */ 211 */
212 if (to->di_version == 1) { 212 if (to->di_version == 1) {
213 to->di_nlink = be16_to_cpu(from->di_onlink); 213 set_nlink(inode, be16_to_cpu(from->di_onlink));
214 to->di_projid_lo = 0; 214 to->di_projid_lo = 0;
215 to->di_projid_hi = 0; 215 to->di_projid_hi = 0;
216 to->di_version = 2; 216 to->di_version = 2;
217 } else { 217 } else {
218 to->di_nlink = be32_to_cpu(from->di_nlink); 218 set_nlink(inode, be32_to_cpu(from->di_nlink));
219 to->di_projid_lo = be16_to_cpu(from->di_projid_lo); 219 to->di_projid_lo = be16_to_cpu(from->di_projid_lo);
220 to->di_projid_hi = be16_to_cpu(from->di_projid_hi); 220 to->di_projid_hi = be16_to_cpu(from->di_projid_hi);
221 } 221 }
@@ -275,7 +275,6 @@ xfs_inode_to_disk(
275 to->di_format = from->di_format; 275 to->di_format = from->di_format;
276 to->di_uid = cpu_to_be32(from->di_uid); 276 to->di_uid = cpu_to_be32(from->di_uid);
277 to->di_gid = cpu_to_be32(from->di_gid); 277 to->di_gid = cpu_to_be32(from->di_gid);
278 to->di_nlink = cpu_to_be32(from->di_nlink);
279 to->di_projid_lo = cpu_to_be16(from->di_projid_lo); 278 to->di_projid_lo = cpu_to_be16(from->di_projid_lo);
280 to->di_projid_hi = cpu_to_be16(from->di_projid_hi); 279 to->di_projid_hi = cpu_to_be16(from->di_projid_hi);
281 280
@@ -286,6 +285,7 @@ xfs_inode_to_disk(
286 to->di_mtime.t_nsec = cpu_to_be32(inode->i_mtime.tv_nsec); 285 to->di_mtime.t_nsec = cpu_to_be32(inode->i_mtime.tv_nsec);
287 to->di_ctime.t_sec = cpu_to_be32(inode->i_ctime.tv_sec); 286 to->di_ctime.t_sec = cpu_to_be32(inode->i_ctime.tv_sec);
288 to->di_ctime.t_nsec = cpu_to_be32(inode->i_ctime.tv_nsec); 287 to->di_ctime.t_nsec = cpu_to_be32(inode->i_ctime.tv_nsec);
288 to->di_nlink = cpu_to_be32(inode->i_nlink);
289 289
290 to->di_size = cpu_to_be64(from->di_size); 290 to->di_size = cpu_to_be64(from->di_size);
291 to->di_nblocks = cpu_to_be64(from->di_nblocks); 291 to->di_nblocks = cpu_to_be64(from->di_nblocks);
diff --git a/fs/xfs/libxfs/xfs_inode_buf.h b/fs/xfs/libxfs/xfs_inode_buf.h
index 73ba1d8ffac2..320b72344270 100644
--- a/fs/xfs/libxfs/xfs_inode_buf.h
+++ b/fs/xfs/libxfs/xfs_inode_buf.h
@@ -34,7 +34,6 @@ struct xfs_icdinode {
34 __uint16_t di_flushiter; /* incremented on flush */ 34 __uint16_t di_flushiter; /* incremented on flush */
35 __uint32_t di_uid; /* owner's user id */ 35 __uint32_t di_uid; /* owner's user id */
36 __uint32_t di_gid; /* owner's group id */ 36 __uint32_t di_gid; /* owner's group id */
37 __uint32_t di_nlink; /* number of links to file */
38 __uint16_t di_projid_lo; /* lower part of owner's project id */ 37 __uint16_t di_projid_lo; /* lower part of owner's project id */
39 __uint16_t di_projid_hi; /* higher part of owner's project id */ 38 __uint16_t di_projid_hi; /* higher part of owner's project id */
40 xfs_fsize_t di_size; /* number of bytes in file */ 39 xfs_fsize_t di_size; /* number of bytes in file */
diff --git a/fs/xfs/xfs_icache.c b/fs/xfs/xfs_icache.c
index 9ca2865575ab..4c184f70d43c 100644
--- a/fs/xfs/xfs_icache.c
+++ b/fs/xfs/xfs_icache.c
@@ -148,9 +148,11 @@ xfs_reinit_inode(
148 struct inode *inode) 148 struct inode *inode)
149{ 149{
150 int error; 150 int error;
151 uint32_t nlink = inode->i_nlink;
151 152
152 error = inode_init_always(mp->m_super, inode); 153 error = inode_init_always(mp->m_super, inode);
153 154
155 set_nlink(inode, nlink);
154 return error; 156 return error;
155} 157}
156 158
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 7d9c514fd231..18b3bc0c211a 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -57,9 +57,9 @@ kmem_zone_t *xfs_inode_zone;
57 */ 57 */
58#define XFS_ITRUNC_MAX_EXTENTS 2 58#define XFS_ITRUNC_MAX_EXTENTS 2
59 59
60STATIC int xfs_iflush_int(xfs_inode_t *, xfs_buf_t *); 60STATIC int xfs_iflush_int(struct xfs_inode *, struct xfs_buf *);
61 61STATIC int xfs_iunlink(struct xfs_trans *, struct xfs_inode *);
62STATIC int xfs_iunlink_remove(xfs_trans_t *, xfs_inode_t *); 62STATIC int xfs_iunlink_remove(struct xfs_trans *, struct xfs_inode *);
63 63
64/* 64/*
65 * helper function to extract extent size hint from inode 65 * helper function to extract extent size hint from inode
@@ -803,7 +803,7 @@ xfs_ialloc(
803 ip->i_d.di_version = 2; 803 ip->i_d.di_version = 2;
804 804
805 ip->i_d.di_mode = mode; 805 ip->i_d.di_mode = mode;
806 ip->i_d.di_nlink = nlink; 806 set_nlink(inode, nlink);
807 ip->i_d.di_uid = xfs_kuid_to_uid(current_fsuid()); 807 ip->i_d.di_uid = xfs_kuid_to_uid(current_fsuid());
808 ip->i_d.di_gid = xfs_kgid_to_gid(current_fsgid()); 808 ip->i_d.di_gid = xfs_kgid_to_gid(current_fsgid());
809 xfs_set_projid(ip, prid); 809 xfs_set_projid(ip, prid);
@@ -1086,35 +1086,24 @@ xfs_dir_ialloc(
1086} 1086}
1087 1087
1088/* 1088/*
1089 * Decrement the link count on an inode & log the change. 1089 * Decrement the link count on an inode & log the change. If this causes the
1090 * If this causes the link count to go to zero, initiate the 1090 * link count to go to zero, move the inode to AGI unlinked list so that it can
1091 * logging activity required to truncate a file. 1091 * be freed when the last active reference goes away via xfs_inactive().
1092 */ 1092 */
1093int /* error */ 1093int /* error */
1094xfs_droplink( 1094xfs_droplink(
1095 xfs_trans_t *tp, 1095 xfs_trans_t *tp,
1096 xfs_inode_t *ip) 1096 xfs_inode_t *ip)
1097{ 1097{
1098 int error;
1099
1100 xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG); 1098 xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG);
1101 1099
1102 ASSERT (ip->i_d.di_nlink > 0);
1103 ip->i_d.di_nlink--;
1104 drop_nlink(VFS_I(ip)); 1100 drop_nlink(VFS_I(ip));
1105 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 1101 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
1106 1102
1107 error = 0; 1103 if (VFS_I(ip)->i_nlink)
1108 if (ip->i_d.di_nlink == 0) { 1104 return 0;
1109 /* 1105
1110 * We're dropping the last link to this file. 1106 return xfs_iunlink(tp, ip);
1111 * Move the on-disk inode to the AGI unlinked list.
1112 * From xfs_inactive() we will pull the inode from
1113 * the list and free it.
1114 */
1115 error = xfs_iunlink(tp, ip);
1116 }
1117 return error;
1118} 1107}
1119 1108
1120/* 1109/*
@@ -1128,8 +1117,6 @@ xfs_bumplink(
1128 xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG); 1117 xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG);
1129 1118
1130 ASSERT(ip->i_d.di_version > 1); 1119 ASSERT(ip->i_d.di_version > 1);
1131 ASSERT(ip->i_d.di_nlink > 0 || (VFS_I(ip)->i_state & I_LINKABLE));
1132 ip->i_d.di_nlink++;
1133 inc_nlink(VFS_I(ip)); 1120 inc_nlink(VFS_I(ip));
1134 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 1121 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
1135 return 0; 1122 return 0;
@@ -1387,7 +1374,6 @@ xfs_create_tmpfile(
1387 */ 1374 */
1388 xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp); 1375 xfs_qm_vop_create_dqattach(tp, ip, udqp, gdqp, pdqp);
1389 1376
1390 ip->i_d.di_nlink--;
1391 error = xfs_iunlink(tp, ip); 1377 error = xfs_iunlink(tp, ip);
1392 if (error) 1378 if (error)
1393 goto out_trans_cancel; 1379 goto out_trans_cancel;
@@ -1486,7 +1472,10 @@ xfs_link(
1486 1472
1487 xfs_bmap_init(&free_list, &first_block); 1473 xfs_bmap_init(&free_list, &first_block);
1488 1474
1489 if (sip->i_d.di_nlink == 0) { 1475 /*
1476 * Handle initial link state of O_TMPFILE inode
1477 */
1478 if (VFS_I(sip)->i_nlink == 0) {
1490 error = xfs_iunlink_remove(tp, sip); 1479 error = xfs_iunlink_remove(tp, sip);
1491 if (error) 1480 if (error)
1492 goto error_return; 1481 goto error_return;
@@ -1673,7 +1662,7 @@ xfs_release(
1673 } 1662 }
1674 } 1663 }
1675 1664
1676 if (ip->i_d.di_nlink == 0) 1665 if (VFS_I(ip)->i_nlink == 0)
1677 return 0; 1666 return 0;
1678 1667
1679 if (xfs_can_free_eofblocks(ip, false)) { 1668 if (xfs_can_free_eofblocks(ip, false)) {
@@ -1889,7 +1878,7 @@ xfs_inactive(
1889 if (mp->m_flags & XFS_MOUNT_RDONLY) 1878 if (mp->m_flags & XFS_MOUNT_RDONLY)
1890 return; 1879 return;
1891 1880
1892 if (ip->i_d.di_nlink != 0) { 1881 if (VFS_I(ip)->i_nlink != 0) {
1893 /* 1882 /*
1894 * force is true because we are evicting an inode from the 1883 * force is true because we are evicting an inode from the
1895 * cache. Post-eof blocks must be freed, lest we end up with 1884 * cache. Post-eof blocks must be freed, lest we end up with
@@ -1946,16 +1935,21 @@ xfs_inactive(
1946} 1935}
1947 1936
1948/* 1937/*
1949 * This is called when the inode's link count goes to 0. 1938 * This is called when the inode's link count goes to 0 or we are creating a
1950 * We place the on-disk inode on a list in the AGI. It 1939 * tmpfile via O_TMPFILE. In the case of a tmpfile, @ignore_linkcount will be
1951 * will be pulled from this list when the inode is freed. 1940 * set to true as the link count is dropped to zero by the VFS after we've
1941 * created the file successfully, so we have to add it to the unlinked list
1942 * while the link count is non-zero.
1943 *
1944 * We place the on-disk inode on a list in the AGI. It will be pulled from this
1945 * list when the inode is freed.
1952 */ 1946 */
1953int 1947STATIC int
1954xfs_iunlink( 1948xfs_iunlink(
1955 xfs_trans_t *tp, 1949 struct xfs_trans *tp,
1956 xfs_inode_t *ip) 1950 struct xfs_inode *ip)
1957{ 1951{
1958 xfs_mount_t *mp; 1952 xfs_mount_t *mp = tp->t_mountp;
1959 xfs_agi_t *agi; 1953 xfs_agi_t *agi;
1960 xfs_dinode_t *dip; 1954 xfs_dinode_t *dip;
1961 xfs_buf_t *agibp; 1955 xfs_buf_t *agibp;
@@ -1965,11 +1959,8 @@ xfs_iunlink(
1965 int offset; 1959 int offset;
1966 int error; 1960 int error;
1967 1961
1968 ASSERT(ip->i_d.di_nlink == 0);
1969 ASSERT(ip->i_d.di_mode != 0); 1962 ASSERT(ip->i_d.di_mode != 0);
1970 1963
1971 mp = tp->t_mountp;
1972
1973 /* 1964 /*
1974 * Get the agi buffer first. It ensures lock ordering 1965 * Get the agi buffer first. It ensures lock ordering
1975 * on the list. 1966 * on the list.
@@ -2406,7 +2397,7 @@ xfs_ifree(
2406 struct xfs_icluster xic = { 0 }; 2397 struct xfs_icluster xic = { 0 };
2407 2398
2408 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); 2399 ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
2409 ASSERT(ip->i_d.di_nlink == 0); 2400 ASSERT(VFS_I(ip)->i_nlink == 0);
2410 ASSERT(ip->i_d.di_nextents == 0); 2401 ASSERT(ip->i_d.di_nextents == 0);
2411 ASSERT(ip->i_d.di_anextents == 0); 2402 ASSERT(ip->i_d.di_anextents == 0);
2412 ASSERT(ip->i_d.di_size == 0 || !S_ISREG(ip->i_d.di_mode)); 2403 ASSERT(ip->i_d.di_size == 0 || !S_ISREG(ip->i_d.di_mode));
@@ -2574,8 +2565,8 @@ xfs_remove(
2574 * If we're removing a directory perform some additional validation. 2565 * If we're removing a directory perform some additional validation.
2575 */ 2566 */
2576 if (is_dir) { 2567 if (is_dir) {
2577 ASSERT(ip->i_d.di_nlink >= 2); 2568 ASSERT(VFS_I(ip)->i_nlink >= 2);
2578 if (ip->i_d.di_nlink != 2) { 2569 if (VFS_I(ip)->i_nlink != 2) {
2579 error = -ENOTEMPTY; 2570 error = -ENOTEMPTY;
2580 goto out_trans_cancel; 2571 goto out_trans_cancel;
2581 } 2572 }
@@ -3031,7 +3022,7 @@ xfs_rename(
3031 * Make sure target dir is empty. 3022 * Make sure target dir is empty.
3032 */ 3023 */
3033 if (!(xfs_dir_isempty(target_ip)) || 3024 if (!(xfs_dir_isempty(target_ip)) ||
3034 (target_ip->i_d.di_nlink > 2)) { 3025 (VFS_I(target_ip)->i_nlink > 2)) {
3035 error = -EEXIST; 3026 error = -EEXIST;
3036 goto out_trans_cancel; 3027 goto out_trans_cancel;
3037 } 3028 }
@@ -3138,7 +3129,7 @@ xfs_rename(
3138 * intermediate state on disk. 3129 * intermediate state on disk.
3139 */ 3130 */
3140 if (wip) { 3131 if (wip) {
3141 ASSERT(VFS_I(wip)->i_nlink == 0 && wip->i_d.di_nlink == 0); 3132 ASSERT(VFS_I(wip)->i_nlink == 0);
3142 error = xfs_bumplink(tp, wip); 3133 error = xfs_bumplink(tp, wip);
3143 if (error) 3134 if (error)
3144 goto out_bmap_cancel; 3135 goto out_bmap_cancel;
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h
index aef5452b1a90..e74d13d3076b 100644
--- a/fs/xfs/xfs_inode.h
+++ b/fs/xfs/xfs_inode.h
@@ -405,8 +405,6 @@ int xfs_ifree(struct xfs_trans *, xfs_inode_t *,
405 struct xfs_bmap_free *); 405 struct xfs_bmap_free *);
406int xfs_itruncate_extents(struct xfs_trans **, struct xfs_inode *, 406int xfs_itruncate_extents(struct xfs_trans **, struct xfs_inode *,
407 int, xfs_fsize_t); 407 int, xfs_fsize_t);
408int xfs_iunlink(struct xfs_trans *, xfs_inode_t *);
409
410void xfs_iext_realloc(xfs_inode_t *, int, int); 408void xfs_iext_realloc(xfs_inode_t *, int, int);
411 409
412void xfs_iunpin_wait(xfs_inode_t *); 410void xfs_iunpin_wait(xfs_inode_t *);
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
index 1e5ecbc45459..193e0bdec340 100644
--- a/fs/xfs/xfs_inode_item.c
+++ b/fs/xfs/xfs_inode_item.c
@@ -338,7 +338,6 @@ xfs_inode_to_log_dinode(
338 to->di_format = from->di_format; 338 to->di_format = from->di_format;
339 to->di_uid = from->di_uid; 339 to->di_uid = from->di_uid;
340 to->di_gid = from->di_gid; 340 to->di_gid = from->di_gid;
341 to->di_nlink = from->di_nlink;
342 to->di_projid_lo = from->di_projid_lo; 341 to->di_projid_lo = from->di_projid_lo;
343 to->di_projid_hi = from->di_projid_hi; 342 to->di_projid_hi = from->di_projid_hi;
344 343
@@ -350,6 +349,7 @@ xfs_inode_to_log_dinode(
350 to->di_mtime.t_nsec = inode->i_mtime.tv_nsec; 349 to->di_mtime.t_nsec = inode->i_mtime.tv_nsec;
351 to->di_ctime.t_sec = inode->i_ctime.tv_sec; 350 to->di_ctime.t_sec = inode->i_ctime.tv_sec;
352 to->di_ctime.t_nsec = inode->i_ctime.tv_nsec; 351 to->di_ctime.t_nsec = inode->i_ctime.tv_nsec;
352 to->di_nlink = inode->i_nlink;
353 353
354 to->di_size = from->di_size; 354 to->di_size = from->di_size;
355 to->di_nblocks = from->di_nblocks; 355 to->di_nblocks = from->di_nblocks;
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
index cd27c6d56dfc..8982e56e07c4 100644
--- a/fs/xfs/xfs_iops.c
+++ b/fs/xfs/xfs_iops.c
@@ -460,7 +460,7 @@ xfs_vn_getattr(
460 stat->size = XFS_ISIZE(ip); 460 stat->size = XFS_ISIZE(ip);
461 stat->dev = inode->i_sb->s_dev; 461 stat->dev = inode->i_sb->s_dev;
462 stat->mode = ip->i_d.di_mode; 462 stat->mode = ip->i_d.di_mode;
463 stat->nlink = ip->i_d.di_nlink; 463 stat->nlink = inode->i_nlink;
464 stat->uid = inode->i_uid; 464 stat->uid = inode->i_uid;
465 stat->gid = inode->i_gid; 465 stat->gid = inode->i_gid;
466 stat->ino = ip->i_ino; 466 stat->ino = ip->i_ino;
@@ -1216,7 +1216,6 @@ xfs_setup_inode(
1216 hlist_add_fake(&inode->i_hash); 1216 hlist_add_fake(&inode->i_hash);
1217 1217
1218 inode->i_mode = ip->i_d.di_mode; 1218 inode->i_mode = ip->i_d.di_mode;
1219 set_nlink(inode, ip->i_d.di_nlink);
1220 inode->i_uid = xfs_uid_to_kuid(ip->i_d.di_uid); 1219 inode->i_uid = xfs_uid_to_kuid(ip->i_d.di_uid);
1221 inode->i_gid = xfs_gid_to_kgid(ip->i_d.di_gid); 1220 inode->i_gid = xfs_gid_to_kgid(ip->i_d.di_gid);
1222 1221
diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c
index 2acda42319f5..cfb65273d361 100644
--- a/fs/xfs/xfs_itable.c
+++ b/fs/xfs/xfs_itable.c
@@ -85,7 +85,6 @@ xfs_bulkstat_one_int(
85 /* xfs_iget returns the following without needing 85 /* xfs_iget returns the following without needing
86 * further change. 86 * further change.
87 */ 87 */
88 buf->bs_nlink = dic->di_nlink;
89 buf->bs_projid_lo = dic->di_projid_lo; 88 buf->bs_projid_lo = dic->di_projid_lo;
90 buf->bs_projid_hi = dic->di_projid_hi; 89 buf->bs_projid_hi = dic->di_projid_hi;
91 buf->bs_ino = ino; 90 buf->bs_ino = ino;
@@ -94,6 +93,7 @@ xfs_bulkstat_one_int(
94 buf->bs_gid = dic->di_gid; 93 buf->bs_gid = dic->di_gid;
95 buf->bs_size = dic->di_size; 94 buf->bs_size = dic->di_size;
96 95
96 buf->bs_nlink = inode->i_nlink;
97 buf->bs_atime.tv_sec = inode->i_atime.tv_sec; 97 buf->bs_atime.tv_sec = inode->i_atime.tv_sec;
98 buf->bs_atime.tv_nsec = inode->i_atime.tv_nsec; 98 buf->bs_atime.tv_nsec = inode->i_atime.tv_nsec;
99 buf->bs_mtime.tv_sec = inode->i_mtime.tv_sec; 99 buf->bs_mtime.tv_sec = inode->i_mtime.tv_sec;
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index 4b79cf006589..611c25cdb15c 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -4337,7 +4337,7 @@ xlog_recover_process_one_iunlink(
4337 if (error) 4337 if (error)
4338 goto fail_iput; 4338 goto fail_iput;
4339 4339
4340 ASSERT(ip->i_d.di_nlink == 0); 4340 ASSERT(VFS_I(ip)->i_nlink == 0);
4341 ASSERT(ip->i_d.di_mode != 0); 4341 ASSERT(ip->i_d.di_mode != 0);
4342 4342
4343 /* setup for the next pass */ 4343 /* setup for the next pass */