@@ -830,10 +830,6 @@ add_posix_context(struct kvec *iov, unsigned int *num_iovec, umode_t mode)
830
830
if (iov [num ].iov_base == NULL )
831
831
return - ENOMEM ;
832
832
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 );
837
833
le32_add_cpu (& req -> CreateContextsLength , sizeof (struct create_posix ));
838
834
* num_iovec = num + 1 ;
839
835
return 0 ;
@@ -2183,10 +2179,6 @@ add_lease_context(struct TCP_Server_Info *server, struct kvec *iov,
2183
2179
return - ENOMEM ;
2184
2180
iov [num ].iov_len = server -> vals -> create_lease_size ;
2185
2181
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 );
2190
2182
le32_add_cpu (& req -> CreateContextsLength ,
2191
2183
server -> vals -> create_lease_size );
2192
2184
* num_iovec = num + 1 ;
@@ -2274,10 +2266,6 @@ add_durable_v2_context(struct kvec *iov, unsigned int *num_iovec,
2274
2266
if (iov [num ].iov_base == NULL )
2275
2267
return - ENOMEM ;
2276
2268
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 );
2281
2269
le32_add_cpu (& req -> CreateContextsLength , sizeof (struct create_durable_v2 ));
2282
2270
* num_iovec = num + 1 ;
2283
2271
return 0 ;
@@ -2297,10 +2285,6 @@ add_durable_reconnect_v2_context(struct kvec *iov, unsigned int *num_iovec,
2297
2285
if (iov [num ].iov_base == NULL )
2298
2286
return - ENOMEM ;
2299
2287
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 );
2304
2288
le32_add_cpu (& req -> CreateContextsLength ,
2305
2289
sizeof (struct create_durable_handle_reconnect_v2 ));
2306
2290
* num_iovec = num + 1 ;
@@ -2331,10 +2315,6 @@ add_durable_context(struct kvec *iov, unsigned int *num_iovec,
2331
2315
if (iov [num ].iov_base == NULL )
2332
2316
return - ENOMEM ;
2333
2317
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 );
2338
2318
le32_add_cpu (& req -> CreateContextsLength , sizeof (struct create_durable ));
2339
2319
* num_iovec = num + 1 ;
2340
2320
return 0 ;
@@ -2376,10 +2356,6 @@ add_twarp_context(struct kvec *iov, unsigned int *num_iovec, __u64 timewarp)
2376
2356
if (iov [num ].iov_base == NULL )
2377
2357
return - ENOMEM ;
2378
2358
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 );
2383
2359
le32_add_cpu (& req -> CreateContextsLength , sizeof (struct crt_twarp_ctxt ));
2384
2360
* num_iovec = num + 1 ;
2385
2361
return 0 ;
@@ -2511,10 +2487,6 @@ add_sd_context(struct kvec *iov, unsigned int *num_iovec, umode_t mode, bool set
2511
2487
if (iov [num ].iov_base == NULL )
2512
2488
return - ENOMEM ;
2513
2489
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 );
2518
2490
le32_add_cpu (& req -> CreateContextsLength , len );
2519
2491
* num_iovec = num + 1 ;
2520
2492
return 0 ;
@@ -2553,10 +2525,6 @@ add_query_id_context(struct kvec *iov, unsigned int *num_iovec)
2553
2525
if (iov [num ].iov_base == NULL )
2554
2526
return - ENOMEM ;
2555
2527
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 );
2560
2528
le32_add_cpu (& req -> CreateContextsLength , sizeof (struct crt_query_id_ctxt ));
2561
2529
* num_iovec = num + 1 ;
2562
2530
return 0 ;
@@ -2720,6 +2688,9 @@ int smb311_posix_mkdir(const unsigned int xid, struct inode *inode,
2720
2688
rc = add_posix_context (iov , & n_iov , mode );
2721
2689
if (rc )
2722
2690
goto err_free_req ;
2691
+ req -> CreateContextsOffset = cpu_to_le32 (
2692
+ sizeof (struct smb2_create_req ) +
2693
+ iov [1 ].iov_len );
2723
2694
pc_buf = iov [n_iov - 1 ].iov_base ;
2724
2695
}
2725
2696
@@ -2943,6 +2914,16 @@ SMB2_open_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,
2943
2914
}
2944
2915
add_query_id_context (iov , & n_iov );
2945
2916
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
+
2946
2927
rqst -> rq_nvec = n_iov ;
2947
2928
return 0 ;
2948
2929
}
0 commit comments