Merge tag '6.3-rc-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6
[linux-2.6-block.git] / fs / cifs / cifssmb.c
index 60dd4e37030ab49131b2b86fdb44fe61282fe0c2..a24e4ddf804326ab7a06f06c9f26bca71abf6ea6 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/task_io_accounting_ops.h>
 #include <linux/uaccess.h>
 #include "cifspdu.h"
+#include "cifsfs.h"
 #include "cifsglob.h"
 #include "cifsacl.h"
 #include "cifsproto.h"
@@ -1295,11 +1296,8 @@ cifs_readv_callback(struct mid_q_entry *mid)
        struct TCP_Server_Info *server = tcon->ses->server;
        struct smb_rqst rqst = { .rq_iov = rdata->iov,
                                 .rq_nvec = 2,
-                                .rq_pages = rdata->pages,
-                                .rq_offset = rdata->page_offset,
-                                .rq_npages = rdata->nr_pages,
-                                .rq_pagesz = rdata->pagesz,
-                                .rq_tailsz = rdata->tailsz };
+                                .rq_iter_size = iov_iter_count(&rdata->iter),
+                                .rq_iter = rdata->iter };
        struct cifs_credits credits = { .value = 1, .instance = 0 };
 
        cifs_dbg(FYI, "%s: mid=%llu state=%d result=%d bytes=%u\n",
@@ -1738,11 +1736,8 @@ cifs_async_writev(struct cifs_writedata *wdata,
 
        rqst.rq_iov = iov;
        rqst.rq_nvec = 2;
-       rqst.rq_pages = wdata->pages;
-       rqst.rq_offset = wdata->page_offset;
-       rqst.rq_npages = wdata->nr_pages;
-       rqst.rq_pagesz = wdata->pagesz;
-       rqst.rq_tailsz = wdata->tailsz;
+       rqst.rq_iter = wdata->iter;
+       rqst.rq_iter_size = iov_iter_count(&wdata->iter);
 
        cifs_dbg(FYI, "async write at %llu %u bytes\n",
                 wdata->offset, wdata->bytes);
@@ -5373,14 +5368,15 @@ CIFSSMBSetPathInfoFB(const unsigned int xid, struct cifs_tcon *tcon,
        struct cifs_fid fid;
        int rc;
 
-       oparms.tcon = tcon;
-       oparms.cifs_sb = cifs_sb;
-       oparms.desired_access = GENERIC_WRITE;
-       oparms.create_options = cifs_create_options(cifs_sb, 0);
-       oparms.disposition = FILE_OPEN;
-       oparms.path = fileName;
-       oparms.fid = &fid;
-       oparms.reconnect = false;
+       oparms = (struct cifs_open_parms) {
+               .tcon = tcon,
+               .cifs_sb = cifs_sb,
+               .desired_access = GENERIC_WRITE,
+               .create_options = cifs_create_options(cifs_sb, 0),
+               .disposition = FILE_OPEN,
+               .path = fileName,
+               .fid = &fid,
+       };
 
        rc = CIFS_open(xid, &oparms, &oplock, NULL);
        if (rc)
@@ -5787,7 +5783,7 @@ QAllEAsRetry:
 
        /* account for ea list len */
        list_len -= 4;
-       temp_fea = ea_response_data->list;
+       temp_fea = &ea_response_data->list;
        temp_ptr = (char *)temp_fea;
        while (list_len > 0) {
                unsigned int name_len;
@@ -5902,7 +5898,7 @@ SetEARetry:
        else
                name_len = strnlen(ea_name, 255);
 
-       count = sizeof(*parm_data) + ea_value_len + name_len;
+       count = sizeof(*parm_data) + 1 + ea_value_len + name_len;
        pSMB->MaxParameterCount = cpu_to_le16(2);
        /* BB find max SMB PDU from sess */
        pSMB->MaxDataCount = cpu_to_le16(1000);
@@ -5926,14 +5922,14 @@ SetEARetry:
        byte_count = 3 /* pad */  + params + count;
        pSMB->DataCount = cpu_to_le16(count);
        parm_data->list_len = cpu_to_le32(count);
-       parm_data->list[0].EA_flags = 0;
+       parm_data->list.EA_flags = 0;
        /* we checked above that name len is less than 255 */
-       parm_data->list[0].name_len = (__u8)name_len;
+       parm_data->list.name_len = (__u8)name_len;
        /* EA names are always ASCII */
        if (ea_name)
-               strncpy(parm_data->list[0].name, ea_name, name_len);
-       parm_data->list[0].name[name_len] = 0;
-       parm_data->list[0].value_len = cpu_to_le16(ea_value_len);
+               strncpy(parm_data->list.name, ea_name, name_len);
+       parm_data->list.name[name_len] = '\0';
+       parm_data->list.value_len = cpu_to_le16(ea_value_len);
        /* caller ensures that ea_value_len is less than 64K but
        we need to ensure that it fits within the smb */
 
@@ -5941,7 +5937,7 @@ SetEARetry:
             negotiated SMB buffer size BB */
        /* if (ea_value_len > buffer_size - 512 (enough for header)) */
        if (ea_value_len)
-               memcpy(parm_data->list[0].name+name_len+1,
+               memcpy(parm_data->list.name + name_len + 1,
                       ea_value, ea_value_len);
 
        pSMB->TotalDataCount = pSMB->DataCount;