Merge branch 'drm-fixes-3.16' of git://people.freedesktop.org/~agd5f/linux into drm...
[firefly-linux-kernel-4.4.55.git] / include / linux / nfs_xdr.h
index 6fb5b2335b59041fbc9b2b62ca063aa6235de470..9a1396e70310f92c40e6a0fe563b86b34f5e6836 100644 (file)
@@ -489,31 +489,21 @@ struct nfs4_delegreturnres {
 };
 
 /*
- * Arguments to the read call.
+ * Arguments to the write call.
  */
-struct nfs_readargs {
-       struct nfs4_sequence_args       seq_args;
-       struct nfs_fh *         fh;
-       struct nfs_open_context *context;
-       struct nfs_lock_context *lock_context;
-       nfs4_stateid            stateid;
-       __u64                   offset;
-       __u32                   count;
-       unsigned int            pgbase;
-       struct page **          pages;
+struct nfs_write_verifier {
+       char                    data[8];
 };
 
-struct nfs_readres {
-       struct nfs4_sequence_res        seq_res;
-       struct nfs_fattr *      fattr;
-       __u32                   count;
-       int                     eof;
+struct nfs_writeverf {
+       struct nfs_write_verifier verifier;
+       enum nfs3_stable_how    committed;
 };
 
 /*
- * Arguments to the write call.
+ * Arguments shared by the read and write call.
  */
-struct nfs_writeargs {
+struct nfs_pgio_args {
        struct nfs4_sequence_args       seq_args;
        struct nfs_fh *         fh;
        struct nfs_open_context *context;
@@ -521,27 +511,20 @@ struct nfs_writeargs {
        nfs4_stateid            stateid;
        __u64                   offset;
        __u32                   count;
-       enum nfs3_stable_how    stable;
        unsigned int            pgbase;
        struct page **          pages;
-       const u32 *             bitmask;
-};
-
-struct nfs_write_verifier {
-       char                    data[8];
+       const u32 *             bitmask;        /* used by write */
+       enum nfs3_stable_how    stable;         /* used by write */
 };
 
-struct nfs_writeverf {
-       struct nfs_write_verifier verifier;
-       enum nfs3_stable_how    committed;
-};
-
-struct nfs_writeres {
+struct nfs_pgio_res {
        struct nfs4_sequence_res        seq_res;
        struct nfs_fattr *      fattr;
-       struct nfs_writeverf *  verf;
        __u32                   count;
-       const struct nfs_server *server;
+       int                     eof;            /* used by read */
+       struct nfs_writeverf *  verf;           /* used by write */
+       const struct nfs_server *server;        /* used by write */
+
 };
 
 /*
@@ -1129,6 +1112,7 @@ struct pnfs_commit_bucket {
        struct list_head committing;
        struct pnfs_layout_segment *wlseg;
        struct pnfs_layout_segment *clseg;
+       struct nfs_writeverf direct_verf;
 };
 
 struct pnfs_ds_commit_info {
@@ -1264,20 +1248,6 @@ struct nfs_page_array {
        struct page             *page_array[NFS_PAGEVEC_SIZE];
 };
 
-struct nfs_read_data {
-       struct nfs_pgio_header  *header;
-       struct list_head        list;
-       struct rpc_task         task;
-       struct nfs_fattr        fattr;  /* fattr storage */
-       struct nfs_readargs args;
-       struct nfs_readres  res;
-       unsigned long           timestamp;      /* For lease renewal */
-       int (*read_done_cb) (struct rpc_task *task, struct nfs_read_data *data);
-       __u64                   mds_offset;
-       struct nfs_page_array   pages;
-       struct nfs_client       *ds_clp;        /* pNFS data server */
-};
-
 /* used as flag bits in nfs_pgio_header */
 enum {
        NFS_IOHDR_ERROR = 0,
@@ -1287,19 +1257,22 @@ enum {
        NFS_IOHDR_NEED_RESCHED,
 };
 
+struct nfs_pgio_data;
+
 struct nfs_pgio_header {
        struct inode            *inode;
        struct rpc_cred         *cred;
        struct list_head        pages;
-       struct list_head        rpc_list;
+       struct nfs_pgio_data    *data;
        atomic_t                refcnt;
        struct nfs_page         *req;
-       struct nfs_writeverf    *verf;
+       struct nfs_writeverf    verf;           /* Used for writes */
        struct pnfs_layout_segment *lseg;
        loff_t                  io_start;
        const struct rpc_call_ops *mds_ops;
        void (*release) (struct nfs_pgio_header *hdr);
        const struct nfs_pgio_completion_ops *completion_ops;
+       const struct nfs_rw_ops *rw_ops;
        struct nfs_direct_req   *dreq;
        void                    *layout_private;
        spinlock_t              lock;
@@ -1310,30 +1283,24 @@ struct nfs_pgio_header {
        unsigned long           flags;
 };
 
-struct nfs_read_header {
-       struct nfs_pgio_header  header;
-       struct nfs_read_data    rpc_data;
-};
-
-struct nfs_write_data {
+struct nfs_pgio_data {
        struct nfs_pgio_header  *header;
-       struct list_head        list;
        struct rpc_task         task;
        struct nfs_fattr        fattr;
-       struct nfs_writeverf    verf;
-       struct nfs_writeargs    args;           /* argument struct */
-       struct nfs_writeres     res;            /* result struct */
+       struct nfs_writeverf    verf;           /* Used for writes */
+       struct nfs_pgio_args    args;           /* argument struct */
+       struct nfs_pgio_res     res;            /* result struct */
        unsigned long           timestamp;      /* For lease renewal */
-       int (*write_done_cb) (struct rpc_task *task, struct nfs_write_data *data);
+       int (*pgio_done_cb) (struct rpc_task *task, struct nfs_pgio_data *data);
        __u64                   mds_offset;     /* Filelayout dense stripe */
        struct nfs_page_array   pages;
        struct nfs_client       *ds_clp;        /* pNFS data server */
+       int                     ds_idx;         /* ds index if ds_clp is set */
 };
 
-struct nfs_write_header {
+struct nfs_rw_header {
        struct nfs_pgio_header  header;
-       struct nfs_write_data   rpc_data;
-       struct nfs_writeverf    verf;
+       struct nfs_pgio_data    rpc_data;
 };
 
 struct nfs_mds_commit_info {
@@ -1465,16 +1432,11 @@ struct nfs_rpc_ops {
                             struct nfs_pathconf *);
        int     (*set_capabilities)(struct nfs_server *, struct nfs_fh *);
        int     (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, int);
-       void    (*read_setup)   (struct nfs_read_data *, struct rpc_message *);
-       void    (*read_pageio_init)(struct nfs_pageio_descriptor *, struct inode *,
-                                   const struct nfs_pgio_completion_ops *);
-       int     (*read_rpc_prepare)(struct rpc_task *, struct nfs_read_data *);
-       int     (*read_done)  (struct rpc_task *, struct nfs_read_data *);
-       void    (*write_setup)  (struct nfs_write_data *, struct rpc_message *);
-       void    (*write_pageio_init)(struct nfs_pageio_descriptor *, struct inode *, int,
-                                    const struct nfs_pgio_completion_ops *);
-       int     (*write_rpc_prepare)(struct rpc_task *, struct nfs_write_data *);
-       int     (*write_done)  (struct rpc_task *, struct nfs_write_data *);
+       int     (*pgio_rpc_prepare)(struct rpc_task *, struct nfs_pgio_data *);
+       void    (*read_setup)   (struct nfs_pgio_data *, struct rpc_message *);
+       int     (*read_done)  (struct rpc_task *, struct nfs_pgio_data *);
+       void    (*write_setup)  (struct nfs_pgio_data *, struct rpc_message *);
+       int     (*write_done)  (struct rpc_task *, struct nfs_pgio_data *);
        void    (*commit_setup) (struct nfs_commit_data *, struct rpc_message *);
        void    (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
        int     (*commit_done) (struct rpc_task *, struct nfs_commit_data *);