mirror of https://github.com/OpenIPC/firmware.git
44 lines
1.5 KiB
Diff
44 lines
1.5 KiB
Diff
diff -drupN a/fs/attr.c b/fs/attr.c
|
|
--- a/fs/attr.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/fs/attr.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -200,7 +200,7 @@ EXPORT_SYMBOL(setattr_copy);
|
|
* the file open for write, as there can be no conflicting delegation in
|
|
* that case.
|
|
*/
|
|
-int notify_change(struct dentry * dentry, struct iattr * attr, struct inode **delegated_inode)
|
|
+int notify_change2(struct vfsmount *mnt, struct dentry * dentry, struct iattr * attr, struct inode **delegated_inode)
|
|
{
|
|
struct inode *inode = dentry->d_inode;
|
|
umode_t mode = inode->i_mode;
|
|
@@ -224,7 +224,7 @@ int notify_change(struct dentry * dentry
|
|
return -EPERM;
|
|
|
|
if (!inode_owner_or_capable(inode)) {
|
|
- error = inode_permission(inode, MAY_WRITE);
|
|
+ error = inode_permission2(mnt, inode, MAY_WRITE);
|
|
if (error)
|
|
return error;
|
|
}
|
|
@@ -307,7 +307,9 @@ int notify_change(struct dentry * dentry
|
|
if (error)
|
|
return error;
|
|
|
|
- if (inode->i_op->setattr)
|
|
+ if (mnt && inode->i_op->setattr2)
|
|
+ error = inode->i_op->setattr2(mnt, dentry, attr);
|
|
+ else if (inode->i_op->setattr)
|
|
error = inode->i_op->setattr(dentry, attr);
|
|
else
|
|
error = simple_setattr(dentry, attr);
|
|
@@ -320,4 +322,10 @@ int notify_change(struct dentry * dentry
|
|
|
|
return error;
|
|
}
|
|
+EXPORT_SYMBOL(notify_change2);
|
|
+
|
|
+int notify_change(struct dentry * dentry, struct iattr * attr, struct inode **delegated_inode)
|
|
+{
|
|
+ return notify_change2(NULL, dentry, attr, delegated_inode);
|
|
+}
|
|
EXPORT_SYMBOL(notify_change);
|