cifs: Simplify SMB2_open_init()
authorVolker Lendecke <vl@samba.org>
Thu, 30 Mar 2023 12:04:46 +0000 (12:04 +0000)
committerSteve French <stfrench@microsoft.com>
Mon, 24 Apr 2023 01:31:44 +0000 (20:31 -0500)
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>
fs/cifs/smb2pdu.c

index 4f0d7c4bdb98eec3a98352212d5c44023ac678e4..d9c2590d61500dc83277ec6bc11f15630ae6de27 100644 (file)
@@ -2835,14 +2835,6 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
        }
 
        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,
                                        tcon->use_persistent);
                if (rc)
@@ -2850,13 +2842,6 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
        }
 
        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);
                if (rc)
                        return rc;
@@ -2864,13 +2849,6 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
 
        if (tcon->snapshot_time) {
                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);
                if (rc)
                        return rc;
@@ -2894,12 +2872,6 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
                        set_owner = false;
 
                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);
                        rc = add_sd_context(iov, &n_iov, oparms->mode, set_owner);
                        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);
 
        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(
                        sizeof(struct smb2_create_req) +
                        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;