Skip to content

Commit 5ec629e

Browse files
vlendecsmfrench
authored andcommitted
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 <[email protected]> Reviewed-by: Enzo Matsumiya <[email protected]> Signed-off-by: Steve French <[email protected]>
1 parent 457391b commit 5ec629e

File tree

1 file changed

+13
-32
lines changed

1 file changed

+13
-32
lines changed

fs/cifs/smb2pdu.c

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -830,10 +830,6 @@ add_posix_context(struct kvec *iov, unsigned int *num_iovec, umode_t mode)
830830
if (iov[num].iov_base == NULL)
831831
return -ENOMEM;
832832
iov[num].iov_len = sizeof(struct create_posix);
833-
if (!req->CreateContextsOffset)
834-
req->CreateContextsOffset = cpu_to_le32(
835-
sizeof(struct smb2_create_req) +
836-
iov[num - 1].iov_len);
837833
le32_add_cpu(&req->CreateContextsLength, sizeof(struct create_posix));
838834
*num_iovec = num + 1;
839835
return 0;
@@ -2183,10 +2179,6 @@ add_lease_context(struct TCP_Server_Info *server, struct kvec *iov,
21832179
return -ENOMEM;
21842180
iov[num].iov_len = server->vals->create_lease_size;
21852181
req->RequestedOplockLevel = SMB2_OPLOCK_LEVEL_LEASE;
2186-
if (!req->CreateContextsOffset)
2187-
req->CreateContextsOffset = cpu_to_le32(
2188-
sizeof(struct smb2_create_req) +
2189-
iov[num - 1].iov_len);
21902182
le32_add_cpu(&req->CreateContextsLength,
21912183
server->vals->create_lease_size);
21922184
*num_iovec = num + 1;
@@ -2274,10 +2266,6 @@ add_durable_v2_context(struct kvec *iov, unsigned int *num_iovec,
22742266
if (iov[num].iov_base == NULL)
22752267
return -ENOMEM;
22762268
iov[num].iov_len = sizeof(struct create_durable_v2);
2277-
if (!req->CreateContextsOffset)
2278-
req->CreateContextsOffset =
2279-
cpu_to_le32(sizeof(struct smb2_create_req) +
2280-
iov[1].iov_len);
22812269
le32_add_cpu(&req->CreateContextsLength, sizeof(struct create_durable_v2));
22822270
*num_iovec = num + 1;
22832271
return 0;
@@ -2297,10 +2285,6 @@ add_durable_reconnect_v2_context(struct kvec *iov, unsigned int *num_iovec,
22972285
if (iov[num].iov_base == NULL)
22982286
return -ENOMEM;
22992287
iov[num].iov_len = sizeof(struct create_durable_handle_reconnect_v2);
2300-
if (!req->CreateContextsOffset)
2301-
req->CreateContextsOffset =
2302-
cpu_to_le32(sizeof(struct smb2_create_req) +
2303-
iov[1].iov_len);
23042288
le32_add_cpu(&req->CreateContextsLength,
23052289
sizeof(struct create_durable_handle_reconnect_v2));
23062290
*num_iovec = num + 1;
@@ -2331,10 +2315,6 @@ add_durable_context(struct kvec *iov, unsigned int *num_iovec,
23312315
if (iov[num].iov_base == NULL)
23322316
return -ENOMEM;
23332317
iov[num].iov_len = sizeof(struct create_durable);
2334-
if (!req->CreateContextsOffset)
2335-
req->CreateContextsOffset =
2336-
cpu_to_le32(sizeof(struct smb2_create_req) +
2337-
iov[1].iov_len);
23382318
le32_add_cpu(&req->CreateContextsLength, sizeof(struct create_durable));
23392319
*num_iovec = num + 1;
23402320
return 0;
@@ -2376,10 +2356,6 @@ add_twarp_context(struct kvec *iov, unsigned int *num_iovec, __u64 timewarp)
23762356
if (iov[num].iov_base == NULL)
23772357
return -ENOMEM;
23782358
iov[num].iov_len = sizeof(struct crt_twarp_ctxt);
2379-
if (!req->CreateContextsOffset)
2380-
req->CreateContextsOffset = cpu_to_le32(
2381-
sizeof(struct smb2_create_req) +
2382-
iov[num - 1].iov_len);
23832359
le32_add_cpu(&req->CreateContextsLength, sizeof(struct crt_twarp_ctxt));
23842360
*num_iovec = num + 1;
23852361
return 0;
@@ -2511,10 +2487,6 @@ add_sd_context(struct kvec *iov, unsigned int *num_iovec, umode_t mode, bool set
25112487
if (iov[num].iov_base == NULL)
25122488
return -ENOMEM;
25132489
iov[num].iov_len = len;
2514-
if (!req->CreateContextsOffset)
2515-
req->CreateContextsOffset = cpu_to_le32(
2516-
sizeof(struct smb2_create_req) +
2517-
iov[num - 1].iov_len);
25182490
le32_add_cpu(&req->CreateContextsLength, len);
25192491
*num_iovec = num + 1;
25202492
return 0;
@@ -2553,10 +2525,6 @@ add_query_id_context(struct kvec *iov, unsigned int *num_iovec)
25532525
if (iov[num].iov_base == NULL)
25542526
return -ENOMEM;
25552527
iov[num].iov_len = sizeof(struct crt_query_id_ctxt);
2556-
if (!req->CreateContextsOffset)
2557-
req->CreateContextsOffset = cpu_to_le32(
2558-
sizeof(struct smb2_create_req) +
2559-
iov[num - 1].iov_len);
25602528
le32_add_cpu(&req->CreateContextsLength, sizeof(struct crt_query_id_ctxt));
25612529
*num_iovec = num + 1;
25622530
return 0;
@@ -2720,6 +2688,9 @@ int smb311_posix_mkdir(const unsigned int xid, struct inode *inode,
27202688
rc = add_posix_context(iov, &n_iov, mode);
27212689
if (rc)
27222690
goto err_free_req;
2691+
req->CreateContextsOffset = cpu_to_le32(
2692+
sizeof(struct smb2_create_req) +
2693+
iov[1].iov_len);
27232694
pc_buf = iov[n_iov-1].iov_base;
27242695
}
27252696

@@ -2943,6 +2914,16 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
29432914
}
29442915
add_query_id_context(iov, &n_iov);
29452916

2917+
if (n_iov > 2) {
2918+
/*
2919+
* We have create contexts behind iov[1] (the file
2920+
* name), point at them from the main create request
2921+
*/
2922+
req->CreateContextsOffset = cpu_to_le32(
2923+
sizeof(struct smb2_create_req) +
2924+
iov[1].iov_len);
2925+
}
2926+
29462927
rqst->rq_nvec = n_iov;
29472928
return 0;
29482929
}

0 commit comments

Comments
 (0)