Use setattr_preapre() as inode_change_ok() was removed in v4.8-rc1

Instead, we can call setattr_prepare() directly. We provide a fallback
for older kernels.

Signed-off-by: Auke Kok <auke.kok@versity.com>
This commit is contained in:
Auke Kok
2023-05-10 19:23:40 -04:00
parent 1f0a08eacb
commit f0de59a9a3
3 changed files with 19 additions and 2 deletions

View File

@@ -64,6 +64,15 @@ ifneq (,$(shell grep 'static inline bool RBNAME.*_compute_max' include/linux/rbt
ccflags-y += -DKC_RB_TREE_AUGMENTED_COMPUTE_MAX
endif
#
# v4.8-rc1-29-g31051c85b5e2
#
# inode_change_ok() removed - replace with setattr_prepare()
#
ifneq (,$(shell grep 'extern int setattr_prepare' include/linux/fs.h))
ccflags-y += -DKC_SETATTR_PREPARE
endif
#
# v4.15-rc3-4-gae5e165d855d
#

View File

@@ -467,8 +467,7 @@ retry:
SCOUTFS_LKF_REFRESH_INODE, inode, &lock);
if (ret)
return ret;
ret = inode_change_ok(inode, attr);
ret = setattr_prepare(dentry, attr);
if (ret)
goto out;

View File

@@ -99,4 +99,13 @@ static inline int dir_emit_dots(struct file *file, void *dirent,
#define d_materialise_unique(dentry, inode) d_splice_alias(inode, dentry)
#endif
/*
* v4.8-rc1-29-g31051c85b5e2
*
* fall back to inode_change_ok() if setattr_prepare() isn't available
*/
#ifndef KC_SETATTR_PREPARE
#define setattr_prepare(dentry, attr) inode_change_ok(d_inode(dentry), attr)
#endif
#endif