From: Long Li <lon...@microsoft.com>

Currently CIFS allocates its own pages for data transfer, they don't need offset
since it's always 0 in the 1st page.

Direct data transfer needs to define an offset because user-data may not start
on the page boundary

Signed-off-by: Long Li <lon...@microsoft.com>
---
 fs/cifs/cifsglob.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
index cb950a5..a51855c 100644
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
@@ -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 */
@@ -1167,8 +1168,10 @@ struct cifs_readdata {
        struct kvec                     iov[2];
 #ifdef CONFIG_CIFS_SMB_DIRECT
        struct smbd_mr                  *mr;
+       struct page                     **direct_pages;
 #endif
        unsigned int                    pagesz;
+       unsigned int                    page_offset;
        unsigned int                    tailsz;
        unsigned int                    credits;
        unsigned int                    nr_pages;
@@ -1192,8 +1195,10 @@ struct cifs_writedata {
        int                             result;
 #ifdef CONFIG_CIFS_SMB_DIRECT
        struct smbd_mr                  *mr;
+       struct page                     **direct_pages;
 #endif
        unsigned int                    pagesz;
+       unsigned int                    page_offset;
        unsigned int                    tailsz;
        unsigned int                    credits;
        unsigned int                    nr_pages;
-- 
2.7.4

Reply via email to