From a7614133f553165e3eef9f9b9574d263b3f82492 Mon Sep 17 00:00:00 2001 From: sageweil Date: Wed, 28 Nov 2007 01:51:15 +0000 Subject: [PATCH] some minor module fixes git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@2127 29311d96-e01e-0410-9327-a35deaab8ce9 --- trunk/ceph/kernel/client.c | 2 +- trunk/ceph/kernel/inode.c | 4 --- trunk/ceph/kernel/ktcp.c | 30 ++++++++++++++------- trunk/ceph/kernel/messenger.c | 19 ++++++++------ trunk/ceph/kernel/super.c | 49 ++++++++++++++++++++++++++++++----- 5 files changed, 74 insertions(+), 30 deletions(-) diff --git a/trunk/ceph/kernel/client.c b/trunk/ceph/kernel/client.c index ac816b2a763de..9f7e716d1a3f5 100644 --- a/trunk/ceph/kernel/client.c +++ b/trunk/ceph/kernel/client.c @@ -8,7 +8,7 @@ /* debug level; defined in include/ceph_fs.h */ -int ceph_debug = 10; +int ceph_debug = 20; void ceph_dispatch(struct ceph_client *client, struct ceph_msg *msg); diff --git a/trunk/ceph/kernel/inode.c b/trunk/ceph/kernel/inode.c index 7150d3b39c8a2..946c9e28ac23c 100644 --- a/trunk/ceph/kernel/inode.c +++ b/trunk/ceph/kernel/inode.c @@ -7,7 +7,3 @@ #include "super.h" -MODULE_AUTHOR("Patience Warnick "); -MODULE_DESCRIPTION("Ceph filesystem for Linux"); -MODULE_LICENSE("GPL"); - diff --git a/trunk/ceph/kernel/ktcp.c b/trunk/ceph/kernel/ktcp.c index da4e5b0f51520..5142bf5fabd80 100644 --- a/trunk/ceph/kernel/ktcp.c +++ b/trunk/ceph/kernel/ktcp.c @@ -110,17 +110,17 @@ int ceph_tcp_listen(struct ceph_messenger *msgr) struct socket *sock = NULL; int optval = 1; struct sockaddr_in *myaddr = &msgr->inst.addr.ipaddr; - + int nlen; ret = sock_create_kern(AF_INET, SOCK_STREAM, IPPROTO_TCP, &sock); if (ret < 0) { - printk(KERN_INFO "sock_create_kern error: %d\n", ret); + derr(0, "sock_create_kern error: %d\n", ret); return ret; } ret = kernel_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&optval, sizeof(optval)); if (ret < 0) { - printk("Failed to set SO_REUSEADDR: %d\n", ret); + derr(0, "Failed to set SO_REUSEADDR: %d\n", ret); goto err; } @@ -131,19 +131,29 @@ int ceph_tcp_listen(struct ceph_messenger *msgr) /* if (!*myaddr) */ myaddr->sin_family = AF_INET; myaddr->sin_addr.s_addr = htonl(INADDR_ANY); - myaddr->sin_port = htons(CEPH_PORT); /* known port for now */ - /* myaddr->sin_port = htons(0); */ /* any port */ - ret = sock->ops->bind(sock, (struct sockaddr *)myaddr, - sizeof(struct sockaddr_in)); + //myaddr->sin_port = htons(CEPH_PORT); /* known port for now */ + myaddr->sin_port = htons(0); /* any port */ + ret = sock->ops->bind(sock, (struct sockaddr *)myaddr, sizeof(*myaddr)); + if (ret < 0) { + derr(0, "Failed to bind: %d\n", ret); + goto err; + } + + /* what port did we bind to? */ + nlen = sizeof(*myaddr); + ret = sock->ops->getname(sock, (struct sockaddr *)myaddr, &nlen, 0); if (ret < 0) { - printk("Failed to bind to port %d\n", ret); + derr(0, "failed to getsockname: %d\n", ret); goto err; } + dout(0, "ceph_tcp_listen on %x:%d\n", + ntohl(myaddr->sin_addr.s_addr), + ntohs(myaddr->sin_port)); ret = kernel_setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof(optval)); if (ret < 0) { - printk("Failed to set SO_KEEPALIVE: %d\n", ret); + derr(0, "Failed to set SO_KEEPALIVE: %d\n", ret); goto err; } @@ -152,7 +162,7 @@ int ceph_tcp_listen(struct ceph_messenger *msgr) /* TBD: probaby want to tune the backlog queue .. */ ret = sock->ops->listen(sock, NUM_BACKUP); if (ret < 0) { - printk(KERN_INFO "kernel_listen error: %d\n", ret); + derr(0, "kernel_listen error: %d\n", ret); msgr->listen_sock = NULL; goto err; } diff --git a/trunk/ceph/kernel/messenger.c b/trunk/ceph/kernel/messenger.c index a1d8df6455c43..bb05b10e34754 100644 --- a/trunk/ceph/kernel/messenger.c +++ b/trunk/ceph/kernel/messenger.c @@ -59,6 +59,11 @@ static struct ceph_connection *new_connection(struct ceph_messenger *msgr) con->msgr = msgr; + INIT_LIST_HEAD(&con->list_all); + INIT_LIST_HEAD(&con->list_bucket); + INIT_LIST_HEAD(&con->out_queue); + INIT_LIST_HEAD(&con->out_sent); + spin_lock_init(&con->con_lock); set_bit(NEW, &con->state); INIT_WORK(&con->rwork, try_read); /* setup work structure */ @@ -78,7 +83,7 @@ static struct ceph_connection *new_connection(struct ceph_messenger *msgr) static unsigned long hash_addr(struct ceph_entity_addr *addr) { unsigned long key; - key = *(unsigned long*)&addr->ipaddr.sin_addr.s_addr; + key = *(__u32*)&addr->ipaddr.sin_addr.s_addr; key ^= addr->ipaddr.sin_port; return key; } @@ -713,7 +718,7 @@ struct ceph_messenger *ceph_messenger_create() dout(1, "ceph_messenger_create listening on %x:%d\n", ntohl(msgr->inst.addr.ipaddr.sin_addr.s_addr), - ntohl(msgr->inst.addr.ipaddr.sin_port)); + ntohs(msgr->inst.addr.ipaddr.sin_port)); return msgr; } @@ -732,7 +737,6 @@ int ceph_msg_send(struct ceph_messenger *msgr, struct ceph_msg *msg) msg->hdr.src = msgr->inst; /* do we have the connection? */ - spin_lock(&msgr->con_lock); con = get_connection(msgr, &msg->hdr.dst.addr); if (!con) { con = new_connection(msgr); @@ -740,15 +744,14 @@ int ceph_msg_send(struct ceph_messenger *msgr, struct ceph_msg *msg) return PTR_ERR(con); dout(5, "opening new connection to peer %x:%d\n", ntohl(msg->hdr.dst.addr.ipaddr.sin_addr.s_addr), - ntohl(msg->hdr.dst.addr.ipaddr.sin_port)); + ntohs(msg->hdr.dst.addr.ipaddr.sin_port)); con->peer_addr = msg->hdr.dst.addr; add_connection(msgr, con); } else { dout(5, "had connection to peer %x:%d\n", ntohl(msg->hdr.dst.addr.ipaddr.sin_addr.s_addr), - ntohl(msg->hdr.dst.addr.ipaddr.sin_port)); + ntohs(msg->hdr.dst.addr.ipaddr.sin_port)); } - spin_unlock(&msgr->con_lock); spin_lock(&con->con_lock); @@ -758,7 +761,7 @@ int ceph_msg_send(struct ceph_messenger *msgr, struct ceph_msg *msg) if (ret < 0){ derr(1, "connection failure to peer %x:%d\n", ntohl(msg->hdr.dst.addr.ipaddr.sin_addr.s_addr), - ntohl(msg->hdr.dst.addr.ipaddr.sin_port)); + ntohs(msg->hdr.dst.addr.ipaddr.sin_port)); remove_connection(msgr, con); kfree(con); return(ret); @@ -767,7 +770,7 @@ int ceph_msg_send(struct ceph_messenger *msgr, struct ceph_msg *msg) } /* queue */ - dout(1, "queuing outgoing message for %s.%d\n", + dout(1, "queuing outgoing message for %s%d\n", ceph_name_type_str(msg->hdr.dst.name.type), msg->hdr.dst.name.num); ceph_msg_get(msg); diff --git a/trunk/ceph/kernel/super.c b/trunk/ceph/kernel/super.c index cceffa929050a..d1b9a59e679ac 100644 --- a/trunk/ceph/kernel/super.c +++ b/trunk/ceph/kernel/super.c @@ -194,11 +194,41 @@ static match_table_t arg_tokens = { {Opt_monport, "monport=%d"} }; -static int parse_ip(char *c, int len, struct ceph_entity_addr *addr) +/* + * FIXME: add error checking to ip parsing + */ +static int parse_ip(const char *c, int len, struct ceph_entity_addr *addr) { - dout(1, "parse_ip on %s len %d\n", c, len); + int i; + int v; + unsigned ip = 0; + char *p = c; + + dout(15, "parse_ip on '%s' len %d\n", c, len); + for (i=0; *p && i<4; i++) { + v = 0; + while (*p && *p != '.' && p < c+len) { + if (*p < '0' || *p > '9') + goto bad; + v = (v * 10) + (*p - '0'); + p++; + } + ip = (ip << 8) + v; + if (!*p) + break; + p++; + } + if (i < 4) + goto bad; + *(__u32*)&addr->ipaddr.sin_addr.s_addr = htonl(ip); + dout(15, "parse_ip got %u.%u.%u.%u\n", ip >> 24, (ip >> 16) & 0xff, + (ip >> 8) & 0xff, ip & 0xff); return 0; + +bad: + dout(1, "parse_ip bad ip '%s'\n", c); + return -EINVAL; } static int parse_mount_args(int flags, char *options, const char *dev_name, struct ceph_mount_args *args) @@ -207,7 +237,7 @@ static int parse_mount_args(int flags, char *options, const char *dev_name, stru int len; substring_t argstr[MAX_OPT_ARGS]; - dout(1, "parse_mount_args dev_name %s\n", dev_name); + dout(15, "parse_mount_args dev_name '%s'\n", dev_name); /* defaults */ args->mntflags = flags; @@ -222,7 +252,7 @@ static int parse_mount_args(int flags, char *options, const char *dev_name, stru /* get mon ip */ /* er, just one for now. later, comma-separate... */ len = c - dev_name; - parse_ip(c, len, &args->mon_addr[0]); + parse_ip(dev_name, len, &args->mon_addr[0]); args->mon_addr[0].ipaddr.sin_family = AF_INET; args->mon_addr[0].ipaddr.sin_port = CEPH_MON_PORT; args->mon_addr[0].erank = 0; @@ -235,7 +265,7 @@ static int parse_mount_args(int flags, char *options, const char *dev_name, stru return -ENAMETOOLONG; strcpy(args->path, c); - dout(1, "server path %s\n", args->path); + dout(15, "server path '%s'\n", args->path); /* parse mount options */ while ((c = strsep(&options, ",")) != NULL) { @@ -282,7 +312,7 @@ static int ceph_get_sb(struct file_system_type *fs_type, int error; int (*compare_super)(struct super_block *, void *) = ceph_compare_super; - dout(1, "ceph_get_sb\n"); + dout(5, "ceph_get_sb\n"); error = parse_mount_args(flags, data, dev_name, &mount_args); if (error < 0) @@ -320,7 +350,7 @@ out: static void ceph_kill_sb(struct super_block *s) { struct ceph_super_info *sbinfo = ceph_sbinfo(s); - dout(1, "ceph_kill_sb\n"); + dout(5, "ceph_kill_sb\n"); kill_anon_super(s); @@ -367,3 +397,8 @@ static void __exit exit_ceph(void) module_init(init_ceph); module_exit(exit_ceph); + +MODULE_AUTHOR("Patience Warnick "); +MODULE_AUTHOR("Sage Weil "); +MODULE_DESCRIPTION("Ceph filesystem for Linux"); +MODULE_LICENSE("GPL"); -- 2.39.5