FAILED: patch "[PATCH] ksmbd: add mnt_want_write to ksmbd vfs functions" failed to apply to 5.15-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 40b268d384a22276dca1450549f53eed60e21deb
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023062101-reason-capacity-fcfc@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 40b268d384a22276dca1450549f53eed60e21deb Mon Sep 17 00:00:00 2001
From: Namjae Jeon <[email protected]>
Date: Thu, 15 Jun 2023 15:56:32 +0900
Subject: [PATCH] ksmbd: add mnt_want_write to ksmbd vfs functions
ksmbd is doing write access using vfs helpers. There are the cases that mnt_want_write() is not called in vfs helper. This patch add missing mnt_want_write() to ksmbd vfs functions.
fs/smb/server/smb2pdu.c +11 -15
@@ -2249,7 +2249,7 @@ static int smb2_set_ea(struct smb2_ea_info *eabuf, unsigned int buf_len,/* delete the EA only when it exits */ if (rc >0 ) { rc =ksmbd_vfs_remove_xattr (idmap, - path->dentry, + path, attr_name);if (rc <0 ) {
@@ -2263,8 +2263,7 @@ static int smb2_set_ea(struct smb2_ea_info *eabuf, unsigned int buf_len,/* if the EA doesn't exist, just do nothing. */ rc =0 ; }else { - rc =ksmbd_vfs_setxattr (idmap, - path->dentry, attr_name, value, + rc =ksmbd_vfs_setxattr (idmap, path, attr_name, value,le16_to_cpu (eabuf->EaValueLength),0 );if (rc <0 ) { ksmbd_debug(SMB,
@@ -2321,8 +2320,7 @@ static noinline int smb2_set_stream_name_xattr(const struct path *path,return -EBADF ; } - rc =ksmbd_vfs_setxattr (idmap, path->dentry, - xattr_stream_name,NULL ,0 ,0 ); + rc =ksmbd_vfs_setxattr (idmap, path, xattr_stream_name,NULL ,0 ,0 );if (rc <0 )pr_err ("Failed to store XATTR stream name :%d\n" , rc);return 0 ;
@@ -2350,7 +2348,7 @@ static int smb2_remove_smb_xattrs(const struct path *path)if (!strncmp (name,XATTR_USER_PREFIX ,XATTR_USER_PREFIX_LEN ) && !strncmp (&name[XATTR_USER_PREFIX_LEN ],STREAM_PREFIX ,STREAM_PREFIX_LEN )) { - err =ksmbd_vfs_remove_xattr (idmap, path->dentry, + err =ksmbd_vfs_remove_xattr (idmap, path, name);if (err) ksmbd_debug(SMB, "remove xattr failed : %s\n",
@@ -2397,8 +2395,7 @@ static void smb2_new_xattrs(struct ksmbd_tree_connect *tcon, const struct path * da.flags =XATTR_DOSINFO_ATTRIB |XATTR_DOSINFO_CREATE_TIME |XATTR_DOSINFO_ITIME ; - rc =ksmbd_vfs_set_dos_attrib_xattr (mnt_idmap (path->mnt), - path->dentry, &da); + rc =ksmbd_vfs_set_dos_attrib_xattr (mnt_idmap (path->mnt), path, &da);if (rc)ksmbd_debug (SMB ,"failed to store file attribute into xattr\n" ); }
@@ -2972,7 +2969,7 @@ int smb2_open(struct ksmbd_work *work)struct inode *inode =d_inode (path.dentry); posix_acl_rc =ksmbd_vfs_inherit_posix_acl (idmap, - path.dentry, + &path,d_inode (path.dentry->d_parent));if (posix_acl_rc)ksmbd_debug (SMB ,"inherit posix acl failed : %d\n" , posix_acl_rc);
@@ -2988,7 +2985,7 @@ int smb2_open(struct ksmbd_work *work)if (rc) {if (posix_acl_rc)ksmbd_vfs_set_init_posix_acl (idmap, - path.dentry); + &path);if (test_share_config_flag (work->tcon->share_conf,KSMBD_SHARE_FLAG_ACL_XATTR )) {
@@ -3028,7 +3025,7 @@ int smb2_open(struct ksmbd_work *work) rc =ksmbd_vfs_set_sd_xattr (conn, idmap, - path.dentry, + &path, pntsd, pntsd_size);kfree (pntsd);
@@ -5464,7 +5461,7 @@ static int smb2_rename(struct ksmbd_work *work, goto out; rc =ksmbd_vfs_setxattr (file_mnt_idmap (fp->filp), - fp->filp->f_path.dentry, + &fp->filp->f_path, xattr_stream_name,NULL ,0 ,0 );if (rc <0 ) {
@@ -5629,8 +5626,7 @@ static int set_file_basic_info(struct ksmbd_file *fp, da.flags =XATTR_DOSINFO_ATTRIB |XATTR_DOSINFO_CREATE_TIME |XATTR_DOSINFO_ITIME ; - rc =ksmbd_vfs_set_dos_attrib_xattr (idmap, - filp->f_path.dentry, &da); + rc =ksmbd_vfs_set_dos_attrib_xattr (idmap, &filp->f_path, &da);if (rc)ksmbd_debug (SMB ,"failed to restore file attribute in EA\n" );
@@ -7485,7 +7481,7 @@ static inline int fsctl_set_sparse(struct ksmbd_work *work, u64 id, da.attr =le32_to_cpu (fp->f_ci->m_fattr); ret =ksmbd_vfs_set_dos_attrib_xattr (idmap, - fp->filp->f_path.dentry, &da); + &fp->filp->f_path, &da);if (ret) fp->f_ci->m_fattr = old_fattr; }
fs/smb/server/smbacl.c +4 -6
@@ -1162,8 +1162,7 @@ int smb_inherit_dacl(struct ksmbd_conn *conn, pntsd_size +=sizeof (struct smb_acl ) + nt_size; } -ksmbd_vfs_set_sd_xattr (conn, idmap, - path->dentry, pntsd, pntsd_size); +ksmbd_vfs_set_sd_xattr (conn, idmap, path, pntsd, pntsd_size);kfree (pntsd); }
@@ -1383,7 +1382,7 @@ int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon, newattrs.ia_valid |=ATTR_MODE ; newattrs.ia_mode = (inode->i_mode & ~0777 ) | (fattr.cf_mode &0777 ); -ksmbd_vfs_remove_acl_xattrs (idmap, path->dentry); +ksmbd_vfs_remove_acl_xattrs (idmap, path);/* Update posix acls */ if (IS_ENABLED (CONFIG_FS_POSIX_ACL ) && fattr.cf_dacls) { rc = set_posix_acl(idmap, path->dentry,
@@ -1414,9 +1413,8 @@ int set_info_sec(struct ksmbd_conn *conn, struct ksmbd_tree_connect *tcon,if (test_share_config_flag (tcon->share_conf,KSMBD_SHARE_FLAG_ACL_XATTR )) {/* Update WinACL in xattr */ -ksmbd_vfs_remove_sd_xattrs (idmap, path->dentry); -ksmbd_vfs_set_sd_xattr (conn, idmap, - path->dentry, pntsd, ntsd_len); +ksmbd_vfs_remove_sd_xattrs (idmap, path); +ksmbd_vfs_set_sd_xattr (conn, idmap, path, pntsd, ntsd_len); } out:
fs/smb/server/vfs.c +93 -24
346 lines not on this page · raw message
fs/smb/server/vfs.h +8 -9
@@ -108,12 +108,12 @@ ssize_t ksmbd_vfs_casexattr_len(struct mnt_idmap *idmap, struct dentry *dentry, char *attr_name, int attr_name_len);int ksmbd_vfs_setxattr (struct mnt_idmap *idmap, -struct dentry *dentry,const char *attr_name, +const struct path *path,const char *attr_name,void *attr_value,size_t attr_size,int flags);int ksmbd_vfs_xattr_stream_name (char *stream_name,char **xattr_stream_name,size_t *xattr_stream_name_size,int s_type);int ksmbd_vfs_remove_xattr (struct mnt_idmap *idmap, -struct dentry *dentry,char *attr_name); +const struct path *path,char *attr_name);int ksmbd_vfs_kern_path_locked (struct ksmbd_work *work,char *name,unsigned int flags,struct path *path,bool caseless);
@@ -139,26 +139,25 @@ void ksmbd_vfs_posix_lock_wait(struct file_lock *flock);int ksmbd_vfs_posix_lock_wait_timeout (struct file_lock *flock,long timeout);void ksmbd_vfs_posix_lock_unblock (struct file_lock *flock);int ksmbd_vfs_remove_acl_xattrs (struct mnt_idmap *idmap, -struct dentry *dentry); -int ksmbd_vfs_remove_sd_xattrs (struct mnt_idmap *idmap, -struct dentry *dentry); +const struct path *path); +int ksmbd_vfs_remove_sd_xattrs (struct mnt_idmap *idmap,const struct path *path);int ksmbd_vfs_set_sd_xattr (struct ksmbd_conn *conn,struct mnt_idmap *idmap, -struct dentry *dentry, +const struct path *path,struct smb_ntsd *pntsd,int len);int ksmbd_vfs_get_sd_xattr (struct ksmbd_conn *conn,struct mnt_idmap *idmap,struct dentry *dentry,struct smb_ntsd **pntsd);int ksmbd_vfs_set_dos_attrib_xattr (struct mnt_idmap *idmap, -struct dentry *dentry, +const struct path *path,struct xattr_dos_attrib *da);int ksmbd_vfs_get_dos_attrib_xattr (struct mnt_idmap *idmap,struct dentry *dentry,struct xattr_dos_attrib *da);int ksmbd_vfs_set_init_posix_acl (struct mnt_idmap *idmap, -struct dentry *dentry); +struct path *path);int ksmbd_vfs_inherit_posix_acl (struct mnt_idmap *idmap, -struct dentry *dentry, +struct path *path,struct inode *parent_inode);#endif /* __KSMBD_VFS_H__ */
fs/smb/server/vfs_cache.c +1 -1
@@ -252,7 +252,7 @@ static void __ksmbd_inode_close(struct ksmbd_file *fp)if (ksmbd_stream_fd (fp) && (ci->m_flags &S_DEL_ON_CLS_STREAM )) { ci->m_flags &= ~S_DEL_ON_CLS_STREAM ; err =ksmbd_vfs_remove_xattr (file_mnt_idmap (filp), - filp->f_path.dentry, + &filp->f_path, fp->stream.name);if (err) pr_err("remove xattr failed : %s\n",