cifs: Simplify SMB2_open_init()
Reduce code duplication by stitching together create contexts in one place. 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
5ec629e037
commit
2a8d1387ed
|
@ -2835,14 +2835,6 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*oplock == SMB2_OPLOCK_LEVEL_BATCH) {
|
if (*oplock == SMB2_OPLOCK_LEVEL_BATCH) {
|
||||||
/* need to set Next field of lease context if we request it */
|
|
||||||
if (server->capabilities & SMB2_GLOBAL_CAP_LEASING) {
|
|
||||||
struct create_context *ccontext =
|
|
||||||
(struct create_context *)iov[n_iov-1].iov_base;
|
|
||||||
ccontext->Next =
|
|
||||||
cpu_to_le32(server->vals->create_lease_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = add_durable_context(iov, &n_iov, oparms,
|
rc = add_durable_context(iov, &n_iov, oparms,
|
||||||
tcon->use_persistent);
|
tcon->use_persistent);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
@ -2850,13 +2842,6 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tcon->posix_extensions) {
|
if (tcon->posix_extensions) {
|
||||||
if (n_iov > 2) {
|
|
||||||
struct create_context *ccontext =
|
|
||||||
(struct create_context *)iov[n_iov-1].iov_base;
|
|
||||||
ccontext->Next =
|
|
||||||
cpu_to_le32(iov[n_iov-1].iov_len);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = add_posix_context(iov, &n_iov, oparms->mode);
|
rc = add_posix_context(iov, &n_iov, oparms->mode);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -2864,13 +2849,6 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
|
||||||
|
|
||||||
if (tcon->snapshot_time) {
|
if (tcon->snapshot_time) {
|
||||||
cifs_dbg(FYI, "adding snapshot context\n");
|
cifs_dbg(FYI, "adding snapshot context\n");
|
||||||
if (n_iov > 2) {
|
|
||||||
struct create_context *ccontext =
|
|
||||||
(struct create_context *)iov[n_iov-1].iov_base;
|
|
||||||
ccontext->Next =
|
|
||||||
cpu_to_le32(iov[n_iov-1].iov_len);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = add_twarp_context(iov, &n_iov, tcon->snapshot_time);
|
rc = add_twarp_context(iov, &n_iov, tcon->snapshot_time);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -2894,12 +2872,6 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
|
||||||
set_owner = false;
|
set_owner = false;
|
||||||
|
|
||||||
if (set_owner | set_mode) {
|
if (set_owner | set_mode) {
|
||||||
if (n_iov > 2) {
|
|
||||||
struct create_context *ccontext =
|
|
||||||
(struct create_context *)iov[n_iov-1].iov_base;
|
|
||||||
ccontext->Next = cpu_to_le32(iov[n_iov-1].iov_len);
|
|
||||||
}
|
|
||||||
|
|
||||||
cifs_dbg(FYI, "add sd with mode 0x%x\n", oparms->mode);
|
cifs_dbg(FYI, "add sd with mode 0x%x\n", oparms->mode);
|
||||||
rc = add_sd_context(iov, &n_iov, oparms->mode, set_owner);
|
rc = add_sd_context(iov, &n_iov, oparms->mode, set_owner);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
@ -2907,11 +2879,6 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n_iov > 2) {
|
|
||||||
struct create_context *ccontext =
|
|
||||||
(struct create_context *)iov[n_iov-1].iov_base;
|
|
||||||
ccontext->Next = cpu_to_le32(iov[n_iov-1].iov_len);
|
|
||||||
}
|
|
||||||
add_query_id_context(iov, &n_iov);
|
add_query_id_context(iov, &n_iov);
|
||||||
|
|
||||||
if (n_iov > 2) {
|
if (n_iov > 2) {
|
||||||
|
@ -2922,6 +2889,15 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
|
||||||
req->CreateContextsOffset = cpu_to_le32(
|
req->CreateContextsOffset = cpu_to_le32(
|
||||||
sizeof(struct smb2_create_req) +
|
sizeof(struct smb2_create_req) +
|
||||||
iov[1].iov_len);
|
iov[1].iov_len);
|
||||||
|
|
||||||
|
for (unsigned int i = 2; i < (n_iov-1); i++) {
|
||||||
|
struct kvec *v = &iov[i];
|
||||||
|
size_t len = v->iov_len;
|
||||||
|
struct create_context *cctx =
|
||||||
|
(struct create_context *)v->iov_base;
|
||||||
|
|
||||||
|
cctx->Next = cpu_to_le32(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rqst->rq_nvec = n_iov;
|
rqst->rq_nvec = n_iov;
|
||||||
|
|
Loading…
Reference in New Issue