mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
smb: move smb_version_values to common/smbglob.h
Merge the struct members of the server and the client: - req_capabilities: from client - header_preamble_size: from client - cap_unicode: from client - capabilities: from server, rename to req_capabilities - max_read_size: from server - max_write_size: from server - max_trans_size: from server - max_credits: from server - create_durable_size: from server - create_durable_v2_size: from server - create_mxac_size: from server - create_disk_id_size: from server - create_posix_size: from server Then move duplicate definitions to common header file. Co-developed-by: ChenXiaoSong <chenxiaosong@kylinos.cn> Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn> Signed-off-by: ZhangGuoDong <zhangguodong@kylinos.cn> Acked-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
committed by
Steve French
parent
94b955167e
commit
34cf191bb6
@@ -633,28 +633,6 @@ struct smb_version_operations {
|
|||||||
struct kvec *xattr_iov);
|
struct kvec *xattr_iov);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct smb_version_values {
|
|
||||||
char *version_string;
|
|
||||||
__u16 protocol_id;
|
|
||||||
__u32 req_capabilities;
|
|
||||||
__u32 large_lock_type;
|
|
||||||
__u32 exclusive_lock_type;
|
|
||||||
__u32 shared_lock_type;
|
|
||||||
__u32 unlock_lock_type;
|
|
||||||
size_t header_preamble_size;
|
|
||||||
size_t header_size;
|
|
||||||
size_t max_header_size;
|
|
||||||
size_t read_rsp_size;
|
|
||||||
__le16 lock_cmd;
|
|
||||||
unsigned int cap_unix;
|
|
||||||
unsigned int cap_nt_find;
|
|
||||||
unsigned int cap_large_files;
|
|
||||||
unsigned int cap_unicode;
|
|
||||||
__u16 signing_enabled;
|
|
||||||
__u16 signing_required;
|
|
||||||
size_t create_lease_size;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define HEADER_SIZE(server) (server->vals->header_size)
|
#define HEADER_SIZE(server) (server->vals->header_size)
|
||||||
#define MAX_HEADER_SIZE(server) (server->vals->max_header_size)
|
#define MAX_HEADER_SIZE(server) (server->vals->max_header_size)
|
||||||
#define HEADER_PREAMBLE_SIZE(server) (server->vals->header_preamble_size)
|
#define HEADER_PREAMBLE_SIZE(server) (server->vals->header_preamble_size)
|
||||||
|
|||||||
@@ -9,6 +9,37 @@
|
|||||||
#ifndef _COMMON_SMB_GLOB_H
|
#ifndef _COMMON_SMB_GLOB_H
|
||||||
#define _COMMON_SMB_GLOB_H
|
#define _COMMON_SMB_GLOB_H
|
||||||
|
|
||||||
|
struct smb_version_values {
|
||||||
|
char *version_string;
|
||||||
|
__u16 protocol_id;
|
||||||
|
__le16 lock_cmd;
|
||||||
|
__u32 req_capabilities;
|
||||||
|
__u32 max_read_size;
|
||||||
|
__u32 max_write_size;
|
||||||
|
__u32 max_trans_size;
|
||||||
|
__u32 max_credits;
|
||||||
|
__u32 large_lock_type;
|
||||||
|
__u32 exclusive_lock_type;
|
||||||
|
__u32 shared_lock_type;
|
||||||
|
__u32 unlock_lock_type;
|
||||||
|
size_t header_preamble_size;
|
||||||
|
size_t header_size;
|
||||||
|
size_t max_header_size;
|
||||||
|
size_t read_rsp_size;
|
||||||
|
unsigned int cap_unix;
|
||||||
|
unsigned int cap_nt_find;
|
||||||
|
unsigned int cap_large_files;
|
||||||
|
unsigned int cap_unicode;
|
||||||
|
__u16 signing_enabled;
|
||||||
|
__u16 signing_required;
|
||||||
|
size_t create_lease_size;
|
||||||
|
size_t create_durable_size;
|
||||||
|
size_t create_durable_v2_size;
|
||||||
|
size_t create_mxac_size;
|
||||||
|
size_t create_disk_id_size;
|
||||||
|
size_t create_posix_size;
|
||||||
|
};
|
||||||
|
|
||||||
static inline void inc_rfc1001_len(void *buf, int count)
|
static inline void inc_rfc1001_len(void *buf, int count)
|
||||||
{
|
{
|
||||||
be32_add_cpu((__be32 *)buf, count);
|
be32_add_cpu((__be32 *)buf, count);
|
||||||
|
|||||||
@@ -460,7 +460,7 @@ int ksmbd_smb2_check_message(struct ksmbd_work *work)
|
|||||||
}
|
}
|
||||||
|
|
||||||
validate_credit:
|
validate_credit:
|
||||||
if ((work->conn->vals->capabilities & SMB2_GLOBAL_CAP_LARGE_MTU) &&
|
if ((work->conn->vals->req_capabilities & SMB2_GLOBAL_CAP_LARGE_MTU) &&
|
||||||
smb2_validate_credit_charge(work->conn, hdr))
|
smb2_validate_credit_charge(work->conn, hdr))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
static struct smb_version_values smb21_server_values = {
|
static struct smb_version_values smb21_server_values = {
|
||||||
.version_string = SMB21_VERSION_STRING,
|
.version_string = SMB21_VERSION_STRING,
|
||||||
.protocol_id = SMB21_PROT_ID,
|
.protocol_id = SMB21_PROT_ID,
|
||||||
.capabilities = SMB2_GLOBAL_CAP_LARGE_MTU,
|
.req_capabilities = SMB2_GLOBAL_CAP_LARGE_MTU,
|
||||||
.max_read_size = SMB21_DEFAULT_IOSIZE,
|
.max_read_size = SMB21_DEFAULT_IOSIZE,
|
||||||
.max_write_size = SMB21_DEFAULT_IOSIZE,
|
.max_write_size = SMB21_DEFAULT_IOSIZE,
|
||||||
.max_trans_size = SMB21_DEFAULT_IOSIZE,
|
.max_trans_size = SMB21_DEFAULT_IOSIZE,
|
||||||
@@ -41,7 +41,7 @@ static struct smb_version_values smb21_server_values = {
|
|||||||
static struct smb_version_values smb30_server_values = {
|
static struct smb_version_values smb30_server_values = {
|
||||||
.version_string = SMB30_VERSION_STRING,
|
.version_string = SMB30_VERSION_STRING,
|
||||||
.protocol_id = SMB30_PROT_ID,
|
.protocol_id = SMB30_PROT_ID,
|
||||||
.capabilities = SMB2_GLOBAL_CAP_LARGE_MTU,
|
.req_capabilities = SMB2_GLOBAL_CAP_LARGE_MTU,
|
||||||
.max_read_size = SMB3_DEFAULT_IOSIZE,
|
.max_read_size = SMB3_DEFAULT_IOSIZE,
|
||||||
.max_write_size = SMB3_DEFAULT_IOSIZE,
|
.max_write_size = SMB3_DEFAULT_IOSIZE,
|
||||||
.max_trans_size = SMB3_DEFAULT_TRANS_SIZE,
|
.max_trans_size = SMB3_DEFAULT_TRANS_SIZE,
|
||||||
@@ -68,7 +68,7 @@ static struct smb_version_values smb30_server_values = {
|
|||||||
static struct smb_version_values smb302_server_values = {
|
static struct smb_version_values smb302_server_values = {
|
||||||
.version_string = SMB302_VERSION_STRING,
|
.version_string = SMB302_VERSION_STRING,
|
||||||
.protocol_id = SMB302_PROT_ID,
|
.protocol_id = SMB302_PROT_ID,
|
||||||
.capabilities = SMB2_GLOBAL_CAP_LARGE_MTU,
|
.req_capabilities = SMB2_GLOBAL_CAP_LARGE_MTU,
|
||||||
.max_read_size = SMB3_DEFAULT_IOSIZE,
|
.max_read_size = SMB3_DEFAULT_IOSIZE,
|
||||||
.max_write_size = SMB3_DEFAULT_IOSIZE,
|
.max_write_size = SMB3_DEFAULT_IOSIZE,
|
||||||
.max_trans_size = SMB3_DEFAULT_TRANS_SIZE,
|
.max_trans_size = SMB3_DEFAULT_TRANS_SIZE,
|
||||||
@@ -95,7 +95,7 @@ static struct smb_version_values smb302_server_values = {
|
|||||||
static struct smb_version_values smb311_server_values = {
|
static struct smb_version_values smb311_server_values = {
|
||||||
.version_string = SMB311_VERSION_STRING,
|
.version_string = SMB311_VERSION_STRING,
|
||||||
.protocol_id = SMB311_PROT_ID,
|
.protocol_id = SMB311_PROT_ID,
|
||||||
.capabilities = SMB2_GLOBAL_CAP_LARGE_MTU,
|
.req_capabilities = SMB2_GLOBAL_CAP_LARGE_MTU,
|
||||||
.max_read_size = SMB3_DEFAULT_IOSIZE,
|
.max_read_size = SMB3_DEFAULT_IOSIZE,
|
||||||
.max_write_size = SMB3_DEFAULT_IOSIZE,
|
.max_write_size = SMB3_DEFAULT_IOSIZE,
|
||||||
.max_trans_size = SMB3_DEFAULT_TRANS_SIZE,
|
.max_trans_size = SMB3_DEFAULT_TRANS_SIZE,
|
||||||
@@ -204,7 +204,7 @@ void init_smb2_1_server(struct ksmbd_conn *conn)
|
|||||||
conn->signing_algorithm = SIGNING_ALG_HMAC_SHA256_LE;
|
conn->signing_algorithm = SIGNING_ALG_HMAC_SHA256_LE;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_LEASING;
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_LEASING;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -221,20 +221,20 @@ void init_smb3_0_server(struct ksmbd_conn *conn)
|
|||||||
conn->signing_algorithm = SIGNING_ALG_AES_CMAC_LE;
|
conn->signing_algorithm = SIGNING_ALG_AES_CMAC_LE;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_LEASING |
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_LEASING |
|
||||||
SMB2_GLOBAL_CAP_DIRECTORY_LEASING;
|
SMB2_GLOBAL_CAP_DIRECTORY_LEASING;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION &&
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION &&
|
||||||
conn->cli_cap & SMB2_GLOBAL_CAP_ENCRYPTION)
|
conn->cli_cap & SMB2_GLOBAL_CAP_ENCRYPTION)
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_ENCRYPTION;
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_ENCRYPTION;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION ||
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION ||
|
||||||
(!(server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION_OFF) &&
|
(!(server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION_OFF) &&
|
||||||
conn->cli_cap & SMB2_GLOBAL_CAP_ENCRYPTION))
|
conn->cli_cap & SMB2_GLOBAL_CAP_ENCRYPTION))
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_ENCRYPTION;
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_ENCRYPTION;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL)
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL)
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_MULTI_CHANNEL;
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_MULTI_CHANNEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -251,19 +251,19 @@ void init_smb3_02_server(struct ksmbd_conn *conn)
|
|||||||
conn->signing_algorithm = SIGNING_ALG_AES_CMAC_LE;
|
conn->signing_algorithm = SIGNING_ALG_AES_CMAC_LE;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_LEASING |
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_LEASING |
|
||||||
SMB2_GLOBAL_CAP_DIRECTORY_LEASING;
|
SMB2_GLOBAL_CAP_DIRECTORY_LEASING;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION ||
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION ||
|
||||||
(!(server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION_OFF) &&
|
(!(server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION_OFF) &&
|
||||||
conn->cli_cap & SMB2_GLOBAL_CAP_ENCRYPTION))
|
conn->cli_cap & SMB2_GLOBAL_CAP_ENCRYPTION))
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_ENCRYPTION;
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_ENCRYPTION;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL)
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL)
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_MULTI_CHANNEL;
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_MULTI_CHANNEL;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_DURABLE_HANDLE)
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_DURABLE_HANDLE)
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_PERSISTENT_HANDLES;
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_PERSISTENT_HANDLES;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -280,14 +280,14 @@ int init_smb3_11_server(struct ksmbd_conn *conn)
|
|||||||
conn->signing_algorithm = SIGNING_ALG_AES_CMAC_LE;
|
conn->signing_algorithm = SIGNING_ALG_AES_CMAC_LE;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_LEASING |
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_LEASING |
|
||||||
SMB2_GLOBAL_CAP_DIRECTORY_LEASING;
|
SMB2_GLOBAL_CAP_DIRECTORY_LEASING;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL)
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL)
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_MULTI_CHANNEL;
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_MULTI_CHANNEL;
|
||||||
|
|
||||||
if (server_conf.flags & KSMBD_GLOBAL_FLAG_DURABLE_HANDLE)
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_DURABLE_HANDLE)
|
||||||
conn->vals->capabilities |= SMB2_GLOBAL_CAP_PERSISTENT_HANDLES;
|
conn->vals->req_capabilities |= SMB2_GLOBAL_CAP_PERSISTENT_HANDLES;
|
||||||
|
|
||||||
INIT_LIST_HEAD(&conn->preauth_sess_table);
|
INIT_LIST_HEAD(&conn->preauth_sess_table);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -282,7 +282,7 @@ int init_smb2_neg_rsp(struct ksmbd_work *work)
|
|||||||
/* Not setting conn guid rsp->ServerGUID, as it
|
/* Not setting conn guid rsp->ServerGUID, as it
|
||||||
* not used by client for identifying connection
|
* not used by client for identifying connection
|
||||||
*/
|
*/
|
||||||
rsp->Capabilities = cpu_to_le32(conn->vals->capabilities);
|
rsp->Capabilities = cpu_to_le32(conn->vals->req_capabilities);
|
||||||
/* Default Max Message Size till SMB2.0, 64K*/
|
/* Default Max Message Size till SMB2.0, 64K*/
|
||||||
rsp->MaxTransactSize = cpu_to_le32(conn->vals->max_trans_size);
|
rsp->MaxTransactSize = cpu_to_le32(conn->vals->max_trans_size);
|
||||||
rsp->MaxReadSize = cpu_to_le32(conn->vals->max_read_size);
|
rsp->MaxReadSize = cpu_to_le32(conn->vals->max_read_size);
|
||||||
@@ -956,7 +956,7 @@ bool smb3_encryption_negotiated(struct ksmbd_conn *conn)
|
|||||||
* SMB 3.0 and 3.0.2 dialects use the SMB2_GLOBAL_CAP_ENCRYPTION flag.
|
* SMB 3.0 and 3.0.2 dialects use the SMB2_GLOBAL_CAP_ENCRYPTION flag.
|
||||||
* SMB 3.1.1 uses the cipher_type field.
|
* SMB 3.1.1 uses the cipher_type field.
|
||||||
*/
|
*/
|
||||||
return (conn->vals->capabilities & SMB2_GLOBAL_CAP_ENCRYPTION) ||
|
return (conn->vals->req_capabilities & SMB2_GLOBAL_CAP_ENCRYPTION) ||
|
||||||
conn->cipher_type;
|
conn->cipher_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1210,7 +1210,7 @@ int smb2_handle_negotiate(struct ksmbd_work *work)
|
|||||||
rc = -EINVAL;
|
rc = -EINVAL;
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
rsp->Capabilities = cpu_to_le32(conn->vals->capabilities);
|
rsp->Capabilities = cpu_to_le32(conn->vals->req_capabilities);
|
||||||
|
|
||||||
/* For stats */
|
/* For stats */
|
||||||
conn->connection_type = conn->dialect;
|
conn->connection_type = conn->dialect;
|
||||||
@@ -3464,7 +3464,7 @@ int smb2_open(struct ksmbd_work *work)
|
|||||||
share_ret = ksmbd_smb_check_shared_mode(fp->filp, fp);
|
share_ret = ksmbd_smb_check_shared_mode(fp->filp, fp);
|
||||||
if (!test_share_config_flag(work->tcon->share_conf, KSMBD_SHARE_FLAG_OPLOCKS) ||
|
if (!test_share_config_flag(work->tcon->share_conf, KSMBD_SHARE_FLAG_OPLOCKS) ||
|
||||||
(req_op_level == SMB2_OPLOCK_LEVEL_LEASE &&
|
(req_op_level == SMB2_OPLOCK_LEVEL_LEASE &&
|
||||||
!(conn->vals->capabilities & SMB2_GLOBAL_CAP_LEASING))) {
|
!(conn->vals->req_capabilities & SMB2_GLOBAL_CAP_LEASING))) {
|
||||||
if (share_ret < 0 && !S_ISDIR(file_inode(fp->filp)->i_mode)) {
|
if (share_ret < 0 && !S_ISDIR(file_inode(fp->filp)->i_mode)) {
|
||||||
rc = share_ret;
|
rc = share_ret;
|
||||||
goto err_out1;
|
goto err_out1;
|
||||||
@@ -7974,7 +7974,7 @@ static int fsctl_validate_negotiate_info(struct ksmbd_conn *conn,
|
|||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
neg_rsp->Capabilities = cpu_to_le32(conn->vals->capabilities);
|
neg_rsp->Capabilities = cpu_to_le32(conn->vals->req_capabilities);
|
||||||
memset(neg_rsp->Guid, 0, SMB2_CLIENT_GUID_SIZE);
|
memset(neg_rsp->Guid, 0, SMB2_CLIENT_GUID_SIZE);
|
||||||
neg_rsp->SecurityMode = cpu_to_le16(conn->srv_sec_mode);
|
neg_rsp->SecurityMode = cpu_to_le16(conn->srv_sec_mode);
|
||||||
neg_rsp->Dialect = cpu_to_le16(conn->dialect);
|
neg_rsp->Dialect = cpu_to_le16(conn->dialect);
|
||||||
|
|||||||
@@ -338,35 +338,6 @@ struct file_id_full_dir_info {
|
|||||||
char FileName[];
|
char FileName[];
|
||||||
} __packed; /* level 0x105 FF rsp data */
|
} __packed; /* level 0x105 FF rsp data */
|
||||||
|
|
||||||
struct smb_version_values {
|
|
||||||
char *version_string;
|
|
||||||
__u16 protocol_id;
|
|
||||||
__le16 lock_cmd;
|
|
||||||
__u32 capabilities;
|
|
||||||
__u32 max_read_size;
|
|
||||||
__u32 max_write_size;
|
|
||||||
__u32 max_trans_size;
|
|
||||||
__u32 max_credits;
|
|
||||||
__u32 large_lock_type;
|
|
||||||
__u32 exclusive_lock_type;
|
|
||||||
__u32 shared_lock_type;
|
|
||||||
__u32 unlock_lock_type;
|
|
||||||
size_t header_size;
|
|
||||||
size_t max_header_size;
|
|
||||||
size_t read_rsp_size;
|
|
||||||
unsigned int cap_unix;
|
|
||||||
unsigned int cap_nt_find;
|
|
||||||
unsigned int cap_large_files;
|
|
||||||
__u16 signing_enabled;
|
|
||||||
__u16 signing_required;
|
|
||||||
size_t create_lease_size;
|
|
||||||
size_t create_durable_size;
|
|
||||||
size_t create_durable_v2_size;
|
|
||||||
size_t create_mxac_size;
|
|
||||||
size_t create_disk_id_size;
|
|
||||||
size_t create_posix_size;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct filesystem_posix_info {
|
struct filesystem_posix_info {
|
||||||
/* For undefined recommended transfer size return -1 in that field */
|
/* For undefined recommended transfer size return -1 in that field */
|
||||||
__le32 OptimalTransferSize; /* bsize on some os, iosize on other os */
|
__le32 OptimalTransferSize; /* bsize on some os, iosize on other os */
|
||||||
|
|||||||
Reference in New Issue
Block a user