[XFS] 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.

SGI-PV: 971186
SGI-Modid: xfs-linux-melb:xfs-kern:30392a

Signed-off-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>

authored by Christoph Hellwig and committed by Lachlan McIlroy 4188c78d 222096ae

+2 -2
-1
fs/xfs/linux-2.6/xfs_iops.c
··· 201 201 struct xfs_inode *ip = XFS_I(inode); 202 202 loff_t size; 203 203 204 - inode->i_nlink = ip->i_d.di_nlink; 205 204 /* we're under i_sem so i_size can't change under us */ 206 205 size = XFS_ISIZE(ip); 207 206 if (i_size_read(inode) != size)
-1
fs/xfs/linux-2.6/xfs_vnode.c
··· 103 103 104 104 xfs_ilock(ip, XFS_ILOCK_SHARED); 105 105 inode->i_mode = ip->i_d.di_mode; 106 - inode->i_nlink = ip->i_d.di_nlink; 107 106 inode->i_uid = ip->i_d.di_uid; 108 107 inode->i_gid = ip->i_d.di_gid; 109 108 inode->i_mtime.tv_sec = ip->i_d.di_mtime.t_sec;
+2
fs/xfs/xfs_utils.c
··· 302 302 303 303 ASSERT (ip->i_d.di_nlink > 0); 304 304 ip->i_d.di_nlink--; 305 + drop_nlink(ip->i_vnode); 305 306 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); 306 307 307 308 error = 0; ··· 366 365 367 366 ASSERT(ip->i_d.di_nlink > 0); 368 367 ip->i_d.di_nlink++; 368 + inc_nlink(ip->i_vnode); 369 369 if ((ip->i_d.di_version == XFS_DINODE_VERSION_1) && 370 370 (ip->i_d.di_nlink > XFS_MAXLINK_1)) { 371 371 /*