@@ -1300,6 +1300,7 @@ int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
1300
1300
struct smb_fattr fattr = {{0 }};
1301
1301
struct inode * inode = d_inode (path -> dentry );
1302
1302
struct user_namespace * user_ns = mnt_user_ns (path -> mnt );
1303
+ struct iattr newattrs ;
1303
1304
1304
1305
fattr .cf_uid = INVALID_UID ;
1305
1306
fattr .cf_gid = INVALID_GID ;
@@ -1309,12 +1310,23 @@ int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,
1309
1310
if (rc )
1310
1311
goto out ;
1311
1312
1312
- inode -> i_mode = (inode -> i_mode & ~0777 ) | (fattr .cf_mode & 0777 );
1313
- if (!uid_eq (fattr .cf_uid , INVALID_UID ))
1314
- inode -> i_uid = fattr .cf_uid ;
1315
- if (!gid_eq (fattr .cf_gid , INVALID_GID ))
1316
- inode -> i_gid = fattr .cf_gid ;
1317
- mark_inode_dirty (inode );
1313
+ newattrs .ia_valid = ATTR_CTIME ;
1314
+ if (!uid_eq (fattr .cf_uid , INVALID_UID )) {
1315
+ newattrs .ia_valid |= ATTR_UID ;
1316
+ newattrs .ia_uid = fattr .cf_uid ;
1317
+ }
1318
+ if (!gid_eq (fattr .cf_gid , INVALID_GID )) {
1319
+ newattrs .ia_valid |= ATTR_GID ;
1320
+ newattrs .ia_gid = fattr .cf_gid ;
1321
+ }
1322
+ newattrs .ia_valid |= ATTR_MODE ;
1323
+ newattrs .ia_mode = (inode -> i_mode & ~0777 ) | (fattr .cf_mode & 0777 );
1324
+
1325
+ inode_lock (inode );
1326
+ rc = notify_change (user_ns , path -> dentry , & newattrs , NULL );
1327
+ inode_unlock (inode );
1328
+ if (rc )
1329
+ goto out ;
1318
1330
1319
1331
ksmbd_vfs_remove_acl_xattrs (user_ns , path -> dentry );
1320
1332
/* Update posix acls */
0 commit comments