mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
cifs: Simplify SMB2_open_init()
We can point to the create contexts in just one place, we don't have to do this in every add_*_context routine. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Enzo Matsumiya <ematsumiya@suse.de> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
457391b038
commit
5ec629e037
@ -830,10 +830,6 @@ add_posix_context(struct kvec *iov, unsigned int *num_iovec, umode_t mode)
|
||||
if (iov[num].iov_base == NULL)
|
||||
return -ENOMEM;
|
||||
iov[num].iov_len = sizeof(struct create_posix);
|
||||
if (!req->CreateContextsOffset)
|
||||
req->CreateContextsOffset = cpu_to_le32(
|
||||
sizeof(struct smb2_create_req) +
|
||||
iov[num - 1].iov_len);
|
||||
le32_add_cpu(&req->CreateContextsLength, sizeof(struct create_posix));
|
||||
*num_iovec = num + 1;
|
||||
return 0;
|
||||
@ -2183,10 +2179,6 @@ add_lease_context(struct TCP_Server_Info *server, struct kvec *iov,
|
||||
return -ENOMEM;
|
||||
iov[num].iov_len = server->vals->create_lease_size;
|
||||
req->RequestedOplockLevel = SMB2_OPLOCK_LEVEL_LEASE;
|
||||
if (!req->CreateContextsOffset)
|
||||
req->CreateContextsOffset = cpu_to_le32(
|
||||
sizeof(struct smb2_create_req) +
|
||||
iov[num - 1].iov_len);
|
||||
le32_add_cpu(&req->CreateContextsLength,
|
||||
server->vals->create_lease_size);
|
||||
*num_iovec = num + 1;
|
||||
@ -2274,10 +2266,6 @@ add_durable_v2_context(struct kvec *iov, unsigned int *num_iovec,
|
||||
if (iov[num].iov_base == NULL)
|
||||
return -ENOMEM;
|
||||
iov[num].iov_len = sizeof(struct create_durable_v2);
|
||||
if (!req->CreateContextsOffset)
|
||||
req->CreateContextsOffset =
|
||||
cpu_to_le32(sizeof(struct smb2_create_req) +
|
||||
iov[1].iov_len);
|
||||
le32_add_cpu(&req->CreateContextsLength, sizeof(struct create_durable_v2));
|
||||
*num_iovec = num + 1;
|
||||
return 0;
|
||||
@ -2297,10 +2285,6 @@ add_durable_reconnect_v2_context(struct kvec *iov, unsigned int *num_iovec,
|
||||
if (iov[num].iov_base == NULL)
|
||||
return -ENOMEM;
|
||||
iov[num].iov_len = sizeof(struct create_durable_handle_reconnect_v2);
|
||||
if (!req->CreateContextsOffset)
|
||||
req->CreateContextsOffset =
|
||||
cpu_to_le32(sizeof(struct smb2_create_req) +
|
||||
iov[1].iov_len);
|
||||
le32_add_cpu(&req->CreateContextsLength,
|
||||
sizeof(struct create_durable_handle_reconnect_v2));
|
||||
*num_iovec = num + 1;
|
||||
@ -2331,10 +2315,6 @@ add_durable_context(struct kvec *iov, unsigned int *num_iovec,
|
||||
if (iov[num].iov_base == NULL)
|
||||
return -ENOMEM;
|
||||
iov[num].iov_len = sizeof(struct create_durable);
|
||||
if (!req->CreateContextsOffset)
|
||||
req->CreateContextsOffset =
|
||||
cpu_to_le32(sizeof(struct smb2_create_req) +
|
||||
iov[1].iov_len);
|
||||
le32_add_cpu(&req->CreateContextsLength, sizeof(struct create_durable));
|
||||
*num_iovec = num + 1;
|
||||
return 0;
|
||||
@ -2376,10 +2356,6 @@ add_twarp_context(struct kvec *iov, unsigned int *num_iovec, __u64 timewarp)
|
||||
if (iov[num].iov_base == NULL)
|
||||
return -ENOMEM;
|
||||
iov[num].iov_len = sizeof(struct crt_twarp_ctxt);
|
||||
if (!req->CreateContextsOffset)
|
||||
req->CreateContextsOffset = cpu_to_le32(
|
||||
sizeof(struct smb2_create_req) +
|
||||
iov[num - 1].iov_len);
|
||||
le32_add_cpu(&req->CreateContextsLength, sizeof(struct crt_twarp_ctxt));
|
||||
*num_iovec = num + 1;
|
||||
return 0;
|
||||
@ -2511,10 +2487,6 @@ add_sd_context(struct kvec *iov, unsigned int *num_iovec, umode_t mode, bool set
|
||||
if (iov[num].iov_base == NULL)
|
||||
return -ENOMEM;
|
||||
iov[num].iov_len = len;
|
||||
if (!req->CreateContextsOffset)
|
||||
req->CreateContextsOffset = cpu_to_le32(
|
||||
sizeof(struct smb2_create_req) +
|
||||
iov[num - 1].iov_len);
|
||||
le32_add_cpu(&req->CreateContextsLength, len);
|
||||
*num_iovec = num + 1;
|
||||
return 0;
|
||||
@ -2553,10 +2525,6 @@ add_query_id_context(struct kvec *iov, unsigned int *num_iovec)
|
||||
if (iov[num].iov_base == NULL)
|
||||
return -ENOMEM;
|
||||
iov[num].iov_len = sizeof(struct crt_query_id_ctxt);
|
||||
if (!req->CreateContextsOffset)
|
||||
req->CreateContextsOffset = cpu_to_le32(
|
||||
sizeof(struct smb2_create_req) +
|
||||
iov[num - 1].iov_len);
|
||||
le32_add_cpu(&req->CreateContextsLength, sizeof(struct crt_query_id_ctxt));
|
||||
*num_iovec = num + 1;
|
||||
return 0;
|
||||
@ -2720,6 +2688,9 @@ int smb311_posix_mkdir(const unsigned int xid, struct inode *inode,
|
||||
rc = add_posix_context(iov, &n_iov, mode);
|
||||
if (rc)
|
||||
goto err_free_req;
|
||||
req->CreateContextsOffset = cpu_to_le32(
|
||||
sizeof(struct smb2_create_req) +
|
||||
iov[1].iov_len);
|
||||
pc_buf = iov[n_iov-1].iov_base;
|
||||
}
|
||||
|
||||
@ -2943,6 +2914,16 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
|
||||
}
|
||||
add_query_id_context(iov, &n_iov);
|
||||
|
||||
if (n_iov > 2) {
|
||||
/*
|
||||
* We have create contexts behind iov[1] (the file
|
||||
* name), point at them from the main create request
|
||||
*/
|
||||
req->CreateContextsOffset = cpu_to_le32(
|
||||
sizeof(struct smb2_create_req) +
|
||||
iov[1].iov_len);
|
||||
}
|
||||
|
||||
rqst->rq_nvec = n_iov;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user