AC_CHECK_LINUX_FUNC([i_size_read],
[#include <linux/fs.h>],
[i_size_read(NULL);])
+ AC_CHECK_LINUX_FUNC([inode_setattr],
+ [#include <linux/fs.h>],
+ [inode_setattr(NULL, NULL);])
AC_CHECK_LINUX_FUNC([kernel_setsockopt],
[#include <linux/net.h>],
[kernel_setsockopt(NULL, 0, 0, NULL, 0);])
up(&ip->i_sem);
#endif
}
+
+static inline int
+afs_inode_setattr(struct osi_file *afile, struct iattr *newattrs) {
+
+ int code = 0;
+ struct inode *inode = OSIFILE_INODE(afile);
+#if !defined(HAVE_LINUX_INODE_SETATTR)
+ code = inode->i_op->setattr(afile->filp->f_dentry, newattrs);
+#elif defined(INODE_SETATTR_NOT_VOID)
+ if (inode->i_op && inode->i_op->setattr)
+ code = inode->i_op->setattr(afile->filp->f_dentry, newattrs);
+ else
+ code = inode_setattr(inode, newattrs);
+#else
+ inode_setattr(inode, newattrs);
+#endif
+ return code;
+}
/* avoid notify_change() since it wants to update dentry->d_parent */
code = inode_change_ok(inode, &newattrs);
- if (!code) {
-#ifdef INODE_SETATTR_NOT_VOID
- if (inode->i_op && inode->i_op->setattr)
- code = inode->i_op->setattr(afile->filp->f_dentry, &newattrs);
- else
- code = inode_setattr(inode, &newattrs);
-#else
- inode_setattr(inode, &newattrs);
-#endif
- }
+ if (!code)
+ code = afs_inode_setattr(afile, &newattrs);
if (!code)
truncate_inode_pages(&inode->i_data, asize);
code = -code;