]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
some minor module fixes
authorsageweil <sageweil@29311d96-e01e-0410-9327-a35deaab8ce9>
Wed, 28 Nov 2007 01:51:15 +0000 (01:51 +0000)
committersageweil <sageweil@29311d96-e01e-0410-9327-a35deaab8ce9>
Wed, 28 Nov 2007 01:51:15 +0000 (01:51 +0000)
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@2127 29311d96-e01e-0410-9327-a35deaab8ce9

trunk/ceph/kernel/client.c
trunk/ceph/kernel/inode.c
trunk/ceph/kernel/ktcp.c
trunk/ceph/kernel/messenger.c
trunk/ceph/kernel/super.c

index ac816b2a763de5b77240b406ce464c26ffed1d8e..9f7e716d1a3f553c7afd3aca998eff52d749b325 100644 (file)
@@ -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);
index 7150d3b39c8a224e03ffce03584dea814251e4d4..946c9e28ac23c79dbfa2d6c8bd092cddfeac628a 100644 (file)
@@ -7,7 +7,3 @@
 
 #include "super.h"
 
-MODULE_AUTHOR("Patience Warnick <patience@newdream.net>");
-MODULE_DESCRIPTION("Ceph filesystem for Linux");
-MODULE_LICENSE("GPL");
-
index da4e5b0f5152090504aaeb93a067f9d85a7ae06f..5142bf5fabd8013292565c5eefd4edd502f1dc8e 100644 (file)
@@ -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;
        }
index a1d8df6455c433f795b0ea67189cc6a203404828..bb05b10e3475435b4ebf1190ec13182aba302305 100644 (file)
@@ -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);
 
index cceffa929050af18fe0807ee137b4643ca25d60a..d1b9a59e679acf0e7a612bc7540a0a1d1753ec1a 100644 (file)
@@ -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 <patience@newdream.net>");
+MODULE_AUTHOR("Sage Weil <sage@newdream.net>");
+MODULE_DESCRIPTION("Ceph filesystem for Linux");
+MODULE_LICENSE("GPL");