|
Paulo Alcantara |
9c7ee2 |
From: Volker Lendecke <vl@samba.org>
|
|
Paulo Alcantara |
9c7ee2 |
Date: Fri, 25 Nov 2022 12:26:00 +0100
|
|
Paulo Alcantara |
9c7ee2 |
Subject: [PATCH] cifs: Add "extbuf" and "extbuflen" args to smb2_compound_op()
|
|
Paulo Alcantara |
9c7ee2 |
Git-commit: 83fb8abec29383eb0cf35495d21669e38548771b
|
|
Paulo Alcantara |
9c7ee2 |
References: bsc#1193629
|
|
Paulo Alcantara |
9c7ee2 |
Patch-mainline: v6.1
|
|
Paulo Alcantara |
9c7ee2 |
|
|
Paulo Alcantara |
9c7ee2 |
Will carry the variable-sized reply from SMB_FIND_FILE_POSIX_INFO
|
|
Paulo Alcantara |
9c7ee2 |
|
|
Paulo Alcantara |
9c7ee2 |
Signed-off-by: Volker Lendecke <vl@samba.org>
|
|
Paulo Alcantara |
9c7ee2 |
Reviewed-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
|
|
Paulo Alcantara |
9c7ee2 |
Signed-off-by: Steve French <stfrench@microsoft.com>
|
|
Paulo Alcantara |
9c7ee2 |
Acked-by: Paulo Alcantara <palcantara@suse.de>
|
|
Paulo Alcantara |
9c7ee2 |
---
|
|
Paulo Alcantara |
9c7ee2 |
fs/cifs/smb2inode.c | 23 ++++++++++++-----------
|
|
Paulo Alcantara |
9c7ee2 |
1 file changed, 12 insertions(+), 11 deletions(-)
|
|
Paulo Alcantara |
9c7ee2 |
|
|
Paulo Alcantara |
9c7ee2 |
diff --git a/fs/cifs/smb2inode.c b/fs/cifs/smb2inode.c
|
|
Paulo Alcantara |
9c7ee2 |
index 68e08c85fbb8..1be86ba950b3 100644
|
|
Paulo Alcantara |
9c7ee2 |
--- a/fs/cifs/smb2inode.c
|
|
Paulo Alcantara |
9c7ee2 |
+++ b/fs/cifs/smb2inode.c
|
|
Paulo Alcantara |
9c7ee2 |
@@ -59,6 +59,7 @@ static int smb2_compound_op(const unsigned int xid, struct cifs_tcon *tcon,
|
|
Paulo Alcantara |
9c7ee2 |
struct cifs_sb_info *cifs_sb, const char *full_path,
|
|
Paulo Alcantara |
9c7ee2 |
__u32 desired_access, __u32 create_disposition, __u32 create_options,
|
|
Paulo Alcantara |
9c7ee2 |
umode_t mode, void *ptr, int command, struct cifsFileInfo *cfile,
|
|
Paulo Alcantara |
9c7ee2 |
+ __u8 **extbuf, size_t *extbuflen,
|
|
Paulo Alcantara |
9c7ee2 |
struct kvec *err_iov, int *err_buftype)
|
|
Paulo Alcantara |
9c7ee2 |
{
|
|
Paulo Alcantara |
9c7ee2 |
struct cop_vars *vars = NULL;
|
|
Paulo Alcantara |
9c7ee2 |
@@ -539,7 +540,7 @@ int smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
|
|
Paulo Alcantara |
9c7ee2 |
cifs_get_readable_path(tcon, full_path, &cfile);
|
|
Paulo Alcantara |
9c7ee2 |
rc = smb2_compound_op(xid, tcon, cifs_sb, full_path, FILE_READ_ATTRIBUTES, FILE_OPEN,
|
|
Paulo Alcantara |
9c7ee2 |
create_options, ACL_NO_MODE, data, SMB2_OP_QUERY_INFO, cfile,
|
|
Paulo Alcantara |
9c7ee2 |
- err_iov, err_buftype);
|
|
Paulo Alcantara |
9c7ee2 |
+ NULL, NULL, err_iov, err_buftype);
|
|
Paulo Alcantara |
9c7ee2 |
if (rc == -EOPNOTSUPP) {
|
|
Paulo Alcantara |
9c7ee2 |
if (err_iov[0].iov_base && err_buftype[0] != CIFS_NO_BUFFER &&
|
|
Paulo Alcantara |
9c7ee2 |
((struct smb2_hdr *)err_iov[0].iov_base)->Command == SMB2_CREATE &&
|
|
Paulo Alcantara |
9c7ee2 |
@@ -555,7 +556,7 @@ int smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
|
|
Paulo Alcantara |
9c7ee2 |
cifs_get_readable_path(tcon, full_path, &cfile);
|
|
Paulo Alcantara |
9c7ee2 |
rc = smb2_compound_op(xid, tcon, cifs_sb, full_path, FILE_READ_ATTRIBUTES,
|
|
Paulo Alcantara |
9c7ee2 |
FILE_OPEN, create_options, ACL_NO_MODE, data,
|
|
Paulo Alcantara |
9c7ee2 |
- SMB2_OP_QUERY_INFO, cfile, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
+ SMB2_OP_QUERY_INFO, cfile, NULL, NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
}
|
|
Paulo Alcantara |
9c7ee2 |
|
|
Paulo Alcantara |
9c7ee2 |
out:
|
|
Paulo Alcantara |
9c7ee2 |
@@ -589,7 +590,7 @@ int smb311_posix_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
|
|
Paulo Alcantara |
9c7ee2 |
cifs_get_readable_path(tcon, full_path, &cfile);
|
|
Paulo Alcantara |
9c7ee2 |
rc = smb2_compound_op(xid, tcon, cifs_sb, full_path, FILE_READ_ATTRIBUTES, FILE_OPEN,
|
|
Paulo Alcantara |
9c7ee2 |
create_options, ACL_NO_MODE, data, SMB2_OP_POSIX_QUERY_INFO, cfile,
|
|
Paulo Alcantara |
9c7ee2 |
- err_iov, err_buftype);
|
|
Paulo Alcantara |
9c7ee2 |
+ NULL, NULL, err_iov, err_buftype);
|
|
Paulo Alcantara |
9c7ee2 |
if (rc == -EOPNOTSUPP) {
|
|
Paulo Alcantara |
9c7ee2 |
/* BB TODO: When support for special files added to Samba re-verify this path */
|
|
Paulo Alcantara |
9c7ee2 |
if (err_iov[0].iov_base && err_buftype[0] != CIFS_NO_BUFFER &&
|
|
Paulo Alcantara |
9c7ee2 |
@@ -606,7 +607,7 @@ int smb311_posix_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
|
|
Paulo Alcantara |
9c7ee2 |
cifs_get_readable_path(tcon, full_path, &cfile);
|
|
Paulo Alcantara |
9c7ee2 |
rc = smb2_compound_op(xid, tcon, cifs_sb, full_path, FILE_READ_ATTRIBUTES,
|
|
Paulo Alcantara |
9c7ee2 |
FILE_OPEN, create_options, ACL_NO_MODE, data,
|
|
Paulo Alcantara |
9c7ee2 |
- SMB2_OP_POSIX_QUERY_INFO, cfile, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
+ SMB2_OP_POSIX_QUERY_INFO, cfile, NULL, NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
}
|
|
Paulo Alcantara |
9c7ee2 |
|
|
Paulo Alcantara |
9c7ee2 |
out:
|
|
Paulo Alcantara |
9c7ee2 |
@@ -624,7 +625,7 @@ smb2_mkdir(const unsigned int xid, struct inode *parent_inode, umode_t mode,
|
|
Paulo Alcantara |
9c7ee2 |
return smb2_compound_op(xid, tcon, cifs_sb, name,
|
|
Paulo Alcantara |
9c7ee2 |
FILE_WRITE_ATTRIBUTES, FILE_CREATE,
|
|
Paulo Alcantara |
9c7ee2 |
CREATE_NOT_FILE, mode, NULL, SMB2_OP_MKDIR,
|
|
Paulo Alcantara |
9c7ee2 |
- NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
+ NULL, NULL, NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
}
|
|
Paulo Alcantara |
9c7ee2 |
|
|
Paulo Alcantara |
9c7ee2 |
void
|
|
Paulo Alcantara |
9c7ee2 |
@@ -646,7 +647,7 @@ smb2_mkdir_setinfo(struct inode *inode, const char *name,
|
|
Paulo Alcantara |
9c7ee2 |
tmprc = smb2_compound_op(xid, tcon, cifs_sb, name,
|
|
Paulo Alcantara |
9c7ee2 |
FILE_WRITE_ATTRIBUTES, FILE_CREATE,
|
|
Paulo Alcantara |
9c7ee2 |
CREATE_NOT_FILE, ACL_NO_MODE,
|
|
Paulo Alcantara |
9c7ee2 |
- &data, SMB2_OP_SET_INFO, cfile, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
+ &data, SMB2_OP_SET_INFO, cfile, NULL, NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
if (tmprc == 0)
|
|
Paulo Alcantara |
9c7ee2 |
cifs_i->cifsAttrs = dosattrs;
|
|
Paulo Alcantara |
9c7ee2 |
}
|
|
Paulo Alcantara |
9c7ee2 |
@@ -658,7 +659,7 @@ smb2_rmdir(const unsigned int xid, struct cifs_tcon *tcon, const char *name,
|
|
Paulo Alcantara |
9c7ee2 |
drop_cached_dir_by_name(xid, tcon, name, cifs_sb);
|
|
Paulo Alcantara |
9c7ee2 |
return smb2_compound_op(xid, tcon, cifs_sb, name, DELETE, FILE_OPEN,
|
|
Paulo Alcantara |
9c7ee2 |
CREATE_NOT_FILE, ACL_NO_MODE,
|
|
Paulo Alcantara |
9c7ee2 |
- NULL, SMB2_OP_RMDIR, NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
+ NULL, SMB2_OP_RMDIR, NULL, NULL, NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
}
|
|
Paulo Alcantara |
9c7ee2 |
|
|
Paulo Alcantara |
9c7ee2 |
int
|
|
Paulo Alcantara |
9c7ee2 |
@@ -667,7 +668,7 @@ smb2_unlink(const unsigned int xid, struct cifs_tcon *tcon, const char *name,
|
|
Paulo Alcantara |
9c7ee2 |
{
|
|
Paulo Alcantara |
9c7ee2 |
return smb2_compound_op(xid, tcon, cifs_sb, name, DELETE, FILE_OPEN,
|
|
Paulo Alcantara |
9c7ee2 |
CREATE_DELETE_ON_CLOSE | OPEN_REPARSE_POINT,
|
|
Paulo Alcantara |
9c7ee2 |
- ACL_NO_MODE, NULL, SMB2_OP_DELETE, NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
+ ACL_NO_MODE, NULL, SMB2_OP_DELETE, NULL, NULL, NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
}
|
|
Paulo Alcantara |
9c7ee2 |
|
|
Paulo Alcantara |
9c7ee2 |
static int
|
|
Paulo Alcantara |
9c7ee2 |
@@ -686,7 +687,7 @@ smb2_set_path_attr(const unsigned int xid, struct cifs_tcon *tcon,
|
|
Paulo Alcantara |
9c7ee2 |
}
|
|
Paulo Alcantara |
9c7ee2 |
rc = smb2_compound_op(xid, tcon, cifs_sb, from_name, access,
|
|
Paulo Alcantara |
9c7ee2 |
FILE_OPEN, 0, ACL_NO_MODE, smb2_to_name,
|
|
Paulo Alcantara |
9c7ee2 |
- command, cfile, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
+ command, cfile, NULL, NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
smb2_rename_path:
|
|
Paulo Alcantara |
9c7ee2 |
kfree(smb2_to_name);
|
|
Paulo Alcantara |
9c7ee2 |
return rc;
|
|
Paulo Alcantara |
9c7ee2 |
@@ -727,7 +728,7 @@ smb2_set_path_size(const unsigned int xid, struct cifs_tcon *tcon,
|
|
Paulo Alcantara |
9c7ee2 |
cifs_get_writable_path(tcon, full_path, FIND_WR_ANY, &cfile);
|
|
Paulo Alcantara |
9c7ee2 |
return smb2_compound_op(xid, tcon, cifs_sb, full_path,
|
|
Paulo Alcantara |
9c7ee2 |
FILE_WRITE_DATA, FILE_OPEN, 0, ACL_NO_MODE,
|
|
Paulo Alcantara |
9c7ee2 |
- &eof, SMB2_OP_SET_EOF, cfile, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
+ &eof, SMB2_OP_SET_EOF, cfile, NULL, NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
}
|
|
Paulo Alcantara |
9c7ee2 |
|
|
Paulo Alcantara |
9c7ee2 |
int
|
|
Paulo Alcantara |
9c7ee2 |
@@ -754,7 +755,7 @@ smb2_set_file_info(struct inode *inode, const char *full_path,
|
|
Paulo Alcantara |
9c7ee2 |
rc = smb2_compound_op(xid, tcon, cifs_sb, full_path,
|
|
Paulo Alcantara |
9c7ee2 |
FILE_WRITE_ATTRIBUTES, FILE_OPEN,
|
|
Paulo Alcantara |
9c7ee2 |
0, ACL_NO_MODE, buf, SMB2_OP_SET_INFO, cfile,
|
|
Paulo Alcantara |
9c7ee2 |
- NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
+ NULL, NULL, NULL, NULL);
|
|
Paulo Alcantara |
9c7ee2 |
cifs_put_tlink(tlink);
|
|
Paulo Alcantara |
9c7ee2 |
return rc;
|
|
Paulo Alcantara |
9c7ee2 |
}
|
|
Paulo Alcantara |
9c7ee2 |
--
|
|
Paulo Alcantara |
9c7ee2 |
2.39.0
|
|
Paulo Alcantara |
9c7ee2 |
|
|
Paulo Alcantara |
9c7ee2 |
|