diff options
author | Dave Chinner <dchinner@redhat.com> | 2016-02-09 00:54:58 -0500 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2016-02-09 00:54:58 -0500 |
commit | 54d7b5c1d03e9711cce2d72237d5b3f5c87431f4 (patch) | |
tree | 217051439807a7bc0fba823d0319c7a5900cc2c3 | |
parent | 50997470ef95fd8ae0ef6acab3b2e1d886ae2445 (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.c | 6 | ||||
-rw-r--r-- | fs/xfs/libxfs/xfs_inode_buf.h | 1 | ||||
-rw-r--r-- | fs/xfs/xfs_icache.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.c | 77 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.h | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_inode_item.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_iops.c | 3 | ||||
-rw-r--r-- | fs/xfs/xfs_itable.c | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_log_recover.c | 2 |
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 | ||
60 | STATIC int xfs_iflush_int(xfs_inode_t *, xfs_buf_t *); | 60 | STATIC int xfs_iflush_int(struct xfs_inode *, struct xfs_buf *); |
61 | 61 | STATIC int xfs_iunlink(struct xfs_trans *, struct xfs_inode *); | |
62 | STATIC int xfs_iunlink_remove(xfs_trans_t *, xfs_inode_t *); | 62 | STATIC 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 | */ |
1093 | int /* error */ | 1093 | int /* error */ |
1094 | xfs_droplink( | 1094 | xfs_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 | */ |
1953 | int | 1947 | STATIC int |
1954 | xfs_iunlink( | 1948 | xfs_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 *); |
406 | int xfs_itruncate_extents(struct xfs_trans **, struct xfs_inode *, | 406 | int xfs_itruncate_extents(struct xfs_trans **, struct xfs_inode *, |
407 | int, xfs_fsize_t); | 407 | int, xfs_fsize_t); |
408 | int xfs_iunlink(struct xfs_trans *, xfs_inode_t *); | ||
409 | |||
410 | void xfs_iext_realloc(xfs_inode_t *, int, int); | 408 | void xfs_iext_realloc(xfs_inode_t *, int, int); |
411 | 409 | ||
412 | void xfs_iunpin_wait(xfs_inode_t *); | 410 | void 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 */ |