123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /*
- * pNFS functions to call and manage layout drivers.
- *
- * Copyright (c) 2002 [year of first publication]
- * The Regents of the University of Michigan
- * All Rights Reserved
- *
- * Dean Hildebrand <dhildebz@umich.edu>
- *
- * Permission is granted to use, copy, create derivative works, and
- * redistribute this software and such derivative works for any purpose,
- * so long as the name of the University of Michigan is not used in
- * any advertising or publicity pertaining to the use or distribution
- * of this software without specific, written prior authorization. If
- * the above copyright notice or any other identification of the
- * University of Michigan is included in any copy of any portion of
- * this software, then the disclaimer below must also be included.
- *
- * This software is provided as is, without representation or warranty
- * of any kind either express or implied, including without limitation
- * the implied warranties of merchantability, fitness for a particular
- * purpose, or noninfringement. The Regents of the University of
- * Michigan shall not be liable for any damages, including special,
- * indirect, incidental, or consequential damages, with respect to any
- * claim arising out of or in connection with the use of the software,
- * even if it has been or is hereafter advised of the possibility of
- * such damages.
- */
- #include <linux/nfs_fs.h>
- #include "pnfs.h"
- #define NFSDBG_FACILITY NFSDBG_PNFS
- /* STUB that returns the equivalent of "no module found" */
- static struct pnfs_layoutdriver_type *
- find_pnfs_driver(u32 id)
- {
- return NULL;
- }
- void
- unset_pnfs_layoutdriver(struct nfs_server *nfss)
- {
- nfss->pnfs_curr_ld = NULL;
- }
- /*
- * Try to set the server's pnfs module to the pnfs layout type specified by id.
- * Currently only one pNFS layout driver per filesystem is supported.
- *
- * @id layout type. Zero (illegal layout type) indicates pNFS not in use.
- */
- void
- set_pnfs_layoutdriver(struct nfs_server *server, u32 id)
- {
- struct pnfs_layoutdriver_type *ld_type = NULL;
- if (id == 0)
- goto out_no_driver;
- if (!(server->nfs_client->cl_exchange_flags &
- (EXCHGID4_FLAG_USE_NON_PNFS | EXCHGID4_FLAG_USE_PNFS_MDS))) {
- printk(KERN_ERR "%s: id %u cl_exchange_flags 0x%x\n", __func__,
- id, server->nfs_client->cl_exchange_flags);
- goto out_no_driver;
- }
- ld_type = find_pnfs_driver(id);
- if (!ld_type) {
- request_module("%s-%u", LAYOUT_NFSV4_1_MODULE_PREFIX, id);
- ld_type = find_pnfs_driver(id);
- if (!ld_type) {
- dprintk("%s: No pNFS module found for %u.\n",
- __func__, id);
- goto out_no_driver;
- }
- }
- server->pnfs_curr_ld = ld_type;
- dprintk("%s: pNFS module for %u set\n", __func__, id);
- return;
- out_no_driver:
- dprintk("%s: Using NFSv4 I/O\n", __func__);
- server->pnfs_curr_ld = NULL;
- }
|