85 lines
2.7 KiB
C
85 lines
2.7 KiB
C
|
/*
|
||
|
* 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;
|
||
|
}
|