keep i_nlink updated and use proper accessors
PATCH 2/2 keep i_nlink updated and use proper accessors
To get the read-only bind mounts in -mm to work correctly with XFS we need to call the drop_nlink and inc_nlink helpers to monitor the link count. Add calls to these to xfs_bumplink and xfs_droplink and stop copying over di_nlink to i_nlink in xfs_validate_fields and vn_revalidate.
Signed-off-by Christoph Hellwig <[email protected]>
fs/xfs/linux-2.6/xfs_iops.c +0 -1
@@ -184,7 +184,6 @@ xfs_validate_fields(struct xfs_inode *ip =XFS_I (inode);loff_t size; - inode->i_nlink = ip->i_d.di_nlink;/* we're under i_sem so i_size can't change under us */ size =XFS_ISIZE (ip);if (i_size_read (inode) != size)
fs/xfs/linux-2.6/xfs_vnode.c +0 -1
@@ -117,7 +117,6 @@ vn_revalidate(xfs_ilock (ip,XFS_ILOCK_SHARED ); inode->i_mode = ip->i_d.di_mode; - inode->i_nlink = ip->i_d.di_nlink; inode->i_uid = ip->i_d.di_uid; inode->i_gid = ip->i_d.di_gid; inode->i_mtime.tv_sec = ip->i_d.di_mtime.t_sec;
fs/xfs/xfs_utils.c +2 -0
@@ -302,6 +302,7 @@ xfs_droplink(ASSERT (ip->i_d.di_nlink >0 ); ip->i_d.di_nlink--; +drop_nlink (ip->i_vnode);xfs_trans_log_inode (tp, ip,XFS_ILOG_CORE ); error =0 ;
@@ -365,6 +366,7 @@ xfs_bumplink(ASSERT (ip->i_d.di_nlink >0 ); ip->i_d.di_nlink++; +inc_nlink (ip->i_vnode);if ((ip->i_d.di_version ==XFS_DINODE_VERSION_1 ) && (ip->i_d.di_nlink >XFS_MAXLINK_1 )) {/*