Linux commit
5955102c, in preparation for future work, introduced
wrapper functions to lock/unlock inode mutexes. This is to
prepare for converting it to a read-write semaphore, so that
lookup can be done with only the shared lock held.
Adopt the afs_linux_*lock_inode() functions accordingly, and
convert afs_linux_fsync() to using those wrappers, since the
FOP_FSYNC_TAKES_RANGE case appears to be the current case.
Amusingly, afs_linux_*lock_inode() already have a branch to
handle the case when inode serialization is protected by a
semaphore; it seems that this is going to come full-circle.
Change-Id: Ia5a194acc559de21808655ef066151a0a3826364
Reviewed-on: https://gerrit.openafs.org/12268
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Joe Gorse <jhgorse@gmail.com>
Tested-by: Joe Gorse <jhgorse@gmail.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
AC_CHECK_LINUX_FUNC([inode_nohighmem],
[#include <linux/fs.h>],
[inode_nohighmem(NULL);])
+ AC_CHECK_LINUX_FUNC([inode_lock],
+ [#include <linux/fs.h>],
+ [inode_lock(NULL);])
dnl Consequences - things which get set as a result of the
dnl above tests
static inline void
afs_linux_lock_inode(struct inode *ip) {
-#ifdef STRUCT_INODE_HAS_I_MUTEX
+#if defined(HAVE_LINUX_INODE_LOCK)
+ inode_lock(ip);
+#elif defined(STRUCT_INODE_HAS_I_MUTEX)
mutex_lock(&ip->i_mutex);
#else
down(&ip->i_sem);
static inline void
afs_linux_unlock_inode(struct inode *ip) {
-#ifdef STRUCT_INODE_HAS_I_MUTEX
+#if defined(HAVE_LINUX_INODE_LOCK)
+ inode_unlock(ip);
+#elif defined(STRUCT_INODE_HAS_I_MUTEX)
mutex_unlock(&ip->i_mutex);
#else
up(&ip->i_sem);
cred_t *credp = crref();
#if defined(FOP_FSYNC_TAKES_RANGE)
- mutex_lock(&ip->i_mutex);
+ afs_linux_lock_inode(ip);
#endif
AFS_GLOCK();
code = afs_fsync(VTOAFS(ip), credp);
AFS_GUNLOCK();
#if defined(FOP_FSYNC_TAKES_RANGE)
- mutex_unlock(&ip->i_mutex);
+ afs_linux_unlock_inode(ip);
#endif
crfree(credp);
return afs_convert_code(code);