NFS: Add a helper to return a pointer to the open context of a struct nfs_page
authorTrond Myklebust <trondmy@gmail.com>
Sun, 7 Apr 2019 17:59:11 +0000 (13:59 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 25 Apr 2019 18:18:15 +0000 (14:18 -0400)
Add a helper for when we remove the explicit pointer to the open
context.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/filelayout/filelayout.c
fs/nfs/flexfilelayout/flexfilelayout.c
fs/nfs/pagelist.c
fs/nfs/pnfs.c
fs/nfs/pnfs.h
fs/nfs/read.c
fs/nfs/write.c
include/linux/nfs_page.h

index 61f46facb39c379377b22566b00e47d8f0966645..21d9f3bfbc81431de22ec4b3126c36243888cb27 100644 (file)
@@ -917,7 +917,7 @@ filelayout_pg_init_read(struct nfs_pageio_descriptor *pgio,
        pnfs_generic_pg_check_layout(pgio);
        if (!pgio->pg_lseg) {
                pgio->pg_lseg = fl_pnfs_update_layout(pgio->pg_inode,
-                                                     req->wb_context,
+                                                     nfs_req_openctx(req),
                                                      0,
                                                      NFS4_MAX_UINT64,
                                                      IOMODE_READ,
@@ -944,7 +944,7 @@ filelayout_pg_init_write(struct nfs_pageio_descriptor *pgio,
        pnfs_generic_pg_check_layout(pgio);
        if (!pgio->pg_lseg) {
                pgio->pg_lseg = fl_pnfs_update_layout(pgio->pg_inode,
-                                                     req->wb_context,
+                                                     nfs_req_openctx(req),
                                                      0,
                                                      NFS4_MAX_UINT64,
                                                      IOMODE_RW,
index 9fdbcfd3e39d7ff36bea25b3ce58e74d5c7dd722..9920c52bd0cd047d00ab5a8819acf0263249039b 100644 (file)
@@ -873,7 +873,7 @@ ff_layout_pg_get_read(struct nfs_pageio_descriptor *pgio,
 {
        pnfs_put_lseg(pgio->pg_lseg);
        pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
-                                          req->wb_context,
+                                          nfs_req_openctx(req),
                                           0,
                                           NFS4_MAX_UINT64,
                                           IOMODE_READ,
@@ -953,7 +953,7 @@ retry:
        pnfs_generic_pg_check_layout(pgio);
        if (!pgio->pg_lseg) {
                pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
-                                                  req->wb_context,
+                                                  nfs_req_openctx(req),
                                                   0,
                                                   NFS4_MAX_UINT64,
                                                   IOMODE_RW,
@@ -1010,7 +1010,7 @@ ff_layout_pg_get_mirror_count_write(struct nfs_pageio_descriptor *pgio,
 {
        if (!pgio->pg_lseg) {
                pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
-                                                  req->wb_context,
+                                                  nfs_req_openctx(req),
                                                   0,
                                                   NFS4_MAX_UINT64,
                                                   IOMODE_RW,
index 4a31284f411e9e0599f734b2da879e657b10571a..ce6440b793287513a210f6386cc0d9b0816659dc 100644 (file)
@@ -47,7 +47,7 @@ void nfs_pgheader_init(struct nfs_pageio_descriptor *desc,
 
        hdr->req = nfs_list_entry(mirror->pg_list.next);
        hdr->inode = desc->pg_inode;
-       hdr->cred = hdr->req->wb_context->cred;
+       hdr->cred = nfs_req_openctx(hdr->req)->cred;
        hdr->io_start = req_offset(hdr->req);
        hdr->good_bytes = mirror->pg_count;
        hdr->io_completion = desc->pg_io_completion;
@@ -578,7 +578,7 @@ static void nfs_pgio_rpcsetup(struct nfs_pgio_header *hdr,
        hdr->args.pgbase = req->wb_pgbase;
        hdr->args.pages  = hdr->page_array.pagevec;
        hdr->args.count  = count;
-       hdr->args.context = get_nfs_open_context(req->wb_context);
+       hdr->args.context = get_nfs_open_context(nfs_req_openctx(req));
        hdr->args.lock_context = req->wb_lock_context;
        hdr->args.stable  = NFS_UNSTABLE;
        switch (how & (FLUSH_STABLE | FLUSH_COND_STABLE)) {
@@ -935,9 +935,9 @@ static bool nfs_can_coalesce_requests(struct nfs_page *prev,
        struct file_lock_context *flctx;
 
        if (prev) {
-               if (!nfs_match_open_context(req->wb_context, prev->wb_context))
+               if (!nfs_match_open_context(nfs_req_openctx(req), nfs_req_openctx(prev)))
                        return false;
-               flctx = d_inode(req->wb_context->dentry)->i_flctx;
+               flctx = d_inode(nfs_req_openctx(req)->dentry)->i_flctx;
                if (flctx != NULL &&
                    !(list_empty_careful(&flctx->flc_posix) &&
                      list_empty_careful(&flctx->flc_flock)) &&
index 7066cd7c7aff33eff193ce22e7eb28c6a39abecb..83722e936b4a3a66428fb70d55d2688cb12d58f1 100644 (file)
@@ -2436,7 +2436,7 @@ pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *r
                        rd_size = nfs_dreq_bytes_left(pgio->pg_dreq);
 
                pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
-                                                  req->wb_context,
+                                                  nfs_req_openctx(req),
                                                   req_offset(req),
                                                   rd_size,
                                                   IOMODE_READ,
@@ -2463,7 +2463,7 @@ pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
        pnfs_generic_pg_check_range(pgio, req);
        if (pgio->pg_lseg == NULL) {
                pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
-                                                  req->wb_context,
+                                                  nfs_req_openctx(req),
                                                   req_offset(req),
                                                   wb_size,
                                                   IOMODE_RW,
index c0420b979d882cbf0245ecd22df897c3236eba57..f15609c003d8398f1329353c266eb2a131f0a435 100644 (file)
@@ -459,7 +459,7 @@ static inline bool
 pnfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg,
                         struct nfs_commit_info *cinfo, u32 ds_commit_idx)
 {
-       struct inode *inode = d_inode(req->wb_context->dentry);
+       struct inode *inode = d_inode(nfs_req_openctx(req)->dentry);
        struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld;
 
        if (lseg == NULL || ld->mark_request_commit == NULL)
@@ -471,7 +471,7 @@ pnfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg,
 static inline bool
 pnfs_clear_request_commit(struct nfs_page *req, struct nfs_commit_info *cinfo)
 {
-       struct inode *inode = d_inode(req->wb_context->dentry);
+       struct inode *inode = d_inode(nfs_req_openctx(req)->dentry);
        struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld;
 
        if (ld == NULL || ld->clear_request_commit == NULL)
index fad1333dbf71fd49d2bb1a6d4f3da3e4bd175434..c799e540ed1e1bd211d89d4dbd6f3e3e0c0c578c 100644 (file)
@@ -92,7 +92,7 @@ EXPORT_SYMBOL_GPL(nfs_pageio_reset_read_mds);
 
 static void nfs_readpage_release(struct nfs_page *req)
 {
-       struct inode *inode = d_inode(req->wb_context->dentry);
+       struct inode *inode = d_inode(nfs_req_openctx(req)->dentry);
 
        dprintk("NFS: read done (%s/%llu %d@%lld)\n", inode->i_sb->s_id,
                (unsigned long long)NFS_FILEID(inode), req->wb_bytes,
index 294604784f708db35cbd4c53bb1db053bd94c457..bc5bb932341290c217ad8c212e38c97640db35d9 100644 (file)
@@ -964,7 +964,8 @@ static void
 nfs_clear_request_commit(struct nfs_page *req)
 {
        if (test_bit(PG_CLEAN, &req->wb_flags)) {
-               struct inode *inode = d_inode(req->wb_context->dentry);
+               struct nfs_open_context *ctx = nfs_req_openctx(req);
+               struct inode *inode = d_inode(ctx->dentry);
                struct nfs_commit_info cinfo;
 
                nfs_init_cinfo_from_inode(&cinfo, inode);
@@ -1219,7 +1220,7 @@ int nfs_flush_incompatible(struct file *file, struct page *page)
                        return 0;
                l_ctx = req->wb_lock_context;
                do_flush = req->wb_page != page ||
-                       !nfs_match_open_context(req->wb_context, ctx);
+                       !nfs_match_open_context(nfs_req_openctx(req), ctx);
                if (l_ctx && flctx &&
                    !(list_empty_careful(&flctx->flc_posix) &&
                      list_empty_careful(&flctx->flc_flock))) {
@@ -1422,7 +1423,7 @@ static void nfs_redirty_request(struct nfs_page *req)
        /* Bump the transmission count */
        req->wb_nio++;
        nfs_mark_request_dirty(req);
-       set_bit(NFS_CONTEXT_RESEND_WRITES, &req->wb_context->flags);
+       set_bit(NFS_CONTEXT_RESEND_WRITES, &nfs_req_openctx(req)->flags);
        nfs_end_page_writeback(req);
        nfs_release_request(req);
 }
@@ -1742,7 +1743,8 @@ void nfs_init_commit(struct nfs_commit_data *data,
                     struct nfs_commit_info *cinfo)
 {
        struct nfs_page *first = nfs_list_entry(head->next);
-       struct inode *inode = d_inode(first->wb_context->dentry);
+       struct nfs_open_context *ctx = nfs_req_openctx(first);
+       struct inode *inode = d_inode(ctx->dentry);
 
        /* Set up the RPC argument and reply structs
         * NB: take care not to mess about with data->commit et al. */
@@ -1750,7 +1752,7 @@ void nfs_init_commit(struct nfs_commit_data *data,
        list_splice_init(head, &data->pages);
 
        data->inode       = inode;
-       data->cred        = first->wb_context->cred;
+       data->cred        = ctx->cred;
        data->lseg        = lseg; /* reference transferred */
        /* only set lwb for pnfs commit */
        if (lseg)
@@ -1763,7 +1765,7 @@ void nfs_init_commit(struct nfs_commit_data *data,
        /* Note: we always request a commit of the entire inode */
        data->args.offset = 0;
        data->args.count  = 0;
-       data->context     = get_nfs_open_context(first->wb_context);
+       data->context     = get_nfs_open_context(ctx);
        data->res.fattr   = &data->fattr;
        data->res.verf    = &data->verf;
        nfs_fattr_init(&data->fattr);
@@ -1846,8 +1848,8 @@ static void nfs_commit_release_pages(struct nfs_commit_data *data)
                        nfs_clear_page_commit(req->wb_page);
 
                dprintk("NFS:       commit (%s/%llu %d@%lld)",
-                       req->wb_context->dentry->d_sb->s_id,
-                       (unsigned long long)NFS_FILEID(d_inode(req->wb_context->dentry)),
+                       nfs_req_openctx(req)->dentry->d_sb->s_id,
+                       (unsigned long long)NFS_FILEID(d_inode(nfs_req_openctx(req)->dentry)),
                        req->wb_bytes,
                        (long long)req_offset(req));
                if (status < 0) {
@@ -1871,7 +1873,7 @@ static void nfs_commit_release_pages(struct nfs_commit_data *data)
                /* We have a mismatch. Write the page again */
                dprintk_cont(" mismatch\n");
                nfs_mark_request_dirty(req);
-               set_bit(NFS_CONTEXT_RESEND_WRITES, &req->wb_context->flags);
+               set_bit(NFS_CONTEXT_RESEND_WRITES, &nfs_req_openctx(req)->flags);
        next:
                nfs_unlock_and_release_request(req);
                /* Latency breaker */
index 8b36800d342d24f0fe526ea99773a4352fb3dcc2..1ea13e94feb769bf07c9e79cfb32e3570dfd08cf 100644 (file)
@@ -200,4 +200,10 @@ loff_t req_offset(struct nfs_page *req)
        return (((loff_t)req->wb_index) << PAGE_SHIFT) + req->wb_offset;
 }
 
+static inline struct nfs_open_context *
+nfs_req_openctx(struct nfs_page *req)
+{
+       return req->wb_context;
+}
+
 #endif /* _LINUX_NFS_PAGE_H */