Commit 8b4e285d authored by Paulo Alcantara's avatar Paulo Alcantara Committed by Steve French

smb: client: move some params to cifs_open_info_data

Instead of passing @adjust_tz and some reparse point related fields as
parameters in ->query_path_info() and
{smb311_posix,cifs}_info_to_fattr() calls, move them to
cifs_open_info_data structure as they can be easily accessed through
@data.

No functional changes.
Signed-off-by: default avatarPaulo Alcantara (SUSE) <pc@manguebit.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent ce04127c
...@@ -186,6 +186,12 @@ struct cifs_cred { ...@@ -186,6 +186,12 @@ struct cifs_cred {
}; };
struct cifs_open_info_data { struct cifs_open_info_data {
bool adjust_tz;
union {
bool reparse_point;
bool symlink;
};
__u32 reparse_tag;
char *symlink_target; char *symlink_target;
union { union {
struct smb2_file_all_info fi; struct smb2_file_all_info fi;
...@@ -318,9 +324,11 @@ struct smb_version_operations { ...@@ -318,9 +324,11 @@ struct smb_version_operations {
int (*is_path_accessible)(const unsigned int, struct cifs_tcon *, int (*is_path_accessible)(const unsigned int, struct cifs_tcon *,
struct cifs_sb_info *, const char *); struct cifs_sb_info *, const char *);
/* query path data from the server */ /* query path data from the server */
int (*query_path_info)(const unsigned int xid, struct cifs_tcon *tcon, int (*query_path_info)(const unsigned int xid,
struct cifs_sb_info *cifs_sb, const char *full_path, struct cifs_tcon *tcon,
struct cifs_open_info_data *data, bool *adjust_tz, bool *reparse); struct cifs_sb_info *cifs_sb,
const char *full_path,
struct cifs_open_info_data *data);
/* query file data from the server */ /* query file data from the server */
int (*query_file_info)(const unsigned int xid, struct cifs_tcon *tcon, int (*query_file_info)(const unsigned int xid, struct cifs_tcon *tcon,
struct cifsFileInfo *cfile, struct cifs_open_info_data *data); struct cifsFileInfo *cfile, struct cifs_open_info_data *data);
......
...@@ -632,10 +632,11 @@ static int cifs_sfu_mode(struct cifs_fattr *fattr, const unsigned char *path, ...@@ -632,10 +632,11 @@ static int cifs_sfu_mode(struct cifs_fattr *fattr, const unsigned char *path,
} }
/* Fill a cifs_fattr struct with info from POSIX info struct */ /* Fill a cifs_fattr struct with info from POSIX info struct */
static void smb311_posix_info_to_fattr(struct cifs_fattr *fattr, struct cifs_open_info_data *data, static void smb311_posix_info_to_fattr(struct cifs_fattr *fattr,
struct cifs_open_info_data *data,
struct cifs_sid *owner, struct cifs_sid *owner,
struct cifs_sid *group, struct cifs_sid *group,
struct super_block *sb, bool adjust_tz, bool symlink) struct super_block *sb)
{ {
struct smb311_posix_qinfo *info = &data->posix_fi; struct smb311_posix_qinfo *info = &data->posix_fi;
struct cifs_sb_info *cifs_sb = CIFS_SB(sb); struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
...@@ -655,7 +656,7 @@ static void smb311_posix_info_to_fattr(struct cifs_fattr *fattr, struct cifs_ope ...@@ -655,7 +656,7 @@ static void smb311_posix_info_to_fattr(struct cifs_fattr *fattr, struct cifs_ope
fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime); fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime);
fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime); fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime);
if (adjust_tz) { if (data->adjust_tz) {
fattr->cf_ctime.tv_sec += tcon->ses->server->timeAdj; fattr->cf_ctime.tv_sec += tcon->ses->server->timeAdj;
fattr->cf_mtime.tv_sec += tcon->ses->server->timeAdj; fattr->cf_mtime.tv_sec += tcon->ses->server->timeAdj;
} }
...@@ -669,7 +670,7 @@ static void smb311_posix_info_to_fattr(struct cifs_fattr *fattr, struct cifs_ope ...@@ -669,7 +670,7 @@ static void smb311_posix_info_to_fattr(struct cifs_fattr *fattr, struct cifs_ope
/* The srv fs device id is overridden on network mount so setting rdev isn't needed here */ /* The srv fs device id is overridden on network mount so setting rdev isn't needed here */
/* fattr->cf_rdev = le32_to_cpu(info->DeviceId); */ /* fattr->cf_rdev = le32_to_cpu(info->DeviceId); */
if (symlink) { if (data->symlink) {
fattr->cf_mode |= S_IFLNK; fattr->cf_mode |= S_IFLNK;
fattr->cf_dtype = DT_LNK; fattr->cf_dtype = DT_LNK;
fattr->cf_symlink_target = data->symlink_target; fattr->cf_symlink_target = data->symlink_target;
...@@ -690,13 +691,14 @@ static void smb311_posix_info_to_fattr(struct cifs_fattr *fattr, struct cifs_ope ...@@ -690,13 +691,14 @@ static void smb311_posix_info_to_fattr(struct cifs_fattr *fattr, struct cifs_ope
fattr->cf_mode, fattr->cf_uniqueid, fattr->cf_nlink); fattr->cf_mode, fattr->cf_uniqueid, fattr->cf_nlink);
} }
static void cifs_open_info_to_fattr(struct cifs_fattr *fattr, struct cifs_open_info_data *data, static void cifs_open_info_to_fattr(struct cifs_fattr *fattr,
struct super_block *sb, bool adjust_tz, bool symlink, struct cifs_open_info_data *data,
u32 reparse_tag) struct super_block *sb)
{ {
struct smb2_file_all_info *info = &data->fi; struct smb2_file_all_info *info = &data->fi;
struct cifs_sb_info *cifs_sb = CIFS_SB(sb); struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb); struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
u32 reparse_tag = data->reparse_tag;
memset(fattr, 0, sizeof(*fattr)); memset(fattr, 0, sizeof(*fattr));
fattr->cf_cifsattrs = le32_to_cpu(info->Attributes); fattr->cf_cifsattrs = le32_to_cpu(info->Attributes);
...@@ -711,7 +713,7 @@ static void cifs_open_info_to_fattr(struct cifs_fattr *fattr, struct cifs_open_i ...@@ -711,7 +713,7 @@ static void cifs_open_info_to_fattr(struct cifs_fattr *fattr, struct cifs_open_i
fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime); fattr->cf_ctime = cifs_NTtimeToUnix(info->ChangeTime);
fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime); fattr->cf_mtime = cifs_NTtimeToUnix(info->LastWriteTime);
if (adjust_tz) { if (data->adjust_tz) {
fattr->cf_ctime.tv_sec += tcon->ses->server->timeAdj; fattr->cf_ctime.tv_sec += tcon->ses->server->timeAdj;
fattr->cf_mtime.tv_sec += tcon->ses->server->timeAdj; fattr->cf_mtime.tv_sec += tcon->ses->server->timeAdj;
} }
...@@ -736,7 +738,7 @@ static void cifs_open_info_to_fattr(struct cifs_fattr *fattr, struct cifs_open_i ...@@ -736,7 +738,7 @@ static void cifs_open_info_to_fattr(struct cifs_fattr *fattr, struct cifs_open_i
} else if (reparse_tag == IO_REPARSE_TAG_LX_BLK) { } else if (reparse_tag == IO_REPARSE_TAG_LX_BLK) {
fattr->cf_mode |= S_IFBLK | cifs_sb->ctx->file_mode; fattr->cf_mode |= S_IFBLK | cifs_sb->ctx->file_mode;
fattr->cf_dtype = DT_BLK; fattr->cf_dtype = DT_BLK;
} else if (symlink || reparse_tag == IO_REPARSE_TAG_SYMLINK || } else if (data->symlink || reparse_tag == IO_REPARSE_TAG_SYMLINK ||
reparse_tag == IO_REPARSE_TAG_NFS) { reparse_tag == IO_REPARSE_TAG_NFS) {
fattr->cf_mode = S_IFLNK; fattr->cf_mode = S_IFLNK;
fattr->cf_dtype = DT_LNK; fattr->cf_dtype = DT_LNK;
...@@ -789,8 +791,6 @@ cifs_get_file_info(struct file *filp) ...@@ -789,8 +791,6 @@ cifs_get_file_info(struct file *filp)
struct cifsFileInfo *cfile = filp->private_data; struct cifsFileInfo *cfile = filp->private_data;
struct cifs_tcon *tcon = tlink_tcon(cfile->tlink); struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
struct TCP_Server_Info *server = tcon->ses->server; struct TCP_Server_Info *server = tcon->ses->server;
bool symlink = false;
u32 tag = 0;
if (!server->ops->query_file_info) if (!server->ops->query_file_info)
return -ENOSYS; return -ENOSYS;
...@@ -800,11 +800,12 @@ cifs_get_file_info(struct file *filp) ...@@ -800,11 +800,12 @@ cifs_get_file_info(struct file *filp)
switch (rc) { switch (rc) {
case 0: case 0:
/* TODO: add support to query reparse tag */ /* TODO: add support to query reparse tag */
data.adjust_tz = false;
if (data.symlink_target) { if (data.symlink_target) {
symlink = true; data.symlink = true;
tag = IO_REPARSE_TAG_SYMLINK; data.reparse_tag = IO_REPARSE_TAG_SYMLINK;
} }
cifs_open_info_to_fattr(&fattr, &data, inode->i_sb, false, symlink, tag); cifs_open_info_to_fattr(&fattr, &data, inode->i_sb);
break; break;
case -EREMOTE: case -EREMOTE:
cifs_create_dfs_fattr(&fattr, inode->i_sb); cifs_create_dfs_fattr(&fattr, inode->i_sb);
...@@ -968,14 +969,11 @@ int cifs_get_inode_info(struct inode **inode, const char *full_path, ...@@ -968,14 +969,11 @@ int cifs_get_inode_info(struct inode **inode, const char *full_path,
struct TCP_Server_Info *server; struct TCP_Server_Info *server;
struct tcon_link *tlink; struct tcon_link *tlink;
struct cifs_sb_info *cifs_sb = CIFS_SB(sb); struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
bool adjust_tz = false;
struct cifs_fattr fattr = {0}; struct cifs_fattr fattr = {0};
bool is_reparse_point = false;
struct cifs_open_info_data tmp_data = {}; struct cifs_open_info_data tmp_data = {};
void *smb1_backup_rsp_buf = NULL; void *smb1_backup_rsp_buf = NULL;
int rc = 0; int rc = 0;
int tmprc = 0; int tmprc = 0;
__u32 reparse_tag = 0;
tlink = cifs_sb_tlink(cifs_sb); tlink = cifs_sb_tlink(cifs_sb);
if (IS_ERR(tlink)) if (IS_ERR(tlink))
...@@ -992,8 +990,8 @@ int cifs_get_inode_info(struct inode **inode, const char *full_path, ...@@ -992,8 +990,8 @@ int cifs_get_inode_info(struct inode **inode, const char *full_path,
cifs_dbg(FYI, "No need to revalidate cached inode sizes\n"); cifs_dbg(FYI, "No need to revalidate cached inode sizes\n");
goto out; goto out;
} }
rc = server->ops->query_path_info(xid, tcon, cifs_sb, full_path, &tmp_data, rc = server->ops->query_path_info(xid, tcon, cifs_sb,
&adjust_tz, &is_reparse_point); full_path, &tmp_data);
data = &tmp_data; data = &tmp_data;
} }
...@@ -1008,24 +1006,23 @@ int cifs_get_inode_info(struct inode **inode, const char *full_path, ...@@ -1008,24 +1006,23 @@ int cifs_get_inode_info(struct inode **inode, const char *full_path,
* since we have to check if its reparse tag matches a known * since we have to check if its reparse tag matches a known
* special file type e.g. symlink or fifo or char etc. * special file type e.g. symlink or fifo or char etc.
*/ */
if (is_reparse_point && data->symlink_target) { if (data->reparse_point && data->symlink_target) {
reparse_tag = IO_REPARSE_TAG_SYMLINK; data->reparse_tag = IO_REPARSE_TAG_SYMLINK;
} else if ((le32_to_cpu(data->fi.Attributes) & ATTR_REPARSE) && } else if ((le32_to_cpu(data->fi.Attributes) & ATTR_REPARSE) &&
server->ops->query_reparse_tag) { server->ops->query_reparse_tag) {
tmprc = server->ops->query_reparse_tag(xid, tcon, cifs_sb, full_path, tmprc = server->ops->query_reparse_tag(xid, tcon, cifs_sb, full_path,
&reparse_tag); &data->reparse_tag);
if (tmprc) cifs_dbg(FYI, "%s: query_reparse_tag: rc = %d\n", __func__, tmprc);
cifs_dbg(FYI, "%s: query_reparse_tag: rc = %d\n", __func__, tmprc);
if (server->ops->query_symlink) { if (server->ops->query_symlink) {
tmprc = server->ops->query_symlink(xid, tcon, cifs_sb, full_path, tmprc = server->ops->query_symlink(xid, tcon, cifs_sb,
full_path,
&data->symlink_target, &data->symlink_target,
is_reparse_point); data->reparse_point);
if (tmprc) cifs_dbg(FYI, "%s: query_symlink: rc = %d\n",
cifs_dbg(FYI, "%s: query_symlink: rc = %d\n", __func__, __func__, tmprc);
tmprc);
} }
} }
cifs_open_info_to_fattr(&fattr, data, sb, adjust_tz, is_reparse_point, reparse_tag); cifs_open_info_to_fattr(&fattr, data, sb);
break; break;
case -EREMOTE: case -EREMOTE:
/* DFS link, no metadata available on this server */ /* DFS link, no metadata available on this server */
...@@ -1168,9 +1165,7 @@ smb311_posix_get_inode_info(struct inode **inode, ...@@ -1168,9 +1165,7 @@ smb311_posix_get_inode_info(struct inode **inode,
struct cifs_tcon *tcon; struct cifs_tcon *tcon;
struct tcon_link *tlink; struct tcon_link *tlink;
struct cifs_sb_info *cifs_sb = CIFS_SB(sb); struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
bool adjust_tz = false;
struct cifs_fattr fattr = {0}; struct cifs_fattr fattr = {0};
bool symlink = false;
struct cifs_open_info_data data = {}; struct cifs_open_info_data data = {};
struct cifs_sid owner, group; struct cifs_sid owner, group;
int rc = 0; int rc = 0;
...@@ -1190,9 +1185,9 @@ smb311_posix_get_inode_info(struct inode **inode, ...@@ -1190,9 +1185,9 @@ smb311_posix_get_inode_info(struct inode **inode,
goto out; goto out;
} }
rc = smb311_posix_query_path_info(xid, tcon, cifs_sb, full_path, &data, rc = smb311_posix_query_path_info(xid, tcon, cifs_sb,
&owner, &group, &adjust_tz, full_path, &data,
&symlink); &owner, &group);
/* /*
* 2. Convert it to internal cifs metadata (fattr) * 2. Convert it to internal cifs metadata (fattr)
...@@ -1200,8 +1195,7 @@ smb311_posix_get_inode_info(struct inode **inode, ...@@ -1200,8 +1195,7 @@ smb311_posix_get_inode_info(struct inode **inode,
switch (rc) { switch (rc) {
case 0: case 0:
smb311_posix_info_to_fattr(&fattr, &data, &owner, &group, smb311_posix_info_to_fattr(&fattr, &data, &owner, &group, sb);
sb, adjust_tz, symlink);
break; break;
case -EREMOTE: case -EREMOTE:
/* DFS link, no metadata available on this server */ /* DFS link, no metadata available on this server */
......
...@@ -542,14 +542,17 @@ cifs_is_path_accessible(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -542,14 +542,17 @@ cifs_is_path_accessible(const unsigned int xid, struct cifs_tcon *tcon,
return rc; return rc;
} }
static int cifs_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, static int cifs_query_path_info(const unsigned int xid,
struct cifs_sb_info *cifs_sb, const char *full_path, struct cifs_tcon *tcon,
struct cifs_open_info_data *data, bool *adjustTZ, bool *symlink) struct cifs_sb_info *cifs_sb,
const char *full_path,
struct cifs_open_info_data *data)
{ {
int rc; int rc;
FILE_ALL_INFO fi = {}; FILE_ALL_INFO fi = {};
*symlink = false; data->symlink = false;
data->adjust_tz = false;
/* could do find first instead but this returns more info */ /* could do find first instead but this returns more info */
rc = CIFSSMBQPathInfo(xid, tcon, full_path, &fi, 0 /* not legacy */, cifs_sb->local_nls, rc = CIFSSMBQPathInfo(xid, tcon, full_path, &fi, 0 /* not legacy */, cifs_sb->local_nls,
...@@ -562,7 +565,7 @@ static int cifs_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -562,7 +565,7 @@ static int cifs_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
if ((rc == -EOPNOTSUPP) || (rc == -EINVAL)) { if ((rc == -EOPNOTSUPP) || (rc == -EINVAL)) {
rc = SMBQueryInformation(xid, tcon, full_path, &fi, cifs_sb->local_nls, rc = SMBQueryInformation(xid, tcon, full_path, &fi, cifs_sb->local_nls,
cifs_remap(cifs_sb)); cifs_remap(cifs_sb));
*adjustTZ = true; data->adjust_tz = true;
} }
if (!rc) { if (!rc) {
...@@ -589,7 +592,7 @@ static int cifs_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -589,7 +592,7 @@ static int cifs_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
/* Need to check if this is a symbolic link or not */ /* Need to check if this is a symbolic link or not */
tmprc = CIFS_open(xid, &oparms, &oplock, NULL); tmprc = CIFS_open(xid, &oparms, &oplock, NULL);
if (tmprc == -EOPNOTSUPP) if (tmprc == -EOPNOTSUPP)
*symlink = true; data->symlink = true;
else if (tmprc == 0) else if (tmprc == 0)
CIFSSMBClose(xid, tcon, fid.netfid); CIFSSMBClose(xid, tcon, fid.netfid);
} }
......
...@@ -541,9 +541,11 @@ static int smb2_compound_op(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -541,9 +541,11 @@ static int smb2_compound_op(const unsigned int xid, struct cifs_tcon *tcon,
return rc; return rc;
} }
int smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, int smb2_query_path_info(const unsigned int xid,
struct cifs_sb_info *cifs_sb, const char *full_path, struct cifs_tcon *tcon,
struct cifs_open_info_data *data, bool *adjust_tz, bool *reparse) struct cifs_sb_info *cifs_sb,
const char *full_path,
struct cifs_open_info_data *data)
{ {
__u32 create_options = 0; __u32 create_options = 0;
struct cifsFileInfo *cfile; struct cifsFileInfo *cfile;
...@@ -553,8 +555,8 @@ int smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -553,8 +555,8 @@ int smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
bool islink; bool islink;
int rc, rc2; int rc, rc2;
*adjust_tz = false; data->adjust_tz = false;
*reparse = false; data->reparse_point = false;
if (strcmp(full_path, "")) if (strcmp(full_path, ""))
rc = -ENOENT; rc = -ENOENT;
...@@ -588,7 +590,7 @@ int smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -588,7 +590,7 @@ int smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
if (rc) if (rc)
goto out; goto out;
*reparse = true; data->reparse_point = true;
create_options |= OPEN_REPARSE_POINT; create_options |= OPEN_REPARSE_POINT;
/* Failed on a symbolic link - query a reparse point info */ /* Failed on a symbolic link - query a reparse point info */
...@@ -619,12 +621,13 @@ int smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -619,12 +621,13 @@ int smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
} }
int smb311_posix_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, int smb311_posix_query_path_info(const unsigned int xid,
struct cifs_sb_info *cifs_sb, const char *full_path, struct cifs_tcon *tcon,
struct cifs_sb_info *cifs_sb,
const char *full_path,
struct cifs_open_info_data *data, struct cifs_open_info_data *data,
struct cifs_sid *owner, struct cifs_sid *owner,
struct cifs_sid *group, struct cifs_sid *group)
bool *adjust_tz, bool *reparse)
{ {
int rc; int rc;
__u32 create_options = 0; __u32 create_options = 0;
...@@ -636,8 +639,8 @@ int smb311_posix_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -636,8 +639,8 @@ int smb311_posix_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
size_t sidsbuflen = 0; size_t sidsbuflen = 0;
size_t owner_len, group_len; size_t owner_len, group_len;
*adjust_tz = false; data->adjust_tz = false;
*reparse = false; data->reparse_point = false;
/* /*
* BB TODO: Add support for using the cached root handle. * BB TODO: Add support for using the cached root handle.
...@@ -659,7 +662,7 @@ int smb311_posix_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, ...@@ -659,7 +662,7 @@ int smb311_posix_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
if (rc) if (rc)
goto out; goto out;
} }
*reparse = true; data->reparse_point = true;
create_options |= OPEN_REPARSE_POINT; create_options |= OPEN_REPARSE_POINT;
/* Failed on a symbolic link - query a reparse point info */ /* Failed on a symbolic link - query a reparse point info */
......
...@@ -56,9 +56,11 @@ extern int smb3_handle_read_data(struct TCP_Server_Info *server, ...@@ -56,9 +56,11 @@ extern int smb3_handle_read_data(struct TCP_Server_Info *server,
extern int smb2_query_reparse_tag(const unsigned int xid, struct cifs_tcon *tcon, extern int smb2_query_reparse_tag(const unsigned int xid, struct cifs_tcon *tcon,
struct cifs_sb_info *cifs_sb, const char *path, struct cifs_sb_info *cifs_sb, const char *path,
__u32 *reparse_tag); __u32 *reparse_tag);
int smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, int smb2_query_path_info(const unsigned int xid,
struct cifs_sb_info *cifs_sb, const char *full_path, struct cifs_tcon *tcon,
struct cifs_open_info_data *data, bool *adjust_tz, bool *reparse); struct cifs_sb_info *cifs_sb,
const char *full_path,
struct cifs_open_info_data *data);
extern int smb2_set_path_size(const unsigned int xid, struct cifs_tcon *tcon, extern int smb2_set_path_size(const unsigned int xid, struct cifs_tcon *tcon,
const char *full_path, __u64 size, const char *full_path, __u64 size,
struct cifs_sb_info *cifs_sb, bool set_alloc); struct cifs_sb_info *cifs_sb, bool set_alloc);
...@@ -275,12 +277,13 @@ extern int smb2_query_info_compound(const unsigned int xid, ...@@ -275,12 +277,13 @@ extern int smb2_query_info_compound(const unsigned int xid,
struct kvec *rsp, int *buftype, struct kvec *rsp, int *buftype,
struct cifs_sb_info *cifs_sb); struct cifs_sb_info *cifs_sb);
/* query path info from the server using SMB311 POSIX extensions*/ /* query path info from the server using SMB311 POSIX extensions*/
int smb311_posix_query_path_info(const unsigned int xid, struct cifs_tcon *tcon, int smb311_posix_query_path_info(const unsigned int xid,
struct cifs_sb_info *cifs_sb, const char *full_path, struct cifs_tcon *tcon,
struct cifs_sb_info *cifs_sb,
const char *full_path,
struct cifs_open_info_data *data, struct cifs_open_info_data *data,
struct cifs_sid *owner, struct cifs_sid *owner,
struct cifs_sid *group, struct cifs_sid *group);
bool *adjust_tz, bool *reparse);
int posix_info_parse(const void *beg, const void *end, int posix_info_parse(const void *beg, const void *end,
struct smb2_posix_info_parsed *out); struct smb2_posix_info_parsed *out);
int posix_info_sid_size(const void *beg, const void *end); int posix_info_sid_size(const void *beg, const void *end);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment