Linux: 3.2: Use set_nlink to update i_nlink

As of v3.2-rc1~84^2~1, struct inode.i_nlink is now const to prevent
direct modification.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
Reviewed-on: http://gerrit.openafs.org/6096
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
(cherry picked from commit f1dd2d696fb9ab71b4192b156042e0c63019c58a)

Change-Id: I685aa6e8638e8fe864f1a6a7e428dfb6839ebcea
Reviewed-on: http://gerrit.openafs.org/6099
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
This commit is contained in:
Anders Kaseorg 2011-11-20 19:00:00 -05:00 committed by Derrick Brashear
parent 7f55b45ed7
commit 737a2802e9
3 changed files with 17 additions and 0 deletions

View File

@ -943,6 +943,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
LINUX_REGISTER_SYSCTL_TABLE_NOFLAG
LINUX_HAVE_DCACHE_LOCK
LINUX_D_COUNT_IS_INT
LINUX_HAVE_SET_NLINK
dnl If we are guaranteed that keyrings will work - that is
dnl a) The kernel has keyrings enabled

View File

@ -439,7 +439,11 @@ void
vattr2inode(struct inode *ip, struct vattr *vp)
{
ip->i_ino = vp->va_nodeid;
#ifdef HAVE_SET_NLINK
set_nlink(ip, vp->va_nlink);
#else
ip->i_nlink = vp->va_nlink;
#endif
ip->i_blocks = vp->va_blocks;
#ifdef STRUCT_INODE_HAS_I_BLKBITS
ip->i_blkbits = AFS_BLKBITS;

View File

@ -618,3 +618,15 @@ AC_DEFUN([LINUX_DOP_D_DELETE_TAKES_CONST], [
[define if dentry.d_op->d_delete takes a const argument],
[-Werror])
])
AC_DEFUN([LINUX_HAVE_SET_NLINK], [
AC_CHECK_LINUX_BUILD([for set_nlink],
[ac_cv_linux_have_set_nlink],
[#include <linux/fs.h>],
[struct inode _inode;
set_nlink(&_inode, 1);],
[HAVE_SET_NLINK],
[define if set_nlink exists],
[-Werror])
])