CIFS: Introduce offset for the 1st page in data transfer structures
authorLong Li <longli@microsoft.com>
Wed, 30 May 2018 19:47:53 +0000 (12:47 -0700)
committerSteve French <stfrench@microsoft.com>
Wed, 30 May 2018 21:06:12 +0000 (16:06 -0500)
When direct I/O is used, the data buffer may not always align to page
boundaries. Introduce a page offset in transport data structures to
describe the location of the buffer within the page.

Also change the function to pass the page offset when sending data to
transport.

Signed-off-by: Long Li <longli@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/cifsglob.h
fs/cifs/smb2pdu.c

index 4f674b75bbc87df10a00593ec29d914e77ef8439..8d16c3e450da822593e38ff8b1ac0ce7d53c1df4 100644 (file)
@@ -176,6 +176,7 @@ struct smb_rqst {
        struct kvec     *rq_iov;        /* array of kvecs */
        unsigned int    rq_nvec;        /* number of kvecs in array */
        struct page     **rq_pages;     /* pointer to array of page ptrs */
+       unsigned int    rq_offset;      /* the offset to the 1st page */
        unsigned int    rq_npages;      /* number pages in array */
        unsigned int    rq_pagesz;      /* page size to use */
        unsigned int    rq_tailsz;      /* length of last page */
@@ -1174,6 +1175,7 @@ struct cifs_readdata {
        struct smbd_mr                  *mr;
 #endif
        unsigned int                    pagesz;
+       unsigned int                    page_offset;
        unsigned int                    tailsz;
        unsigned int                    credits;
        unsigned int                    nr_pages;
@@ -1199,6 +1201,7 @@ struct cifs_writedata {
        struct smbd_mr                  *mr;
 #endif
        unsigned int                    pagesz;
+       unsigned int                    page_offset;
        unsigned int                    tailsz;
        unsigned int                    credits;
        unsigned int                    nr_pages;
index 47d53314fc7f1c22e90f89ff9806416a02b7c430..a02f6b674d0f9d7cc115760a49b112bf54ca9dd6 100644 (file)
@@ -3045,6 +3045,7 @@ smb2_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;