* [PATCH 1/2] AFS: Make the match_*() functions take const options @ 2007-05-01 17:47 David Howells 2007-05-01 17:47 ` [PATCH 2/2] AFS/AF_RXRPC: Miscellaneous fixes David Howells 2007-05-03 10:10 ` [PATCH 1/2] AFS: Make the match_*() functions take const options David Miller 0 siblings, 2 replies; 6+ messages in thread From: David Howells @ 2007-05-01 17:47 UTC (permalink / raw) To: torvalds, akpm; +Cc: linux-kernel, linux-fsdevel, netdev, geert, dhowells Make the match_*() functions take a const pointer to the options table and make strings pointers in the options table const too. Signed-off-by: David Howells <dhowells@redhat.com> --- include/linux/parser.h | 8 ++++---- lib/parser.c | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/linux/parser.h b/include/linux/parser.h index fa33328..86676f6 100644 --- a/include/linux/parser.h +++ b/include/linux/parser.h @@ -11,10 +11,10 @@ /* associates an integer enumerator with a pattern string. */ struct match_token { int token; - char *pattern; + const char *pattern; }; -typedef struct match_token match_table_t[]; +typedef const struct match_token match_table_t[]; /* Maximum number of arguments that match_token will find in a pattern */ enum {MAX_OPT_ARGS = 3}; @@ -29,5 +29,5 @@ int match_token(char *, match_table_t table, substring_t args[]); int match_int(substring_t *, int *result); int match_octal(substring_t *, int *result); int match_hex(substring_t *, int *result); -void match_strcpy(char *, substring_t *); -char *match_strdup(substring_t *); +void match_strcpy(char *, const substring_t *); +char *match_strdup(const substring_t *); diff --git a/lib/parser.c b/lib/parser.c index 7ad2a48..703c8c1 100644 --- a/lib/parser.c +++ b/lib/parser.c @@ -22,7 +22,7 @@ * match extremely simple token=arg style patterns. If the pattern is found, * the location(s) of the arguments will be returned in the @args array. */ -static int match_one(char *s, char *p, substring_t args[]) +static int match_one(char *s, const char *p, substring_t args[]) { char *meta; int argc = 0; @@ -43,7 +43,7 @@ static int match_one(char *s, char *p, substring_t args[]) p = meta + 1; if (isdigit(*p)) - len = simple_strtoul(p, &p, 10); + len = simple_strtoul(p, (char **) &p, 10); else if (*p == '%') { if (*s++ != '%') return 0; @@ -102,7 +102,7 @@ static int match_one(char *s, char *p, substring_t args[]) */ int match_token(char *s, match_table_t table, substring_t args[]) { - struct match_token *p; + const struct match_token *p; for (p = table; !match_one(s, p->pattern, args) ; p++) ; @@ -190,7 +190,7 @@ int match_hex(substring_t *s, int *result) * &substring_t @s to the c-style string @to. Caller guarantees that @to is * large enough to hold the characters of @s. */ -void match_strcpy(char *to, substring_t *s) +void match_strcpy(char *to, const substring_t *s) { memcpy(to, s->from, s->to - s->from); to[s->to - s->from] = '\0'; @@ -204,7 +204,7 @@ void match_strcpy(char *to, substring_t *s) * the &substring_t @s. The caller is responsible for freeing the returned * string with kfree(). */ -char *match_strdup(substring_t *s) +char *match_strdup(const substring_t *s) { char *p = kmalloc(s->to - s->from + 1, GFP_KERNEL); if (p) ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] AFS/AF_RXRPC: Miscellaneous fixes 2007-05-01 17:47 [PATCH 1/2] AFS: Make the match_*() functions take const options David Howells @ 2007-05-01 17:47 ` David Howells 2007-05-01 18:08 ` Geert Uytterhoeven ` (2 more replies) 2007-05-03 10:10 ` [PATCH 1/2] AFS: Make the match_*() functions take const options David Miller 1 sibling, 3 replies; 6+ messages in thread From: David Howells @ 2007-05-01 17:47 UTC (permalink / raw) To: torvalds, akpm; +Cc: linux-kernel, linux-fsdevel, netdev, geert, dhowells Make miscellaneous fixes to AFS and AF_RXRPC: (*) Make AF_RXRPC select KEYS rather than RXKAD or AFS_FS in Kconfig. (*) Don't use FS_BINARY_MOUNTDATA. (*) Remove a done 'TODO' item in a comemnt on afs_get_sb(). (*) Don't pass a void * as the page pointer argument of kmap_atomic() as this breaks on m68k. Patch from Geert Uytterhoeven <geert@linux-m68k.org>. (*) Use match_*() functions rather than doing my own parsing. Signed-off-by: David Howells <dhowells@redhat.com> --- fs/Kconfig | 1 - fs/afs/fsclient.c | 3 +- fs/afs/super.c | 100 +++++++++++++++++++++++------------------------------ net/rxrpc/Kconfig | 3 +- 4 files changed, 47 insertions(+), 60 deletions(-) diff --git a/fs/Kconfig b/fs/Kconfig index a42f767..e33c089 100644 --- a/fs/Kconfig +++ b/fs/Kconfig @@ -2020,7 +2020,6 @@ config AFS_FS tristate "Andrew File System support (AFS) (EXPERIMENTAL)" depends on INET && EXPERIMENTAL select AF_RXRPC - select KEYS help If you say Y here, you will get an experimental Andrew File System driver. It currently only supports unsecured read-only AFS access. diff --git a/fs/afs/fsclient.c b/fs/afs/fsclient.c index 2393d2a..e54e6c2 100644 --- a/fs/afs/fsclient.c +++ b/fs/afs/fsclient.c @@ -266,7 +266,8 @@ static int afs_deliver_fs_fetch_data(struct afs_call *call, call->unmarshall++; if (call->count < PAGE_SIZE) { - buffer = kmap_atomic(call->reply3, KM_USER0); + page = call->reply3; + buffer = kmap_atomic(page, KM_USER0); memset(buffer + PAGE_SIZE - call->count, 0, call->count); kunmap_atomic(buffer, KM_USER0); diff --git a/fs/afs/super.c b/fs/afs/super.c index cebd03c..41173f8 100644 --- a/fs/afs/super.c +++ b/fs/afs/super.c @@ -20,6 +20,7 @@ #include <linux/slab.h> #include <linux/fs.h> #include <linux/pagemap.h> +#include <linux/parser.h> #include "internal.h" #define AFS_FS_MAGIC 0x6B414653 /* 'kAFS' */ @@ -42,7 +43,7 @@ struct file_system_type afs_fs_type = { .name = "afs", .get_sb = afs_get_sb, .kill_sb = kill_anon_super, - .fs_flags = FS_BINARY_MOUNTDATA, + .fs_flags = 0, }; static const struct super_operations afs_super_ops = { @@ -58,6 +59,20 @@ static const struct super_operations afs_super_ops = { static struct kmem_cache *afs_inode_cachep; static atomic_t afs_count_active_inodes; +enum { + afs_no_opt, + afs_opt_cell, + afs_opt_rwpath, + afs_opt_vol, +}; + +static const match_table_t afs_options_list = { + { afs_opt_cell, "cell=%s" }, + { afs_opt_rwpath, "rwpath" }, + { afs_opt_vol, "vol=%s" }, + { afs_no_opt, NULL }, +}; + /* * initialise the filesystem */ @@ -115,31 +130,6 @@ void __exit afs_fs_exit(void) } /* - * check that an argument has a value - */ -static int want_arg(char **_value, const char *option) -{ - if (!_value || !*_value || !**_value) { - printk(KERN_NOTICE "kAFS: %s: argument missing\n", option); - return 0; - } - return 1; -} - -/* - * check that there's no subsequent value - */ -static int want_no_value(char *const *_value, const char *option) -{ - if (*_value && **_value) { - printk(KERN_NOTICE "kAFS: %s: Invalid argument: %s\n", - option, *_value); - return 0; - } - return 1; -} - -/* * parse the mount options * - this function has been shamelessly adapted from the ext3 fs which * shamelessly adapted it from the msdos fs @@ -148,48 +138,46 @@ static int afs_parse_options(struct afs_mount_params *params, char *options, const char **devname) { struct afs_cell *cell; - char *key, *value; - int ret; + substring_t args[MAX_OPT_ARGS]; + char *p; + int token; _enter("%s", options); options[PAGE_SIZE - 1] = 0; - ret = 0; - while ((key = strsep(&options, ","))) { - value = strchr(key, '='); - if (value) - *value++ = 0; - - _debug("kAFS: KEY: %s, VAL:%s", key, value ?: "-"); + while ((p = strsep(&options, ","))) { + if (!*p) + continue; - if (strcmp(key, "rwpath") == 0) { - if (!want_no_value(&value, "rwpath")) - return -EINVAL; - params->rwpath = 1; - } else if (strcmp(key, "vol") == 0) { - if (!want_arg(&value, "vol")) - return -EINVAL; - *devname = value; - } else if (strcmp(key, "cell") == 0) { - if (!want_arg(&value, "cell")) - return -EINVAL; - cell = afs_cell_lookup(value, strlen(value)); + token = match_token(p, afs_options_list, args); + switch (token) { + case afs_opt_cell: + cell = afs_cell_lookup(args[0].from, + args[0].to - args[0].from); if (IS_ERR(cell)) return PTR_ERR(cell); afs_put_cell(params->cell); params->cell = cell; - } else { - printk("kAFS: Unknown mount option: '%s'\n", key); - ret = -EINVAL; - goto error; + break; + + case afs_opt_rwpath: + params->rwpath = 1; + break; + + case afs_opt_vol: + *devname = args[0].from; + break; + + default: + printk(KERN_ERR "kAFS:" + " Unknown or invalid mount option: '%s'\n", p); + return -EINVAL; } } - ret = 0; -error: - _leave(" = %d", ret); - return ret; + _leave(" = 0"); + return 0; } /* @@ -361,7 +349,6 @@ error: /* * get an AFS superblock - * - TODO: don't use get_sb_nodev(), but rather call sget() directly */ static int afs_get_sb(struct file_system_type *fs_type, int flags, @@ -386,7 +373,6 @@ static int afs_get_sb(struct file_system_type *fs_type, goto error; } - ret = afs_parse_device_name(¶ms, dev_name); if (ret < 0) goto error; diff --git a/net/rxrpc/Kconfig b/net/rxrpc/Kconfig index 8750f6d..91b3d52 100644 --- a/net/rxrpc/Kconfig +++ b/net/rxrpc/Kconfig @@ -5,6 +5,7 @@ config AF_RXRPC tristate "RxRPC session sockets" depends on EXPERIMENTAL + select KEYS help Say Y or M here to include support for RxRPC session sockets (just the transport part, not the presentation part: (un)marshalling is @@ -29,7 +30,7 @@ config AF_RXRPC_DEBUG config RXKAD tristate "RxRPC Kerberos security" - depends on AF_RXRPC && KEYS + depends on AF_RXRPC select CRYPTO select CRYPTO_MANAGER select CRYPTO_BLKCIPHER ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] AFS/AF_RXRPC: Miscellaneous fixes 2007-05-01 17:47 ` [PATCH 2/2] AFS/AF_RXRPC: Miscellaneous fixes David Howells @ 2007-05-01 18:08 ` Geert Uytterhoeven 2007-05-01 18:11 ` David Howells 2007-05-03 10:11 ` David Miller 2 siblings, 0 replies; 6+ messages in thread From: Geert Uytterhoeven @ 2007-05-01 18:08 UTC (permalink / raw) To: David Howells Cc: Linus Torvalds, Andrew Morton, Linux Kernel Development, linux-fsdevel, netdev Hi David, I've just noticed another issue: if CONFIG_AFS_FS=y, the kernel build fails with | `afs_callback_update_kill' referenced in section `.init.text' of fs/built-in.o: defined in discarded section `.exit.text' of fs/built-in.o | `afs_vlocation_purge' referenced in section `.init.text' of fs/built-in.o: defined in discarded section `.exit.text' of fs/built-in.o and indeed, afs_init() calls both afs_callback_update_kill() and afs_vlocation_purge() in the failure path. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] AFS/AF_RXRPC: Miscellaneous fixes 2007-05-01 17:47 ` [PATCH 2/2] AFS/AF_RXRPC: Miscellaneous fixes David Howells 2007-05-01 18:08 ` Geert Uytterhoeven @ 2007-05-01 18:11 ` David Howells 2007-05-03 10:11 ` David Miller 2 siblings, 0 replies; 6+ messages in thread From: David Howells @ 2007-05-01 18:11 UTC (permalink / raw) To: Geert Uytterhoeven Cc: Linus Torvalds, Andrew Morton, Linux Kernel Development, linux-fsdevel, netdev Geert Uytterhoeven <geert@linux-m68k.org> wrote: > I've just noticed another issue: if CONFIG_AFS_FS=y, the kernel build fails > with Can you send me the config you're using please? David ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] AFS/AF_RXRPC: Miscellaneous fixes 2007-05-01 17:47 ` [PATCH 2/2] AFS/AF_RXRPC: Miscellaneous fixes David Howells 2007-05-01 18:08 ` Geert Uytterhoeven 2007-05-01 18:11 ` David Howells @ 2007-05-03 10:11 ` David Miller 2 siblings, 0 replies; 6+ messages in thread From: David Miller @ 2007-05-03 10:11 UTC (permalink / raw) To: dhowells; +Cc: torvalds, akpm, linux-kernel, linux-fsdevel, netdev, geert From: David Howells <dhowells@redhat.com> Date: Tue, 01 May 2007 18:47:52 +0100 > Make miscellaneous fixes to AFS and AF_RXRPC: > > (*) Make AF_RXRPC select KEYS rather than RXKAD or AFS_FS in Kconfig. > > (*) Don't use FS_BINARY_MOUNTDATA. > > (*) Remove a done 'TODO' item in a comemnt on afs_get_sb(). > > (*) Don't pass a void * as the page pointer argument of kmap_atomic() as this > breaks on m68k. Patch from Geert Uytterhoeven <geert@linux-m68k.org>. > > (*) Use match_*() functions rather than doing my own parsing. > > Signed-off-by: David Howells <dhowells@redhat.com> Applied. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] AFS: Make the match_*() functions take const options 2007-05-01 17:47 [PATCH 1/2] AFS: Make the match_*() functions take const options David Howells 2007-05-01 17:47 ` [PATCH 2/2] AFS/AF_RXRPC: Miscellaneous fixes David Howells @ 2007-05-03 10:10 ` David Miller 1 sibling, 0 replies; 6+ messages in thread From: David Miller @ 2007-05-03 10:10 UTC (permalink / raw) To: dhowells; +Cc: torvalds, akpm, linux-kernel, linux-fsdevel, netdev, geert From: David Howells <dhowells@redhat.com> Date: Tue, 01 May 2007 18:47:47 +0100 > Make the match_*() functions take a const pointer to the options table and > make strings pointers in the options table const too. > > Signed-off-by: David Howells <dhowells@redhat.com> I'll take this, applied, thanks David. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2007-05-03 10:11 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-05-01 17:47 [PATCH 1/2] AFS: Make the match_*() functions take const options David Howells 2007-05-01 17:47 ` [PATCH 2/2] AFS/AF_RXRPC: Miscellaneous fixes David Howells 2007-05-01 18:08 ` Geert Uytterhoeven 2007-05-01 18:11 ` David Howells 2007-05-03 10:11 ` David Miller 2007-05-03 10:10 ` [PATCH 1/2] AFS: Make the match_*() functions take const options David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).