diff options
author | Andreas Gruenbacher <agruen@suse.de> | 2006-02-01 06:04:34 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-01 11:53:09 -0500 |
commit | 3fb803a990cd17546bd89c38e0e29a891f71ce7d (patch) | |
tree | 11a1da8788161c689734b53c40784a7737d1c118 /fs/nfsd | |
parent | 3a2ca64496cc1c9aeab1076e06d092b3ec74a43d (diff) |
[PATCH] knfsd: Restore recently broken ACL functionality to NFS server
A recent patch to
Allow run-time selection of NFS versions to export
meant that NO nfsacl service versions were exported. This patch restored
that functionality.
Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/nfsd')
-rw-r--r-- | fs/nfsd/nfssvc.c | 76 |
1 files changed, 49 insertions, 27 deletions
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c index 89ed04696865..1d163b616915 100644 --- a/fs/nfsd/nfssvc.c +++ b/fs/nfsd/nfssvc.c | |||
@@ -64,6 +64,32 @@ struct nfsd_list { | |||
64 | }; | 64 | }; |
65 | static struct list_head nfsd_list = LIST_HEAD_INIT(nfsd_list); | 65 | static struct list_head nfsd_list = LIST_HEAD_INIT(nfsd_list); |
66 | 66 | ||
67 | #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) | ||
68 | static struct svc_stat nfsd_acl_svcstats; | ||
69 | static struct svc_version * nfsd_acl_version[] = { | ||
70 | [2] = &nfsd_acl_version2, | ||
71 | [3] = &nfsd_acl_version3, | ||
72 | }; | ||
73 | |||
74 | #define NFSD_ACL_MINVERS 2 | ||
75 | #define NFSD_ACL_NRVERS (sizeof(nfsd_acl_version)/sizeof(nfsd_acl_version[0])) | ||
76 | static struct svc_version *nfsd_acl_versions[NFSD_ACL_NRVERS]; | ||
77 | |||
78 | static struct svc_program nfsd_acl_program = { | ||
79 | .pg_prog = NFS_ACL_PROGRAM, | ||
80 | .pg_nvers = NFSD_ACL_NRVERS, | ||
81 | .pg_vers = nfsd_acl_versions, | ||
82 | .pg_name = "nfsd", | ||
83 | .pg_class = "nfsd", | ||
84 | .pg_stats = &nfsd_acl_svcstats, | ||
85 | .pg_authenticate = &svc_set_client, | ||
86 | }; | ||
87 | |||
88 | static struct svc_stat nfsd_acl_svcstats = { | ||
89 | .program = &nfsd_acl_program, | ||
90 | }; | ||
91 | #endif /* defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) */ | ||
92 | |||
67 | static struct svc_version * nfsd_version[] = { | 93 | static struct svc_version * nfsd_version[] = { |
68 | [2] = &nfsd_version2, | 94 | [2] = &nfsd_version2, |
69 | #if defined(CONFIG_NFSD_V3) | 95 | #if defined(CONFIG_NFSD_V3) |
@@ -79,6 +105,9 @@ static struct svc_version * nfsd_version[] = { | |||
79 | static struct svc_version *nfsd_versions[NFSD_NRVERS]; | 105 | static struct svc_version *nfsd_versions[NFSD_NRVERS]; |
80 | 106 | ||
81 | struct svc_program nfsd_program = { | 107 | struct svc_program nfsd_program = { |
108 | #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) | ||
109 | .pg_next = &nfsd_acl_program, | ||
110 | #endif | ||
82 | .pg_prog = NFS_PROGRAM, /* program number */ | 111 | .pg_prog = NFS_PROGRAM, /* program number */ |
83 | .pg_nvers = NFSD_NRVERS, /* nr of entries in nfsd_version */ | 112 | .pg_nvers = NFSD_NRVERS, /* nr of entries in nfsd_version */ |
84 | .pg_vers = nfsd_versions, /* version table */ | 113 | .pg_vers = nfsd_versions, /* version table */ |
@@ -147,6 +176,26 @@ nfsd_svc(unsigned short port, int nrservs) | |||
147 | nfsd_program.pg_vers[i] = nfsd_version[i]; | 176 | nfsd_program.pg_vers[i] = nfsd_version[i]; |
148 | } | 177 | } |
149 | 178 | ||
179 | |||
180 | #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) | ||
181 | found_one = 0; | ||
182 | |||
183 | for (i = NFSD_ACL_MINVERS; i < NFSD_ACL_NRVERS; i++) { | ||
184 | if (NFSCTL_VERISSET(nfsd_versbits, i)) { | ||
185 | nfsd_acl_program.pg_vers[i] = | ||
186 | nfsd_acl_version[i]; | ||
187 | found_one = 1; | ||
188 | } else | ||
189 | nfsd_acl_program.pg_vers[i] = NULL; | ||
190 | } | ||
191 | |||
192 | if (!found_one) { | ||
193 | for (i = NFSD_ACL_MINVERS; i < NFSD_ACL_NRVERS; i++) | ||
194 | nfsd_acl_program.pg_vers[i] = | ||
195 | nfsd_acl_version[i]; | ||
196 | } | ||
197 | #endif | ||
198 | |||
150 | atomic_set(&nfsd_busy, 0); | 199 | atomic_set(&nfsd_busy, 0); |
151 | error = -ENOMEM; | 200 | error = -ENOMEM; |
152 | nfsd_serv = svc_create(&nfsd_program, NFSD_BUFSIZE); | 201 | nfsd_serv = svc_create(&nfsd_program, NFSD_BUFSIZE); |
@@ -411,30 +460,3 @@ nfsd_dispatch(struct svc_rqst *rqstp, u32 *statp) | |||
411 | nfsd_cache_update(rqstp, proc->pc_cachetype, statp + 1); | 460 | nfsd_cache_update(rqstp, proc->pc_cachetype, statp + 1); |
412 | return 1; | 461 | return 1; |
413 | } | 462 | } |
414 | |||
415 | #if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) | ||
416 | static struct svc_stat nfsd_acl_svcstats; | ||
417 | static struct svc_version * nfsd_acl_version[] = { | ||
418 | [2] = &nfsd_acl_version2, | ||
419 | [3] = &nfsd_acl_version3, | ||
420 | }; | ||
421 | |||
422 | #define NFSD_ACL_NRVERS (sizeof(nfsd_acl_version)/sizeof(nfsd_acl_version[0])) | ||
423 | static struct svc_program nfsd_acl_program = { | ||
424 | .pg_prog = NFS_ACL_PROGRAM, | ||
425 | .pg_nvers = NFSD_ACL_NRVERS, | ||
426 | .pg_vers = nfsd_acl_version, | ||
427 | .pg_name = "nfsd", | ||
428 | .pg_class = "nfsd", | ||
429 | .pg_stats = &nfsd_acl_svcstats, | ||
430 | .pg_authenticate = &svc_set_client, | ||
431 | }; | ||
432 | |||
433 | static struct svc_stat nfsd_acl_svcstats = { | ||
434 | .program = &nfsd_acl_program, | ||
435 | }; | ||
436 | |||
437 | #define nfsd_acl_program_p &nfsd_acl_program | ||
438 | #else | ||
439 | #define nfsd_acl_program_p NULL | ||
440 | #endif /* defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL) */ | ||