Merge tag 'pci-v5.18-changes-2' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / fs / nfs / pnfs.c
index 7c9090a28e5c3d07247ff189349757706e88f784..856c962273c710cd860646bc6bfd7c4114770bb3 100644 (file)
@@ -92,6 +92,17 @@ find_pnfs_driver(u32 id)
        return local;
 }
 
+const struct pnfs_layoutdriver_type *pnfs_find_layoutdriver(u32 id)
+{
+       return find_pnfs_driver(id);
+}
+
+void pnfs_put_layoutdriver(const struct pnfs_layoutdriver_type *ld)
+{
+       if (ld)
+               module_put(ld->owner);
+}
+
 void
 unset_pnfs_layoutdriver(struct nfs_server *nfss)
 {
@@ -1233,7 +1244,7 @@ pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo,
        int status = 0;
 
        *pcred = NULL;
-       lrp = kzalloc(sizeof(*lrp), GFP_NOFS);
+       lrp = kzalloc(sizeof(*lrp), nfs_io_gfp_mask());
        if (unlikely(lrp == NULL)) {
                status = -ENOMEM;
                spin_lock(&ino->i_lock);
@@ -2206,7 +2217,7 @@ _pnfs_grab_empty_layout(struct inode *ino, struct nfs_open_context *ctx)
        struct pnfs_layout_hdr *lo;
 
        spin_lock(&ino->i_lock);
-       lo = pnfs_find_alloc_layout(ino, ctx, GFP_KERNEL);
+       lo = pnfs_find_alloc_layout(ino, ctx, nfs_io_gfp_mask());
        if (!lo)
                goto out_unlock;
        if (!test_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags))
@@ -2249,8 +2260,8 @@ static void _lgopen_prepare_attached(struct nfs4_opendata *data,
        lo = _pnfs_grab_empty_layout(ino, ctx);
        if (!lo)
                return;
-       lgp = pnfs_alloc_init_layoutget_args(ino, ctx, &current_stateid,
-                                            &rng, GFP_KERNEL);
+       lgp = pnfs_alloc_init_layoutget_args(ino, ctx, &current_stateid, &rng,
+                                            nfs_io_gfp_mask());
        if (!lgp) {
                pnfs_clear_first_layoutget(lo);
                nfs_layoutget_end(lo);
@@ -2275,8 +2286,8 @@ static void _lgopen_prepare_floating(struct nfs4_opendata *data,
        };
        struct nfs4_layoutget *lgp;
 
-       lgp = pnfs_alloc_init_layoutget_args(ino, ctx, &current_stateid,
-                                            &rng, GFP_KERNEL);
+       lgp = pnfs_alloc_init_layoutget_args(ino, ctx, &current_stateid, &rng,
+                                            nfs_io_gfp_mask());
        if (!lgp)
                return;
        data->lgp = lgp;
@@ -2691,13 +2702,11 @@ pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *r
                else
                        rd_size = nfs_dreq_bytes_left(pgio->pg_dreq);
 
-               pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
-                                                  nfs_req_openctx(req),
-                                                  req_offset(req),
-                                                  rd_size,
-                                                  IOMODE_READ,
-                                                  false,
-                                                  GFP_KERNEL);
+               pgio->pg_lseg =
+                       pnfs_update_layout(pgio->pg_inode, nfs_req_openctx(req),
+                                          req_offset(req), rd_size,
+                                          IOMODE_READ, false,
+                                          nfs_io_gfp_mask());
                if (IS_ERR(pgio->pg_lseg)) {
                        pgio->pg_error = PTR_ERR(pgio->pg_lseg);
                        pgio->pg_lseg = NULL;
@@ -2718,13 +2727,10 @@ pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio,
        pnfs_generic_pg_check_layout(pgio);
        pnfs_generic_pg_check_range(pgio, req);
        if (pgio->pg_lseg == NULL) {
-               pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
-                                                  nfs_req_openctx(req),
-                                                  req_offset(req),
-                                                  wb_size,
-                                                  IOMODE_RW,
-                                                  false,
-                                                  GFP_KERNEL);
+               pgio->pg_lseg =
+                       pnfs_update_layout(pgio->pg_inode, nfs_req_openctx(req),
+                                          req_offset(req), wb_size, IOMODE_RW,
+                                          false, nfs_io_gfp_mask());
                if (IS_ERR(pgio->pg_lseg)) {
                        pgio->pg_error = PTR_ERR(pgio->pg_lseg);
                        pgio->pg_lseg = NULL;
@@ -3183,7 +3189,7 @@ pnfs_layoutcommit_inode(struct inode *inode, bool sync)
 
        status = -ENOMEM;
        /* Note kzalloc ensures data->res.seq_res.sr_slot == NULL */
-       data = kzalloc(sizeof(*data), GFP_NOFS);
+       data = kzalloc(sizeof(*data), nfs_io_gfp_mask());
        if (!data)
                goto clear_layoutcommitting;
 
@@ -3250,7 +3256,7 @@ struct nfs4_threshold *pnfs_mdsthreshold_alloc(void)
 {
        struct nfs4_threshold *thp;
 
-       thp = kzalloc(sizeof(*thp), GFP_NOFS);
+       thp = kzalloc(sizeof(*thp), nfs_io_gfp_mask());
        if (!thp) {
                dprintk("%s mdsthreshold allocation failed\n", __func__);
                return NULL;