diff options
author | Ricardo Labiaga <Ricardo.Labiaga@netapp.com> | 2010-10-20 00:17:58 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2010-10-24 18:07:10 -0400 |
commit | 85e174ba6b786ad336eb2df105b4f66d0932e70a (patch) | |
tree | eec6b01d897e85c47471f4166201676001c9fd21 /fs/nfs/pnfs.c | |
parent | 504913fbc84c00bba7224d73e4aab525c1731f7d (diff) |
NFS: set layout driver
Put in the infrastructure that uses information returned from the
server at mount to select a layout driver module.
In this patch, a stub is used that always returns "no driver found".
Signed-off-by: Ricardo Labiaga <Ricardo.Labiaga@netapp.com>
Signed-off-by: Dean Hildebrand <dhildebz@umich.edu>
Signed-off-by: Marc Eshel <eshel@almaden.ibm.com>
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
Signed-off-by: Fred Isaman <iisaman@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/pnfs.c')
-rw-r--r-- | fs/nfs/pnfs.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c new file mode 100644 index 000000000000..b483026e82aa --- /dev/null +++ b/fs/nfs/pnfs.c | |||
@@ -0,0 +1,84 @@ | |||
1 | /* | ||
2 | * pNFS functions to call and manage layout drivers. | ||
3 | * | ||
4 | * Copyright (c) 2002 [year of first publication] | ||
5 | * The Regents of the University of Michigan | ||
6 | * All Rights Reserved | ||
7 | * | ||
8 | * Dean Hildebrand <dhildebz@umich.edu> | ||
9 | * | ||
10 | * Permission is granted to use, copy, create derivative works, and | ||
11 | * redistribute this software and such derivative works for any purpose, | ||
12 | * so long as the name of the University of Michigan is not used in | ||
13 | * any advertising or publicity pertaining to the use or distribution | ||
14 | * of this software without specific, written prior authorization. If | ||
15 | * the above copyright notice or any other identification of the | ||
16 | * University of Michigan is included in any copy of any portion of | ||
17 | * this software, then the disclaimer below must also be included. | ||
18 | * | ||
19 | * This software is provided as is, without representation or warranty | ||
20 | * of any kind either express or implied, including without limitation | ||
21 | * the implied warranties of merchantability, fitness for a particular | ||
22 | * purpose, or noninfringement. The Regents of the University of | ||
23 | * Michigan shall not be liable for any damages, including special, | ||
24 | * indirect, incidental, or consequential damages, with respect to any | ||
25 | * claim arising out of or in connection with the use of the software, | ||
26 | * even if it has been or is hereafter advised of the possibility of | ||
27 | * such damages. | ||
28 | */ | ||
29 | |||
30 | #include <linux/nfs_fs.h> | ||
31 | #include "pnfs.h" | ||
32 | |||
33 | #define NFSDBG_FACILITY NFSDBG_PNFS | ||
34 | |||
35 | /* STUB that returns the equivalent of "no module found" */ | ||
36 | static struct pnfs_layoutdriver_type * | ||
37 | find_pnfs_driver(u32 id) | ||
38 | { | ||
39 | return NULL; | ||
40 | } | ||
41 | |||
42 | void | ||
43 | unset_pnfs_layoutdriver(struct nfs_server *nfss) | ||
44 | { | ||
45 | nfss->pnfs_curr_ld = NULL; | ||
46 | } | ||
47 | |||
48 | /* | ||
49 | * Try to set the server's pnfs module to the pnfs layout type specified by id. | ||
50 | * Currently only one pNFS layout driver per filesystem is supported. | ||
51 | * | ||
52 | * @id layout type. Zero (illegal layout type) indicates pNFS not in use. | ||
53 | */ | ||
54 | void | ||
55 | set_pnfs_layoutdriver(struct nfs_server *server, u32 id) | ||
56 | { | ||
57 | struct pnfs_layoutdriver_type *ld_type = NULL; | ||
58 | |||
59 | if (id == 0) | ||
60 | goto out_no_driver; | ||
61 | if (!(server->nfs_client->cl_exchange_flags & | ||
62 | (EXCHGID4_FLAG_USE_NON_PNFS | EXCHGID4_FLAG_USE_PNFS_MDS))) { | ||
63 | printk(KERN_ERR "%s: id %u cl_exchange_flags 0x%x\n", __func__, | ||
64 | id, server->nfs_client->cl_exchange_flags); | ||
65 | goto out_no_driver; | ||
66 | } | ||
67 | ld_type = find_pnfs_driver(id); | ||
68 | if (!ld_type) { | ||
69 | request_module("%s-%u", LAYOUT_NFSV4_1_MODULE_PREFIX, id); | ||
70 | ld_type = find_pnfs_driver(id); | ||
71 | if (!ld_type) { | ||
72 | dprintk("%s: No pNFS module found for %u.\n", | ||
73 | __func__, id); | ||
74 | goto out_no_driver; | ||
75 | } | ||
76 | } | ||
77 | server->pnfs_curr_ld = ld_type; | ||
78 | dprintk("%s: pNFS module for %u set\n", __func__, id); | ||
79 | return; | ||
80 | |||
81 | out_no_driver: | ||
82 | dprintk("%s: Using NFSv4 I/O\n", __func__); | ||
83 | server->pnfs_curr_ld = NULL; | ||
84 | } | ||