From 6b9d6dea6e112d3d601860ce61848a532d8df626 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 10 Sep 2009 11:59:10 -0700 Subject: [PATCH] kclient: sparse endian fixes, fsid cleanup --- src/kernel/addr.c | 2 +- src/kernel/caps.c | 18 +++++++++++++----- src/kernel/debugfs.c | 5 ++--- src/kernel/mds_client.c | 28 ++++++++++++++-------------- src/kernel/messenger.c | 8 ++++---- src/kernel/messenger.h | 4 +--- src/kernel/mon_client.c | 16 +++++++--------- src/kernel/osd_client.c | 4 ++-- src/kernel/osdmap.c | 19 ++++++++++--------- src/kernel/osdmap.h | 2 +- src/kernel/snap.c | 4 ++-- src/kernel/super.c | 25 ++++++++++++------------- src/kernel/super.h | 31 ++++++------------------------- 13 files changed, 75 insertions(+), 91 deletions(-) diff --git a/src/kernel/addr.c b/src/kernel/addr.c index e4b5414624181..5c337faa967df 100644 --- a/src/kernel/addr.c +++ b/src/kernel/addr.c @@ -840,7 +840,7 @@ get_more_pages: reqhead = req->r_request->front.iov_base; op = (void *)(reqhead + 1); op->length = cpu_to_le64(len); - op->payload_len = op->length; + op->payload_len = cpu_to_le32(len); req->r_request->hdr.data_len = cpu_to_le32(len); ceph_osdc_start_request(&client->osdc, req, true); diff --git a/src/kernel/caps.c b/src/kernel/caps.c index fb4cf0a1c4ba1..fd36fca3a1f42 100644 --- a/src/kernel/caps.c +++ b/src/kernel/caps.c @@ -1715,13 +1715,12 @@ int ceph_write_inode(struct inode *inode, int wait) * * Caller holds session->s_mutex. */ -void ceph_kick_flushing_caps(struct ceph_mds_client *mdsc, - struct ceph_mds_session *session) +static void kick_flushing_capsnaps(struct ceph_mds_client *mdsc, + struct ceph_mds_session *session) { - struct ceph_inode_info *ci; struct ceph_cap_snap *capsnap; - dout("kick_flushing_caps mds%d\n", session->s_mds); + dout("kick_flushing_capsnaps mds%d\n", session->s_mds); list_for_each_entry(capsnap, &session->s_cap_snaps_flushing, flushing_item) { struct ceph_inode_info *ci = capsnap->ci; @@ -1740,7 +1739,16 @@ void ceph_kick_flushing_caps(struct ceph_mds_client *mdsc, spin_unlock(&inode->i_lock); } } +} + +void ceph_kick_flushing_caps(struct ceph_mds_client *mdsc, + struct ceph_mds_session *session) +{ + struct ceph_inode_info *ci; + + kick_flushing_capsnaps(mdsc, session); + dout("kick_flushing_caps mds%d\n", session->s_mds); list_for_each_entry(ci, &session->s_cap_flushing, i_flushing_item) { struct inode *inode = &ci->vfs_inode; struct ceph_cap *cap; @@ -2519,7 +2527,7 @@ void ceph_handle_caps(struct ceph_mds_session *session, struct inode *inode; struct ceph_cap *cap; struct ceph_mds_caps *h; - int mds = le32_to_cpu(msg->hdr.src.name.num); + int mds = le64_to_cpu(msg->hdr.src.name.num); int op; u32 seq; struct ceph_vino vino; diff --git a/src/kernel/debugfs.c b/src/kernel/debugfs.c index 1cd7f434fcf93..5f31e6cb192ed 100644 --- a/src/kernel/debugfs.c +++ b/src/kernel/debugfs.c @@ -27,10 +27,9 @@ static struct dentry *ceph_debugfs_caps_reservation; static int fsid_show(struct seq_file *s, void *p) { struct ceph_client *client = s->private; + struct ceph_fsid *f = &client->monc.monmap->fsid; - seq_printf(s, "%llx.%llx\n", - le64_to_cpu(__ceph_fsid_major(&client->monc.monmap->fsid)), - le64_to_cpu(__ceph_fsid_minor(&client->monc.monmap->fsid))); + seq_printf(s, FSID_FORMAT "\n", PR_FSID(f)); return 0; } diff --git a/src/kernel/mds_client.c b/src/kernel/mds_client.c index daa60509d0405..63af4ed0f7e76 100644 --- a/src/kernel/mds_client.c +++ b/src/kernel/mds_client.c @@ -324,8 +324,8 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc, ceph_con_init(mdsc->client->msgr, &s->s_con); s->s_con.private = s; s->s_con.ops = &mds_con_ops; - s->s_con.peer_name.type = cpu_to_le32(CEPH_ENTITY_TYPE_MDS); - s->s_con.peer_name.num = cpu_to_le32(mds); + s->s_con.peer_name.type = CEPH_ENTITY_TYPE_MDS; + s->s_con.peer_name.num = cpu_to_le64(mds); ceph_con_open(&s->s_con, ceph_mdsmap_get_addr(mdsc->mdsmap, mds)); spin_lock_init(&s->s_cap_lock); @@ -517,7 +517,7 @@ static int __choose_mds(struct ceph_mds_client *mdsc, if (mode == USE_RANDOM_MDS) goto random; - inode = 0; + inode = NULL; if (req->r_inode) { inode = req->r_inode; } else if (req->r_dentry) { @@ -572,7 +572,7 @@ static int __choose_mds(struct ceph_mds_client *mdsc, } spin_lock(&inode->i_lock); - cap = 0; + cap = NULL; if (mode == USE_AUTH_MDS) cap = ci->i_auth_cap; if (!cap && !RB_EMPTY_ROOT(&ci->i_caps)) @@ -1279,8 +1279,8 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc, { struct ceph_msg *msg; struct ceph_mds_request_head *head; - const char *path1 = 0; - const char *path2 = 0; + const char *path1 = NULL; + const char *path2 = NULL; u64 ino1 = 0, ino2 = 0; int pathlen1 = 0, pathlen2 = 0; int freepath1 = 0, freepath2 = 0; @@ -1639,7 +1639,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) int err, result; int mds; - if (le32_to_cpu(msg->hdr.src.name.type) != CEPH_ENTITY_TYPE_MDS) + if (msg->hdr.src.name.type != CEPH_ENTITY_TYPE_MDS) return; if (msg->front.iov_len < sizeof(*head)) { pr_err("ceph_mdsc_handle_reply got corrupt (short) reply\n"); @@ -1656,7 +1656,7 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) return; } dout("handle_reply %p\n", req); - mds = le32_to_cpu(msg->hdr.src.name.num); + mds = le64_to_cpu(msg->hdr.src.name.num); /* correct session? */ if (!req->r_session && req->r_session != session) { @@ -1791,9 +1791,9 @@ static void handle_forward(struct ceph_mds_client *mdsc, struct ceph_msg *msg) void *end = p + msg->front.iov_len; int from_mds, state; - if (le32_to_cpu(msg->hdr.src.name.type) != CEPH_ENTITY_TYPE_MDS) + if (msg->hdr.src.name.type != CEPH_ENTITY_TYPE_MDS) goto bad; - from_mds = le32_to_cpu(msg->hdr.src.name.num); + from_mds = le64_to_cpu(msg->hdr.src.name.num); ceph_decode_need(&p, end, sizeof(u64)+2*sizeof(u32), bad); ceph_decode_64(&p, tid); @@ -1844,9 +1844,9 @@ static void handle_session(struct ceph_mds_session *session, struct ceph_mds_session_head *h = msg->front.iov_base; int wake = 0; - if (le32_to_cpu(msg->hdr.src.name.type) != CEPH_ENTITY_TYPE_MDS) + if (msg->hdr.src.name.type != CEPH_ENTITY_TYPE_MDS) return; - mds = le32_to_cpu(msg->hdr.src.name.num); + mds = le64_to_cpu(msg->hdr.src.name.num); /* decode */ if (msg->front.iov_len != sizeof(*h)) @@ -2286,9 +2286,9 @@ static void handle_lease(struct ceph_mds_client *mdsc, struct ceph_msg *msg) struct qstr dname; int release = 0; - if (le32_to_cpu(msg->hdr.src.name.type) != CEPH_ENTITY_TYPE_MDS) + if (msg->hdr.src.name.type != CEPH_ENTITY_TYPE_MDS) return; - mds = le32_to_cpu(msg->hdr.src.name.num); + mds = le64_to_cpu(msg->hdr.src.name.num); dout("handle_lease from mds%d\n", mds); /* decode */ diff --git a/src/kernel/messenger.c b/src/kernel/messenger.c index 4b81d09fa05eb..b1d04589554de 100644 --- a/src/kernel/messenger.c +++ b/src/kernel/messenger.c @@ -837,8 +837,8 @@ static int process_connect(struct ceph_connection *con) /* * did we learn our address? */ - if (con->msgr->inst.addr.ipaddr.sin_addr.s_addr == htons(INADDR_ANY)) { - int port = con->msgr->inst.addr.ipaddr.sin_port; + if (con->msgr->inst.addr.ipaddr.sin_addr.s_addr == htonl(INADDR_ANY)) { + __be16 port = con->msgr->inst.addr.ipaddr.sin_port; memcpy(&con->msgr->inst.addr.ipaddr, &con->peer_addr_for_me.ipaddr, @@ -1782,7 +1782,7 @@ out: struct ceph_msg *ceph_alloc_msg(struct ceph_connection *con, struct ceph_msg_header *hdr) { - int type = le32_to_cpu(hdr->type); + int type = le16_to_cpu(hdr->type); int front_len = le32_to_cpu(hdr->front_len); struct ceph_msg *msg = ceph_msg_new(type, front_len, 0, 0, NULL); @@ -1803,7 +1803,7 @@ struct ceph_msg *ceph_alloc_msg(struct ceph_connection *con, */ int ceph_alloc_middle(struct ceph_connection *con, struct ceph_msg *msg) { - int type = le32_to_cpu(msg->hdr.type); + int type = le16_to_cpu(msg->hdr.type); int middle_len = le32_to_cpu(msg->hdr.middle_len); dout("alloc_middle %p type %d %s middle_len %d\n", msg, type, diff --git a/src/kernel/messenger.h b/src/kernel/messenger.h index 9d94edd304ff1..317fe89c86823 100644 --- a/src/kernel/messenger.h +++ b/src/kernel/messenger.h @@ -67,9 +67,7 @@ static inline const char *ceph_name_type_str(int t) } /* use format string %s%d */ -#define ENTITY_NAME(n) \ - ceph_name_type_str(le32_to_cpu((n).type)), \ - le32_to_cpu((n).num) +#define ENTITY_NAME(n) ceph_name_type_str((n).type), le64_to_cpu((n).num) struct ceph_messenger { struct ceph_entity_inst inst; /* my name+address */ diff --git a/src/kernel/mon_client.c b/src/kernel/mon_client.c index a96a8aada0fa0..c461e21ac0c32 100644 --- a/src/kernel/mon_client.c +++ b/src/kernel/mon_client.c @@ -33,7 +33,7 @@ const static struct ceph_connection_operations mon_con_ops; */ struct ceph_monmap *ceph_monmap_decode(void *p, void *end) { - struct ceph_monmap *m = 0; + struct ceph_monmap *m = NULL; int i, err = -EINVAL; struct ceph_fsid fsid; u32 epoch, num_mon; @@ -118,8 +118,8 @@ static int __open_session(struct ceph_mon_client *monc) monc->want_next_osdmap = !!monc->want_next_osdmap; dout("open_session mon%d opening\n", monc->cur_mon); - monc->con->peer_name.type = cpu_to_le32(CEPH_ENTITY_TYPE_MON); - monc->con->peer_name.num = cpu_to_le32(monc->cur_mon); + monc->con->peer_name.type = CEPH_ENTITY_TYPE_MON; + monc->con->peer_name.num = cpu_to_le64(monc->cur_mon); ceph_con_open(monc->con, &monc->monmap->mon_inst[monc->cur_mon].addr); } else { @@ -162,7 +162,7 @@ static void __send_subscribe(struct ceph_mon_client *monc) struct ceph_mon_subscribe_item *i; void *p, *end; - msg = ceph_msg_new(CEPH_MSG_MON_SUBSCRIBE, 64, 0, 0, 0); + msg = ceph_msg_new(CEPH_MSG_MON_SUBSCRIBE, 64, 0, 0, NULL); if (!msg) return; @@ -351,12 +351,10 @@ static void handle_mount_ack(struct ceph_mon_client *monc, struct ceph_msg *msg) monc->want_mount = false; client->whoami = cnum; - client->msgr->inst.name.num = cpu_to_le32(cnum); client->msgr->inst.name.type = CEPH_ENTITY_TYPE_CLIENT; - pr_info("ceph client%lld fsid %llx.%llx\n", - client->whoami, - le64_to_cpu(__ceph_fsid_major(&client->monc.monmap->fsid)), - le64_to_cpu(__ceph_fsid_minor(&client->monc.monmap->fsid))); + client->msgr->inst.name.num = cpu_to_le64(cnum); + pr_info("ceph client%lld fsid " FSID_FORMAT "\n", + client->whoami, PR_FSID(&client->monc.monmap->fsid)); ceph_debugfs_client_init(client); __send_subscribe(monc); diff --git a/src/kernel/osd_client.c b/src/kernel/osd_client.c index cc19464f03cae..88b2d58c5702a 100644 --- a/src/kernel/osd_client.c +++ b/src/kernel/osd_client.c @@ -318,7 +318,7 @@ static struct ceph_osd *create_osd(struct ceph_osd_client *osdc) ceph_con_init(osdc->client->msgr, &osd->o_con); osd->o_con.private = osd; osd->o_con.ops = &osd_con_ops; - osd->o_con.peer_name.type = cpu_to_le32(CEPH_ENTITY_TYPE_OSD); + osd->o_con.peer_name.type = CEPH_ENTITY_TYPE_OSD; return osd; } @@ -548,7 +548,7 @@ static int __map_osds(struct ceph_osd_client *osdc, dout("map_osds osd %p is osd%d\n", req->r_osd, o); req->r_osd->o_osd = o; - req->r_osd->o_con.peer_name.num = cpu_to_le32(o); + req->r_osd->o_con.peer_name.num = cpu_to_le64(o); __insert_osd(osdc, req->r_osd); ceph_con_open(&req->r_osd->o_con, &osdc->osdmap->osd_addr[o]); diff --git a/src/kernel/osdmap.c b/src/kernel/osdmap.c index de4ee4ab48336..c84722907bbe8 100644 --- a/src/kernel/osdmap.c +++ b/src/kernel/osdmap.c @@ -367,7 +367,8 @@ static int osdmap_set_max_osd(struct ceph_osdmap *map, int max) /* * Insert a new pg_temp mapping */ -void __insert_pg_mapping(struct ceph_pg_mapping *new, struct rb_root *root) +static void __insert_pg_mapping(struct ceph_pg_mapping *new, + struct rb_root *root) { struct rb_node **p = &root->rb_node; struct rb_node *parent = NULL; @@ -654,10 +655,10 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end, struct ceph_pg_mapping *pg; int j; u64 pgid; - u32 len; + u32 pglen; ceph_decode_need(p, end, sizeof(u64) + sizeof(u32), bad); ceph_decode_64(p, pgid); - ceph_decode_32(p, len); + ceph_decode_32(p, pglen); /* remove any? */ while (rbp && rb_entry(rbp, struct ceph_pg_mapping, @@ -669,20 +670,20 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end, rb_erase(cur, &map->pg_temp); } - if (len) { + if (pglen) { /* insert */ - ceph_decode_need(p, end, len*sizeof(u32), bad); - pg = kmalloc(sizeof(*pg) + sizeof(u32)*len, GFP_NOFS); + ceph_decode_need(p, end, pglen*sizeof(u32), bad); + pg = kmalloc(sizeof(*pg) + sizeof(u32)*pglen, GFP_NOFS); if (!pg) { err = -ENOMEM; goto bad; } pg->pgid = pgid; - pg->len = len; + pg->len = pglen; for (j = 0; j < len; j++) ceph_decode_32(p, pg->osds[j]); __insert_pg_mapping(pg, &map->pg_temp); - dout(" added pg_temp %llx len %d\n", pgid, len); + dout(" added pg_temp %llx len %d\n", pgid, pglen); } } while (rbp) { @@ -745,7 +746,7 @@ void ceph_calc_file_object_mapping(struct ceph_file_layout *layout, stripepos = bl % sc; objsetno = stripeno / su_per_object; - *bno = cpu_to_le32(objsetno * sc + stripepos); + *bno = objsetno * sc + stripepos; dout("objset %u * sc %u = bno %u\n", objsetno, sc, (unsigned)*bno); /* *oxoff = *off / layout->fl_stripe_unit; */ t = off; diff --git a/src/kernel/osdmap.h b/src/kernel/osdmap.h index df9203054d4f4..c76eecbf46dd4 100644 --- a/src/kernel/osdmap.h +++ b/src/kernel/osdmap.h @@ -69,7 +69,7 @@ static inline struct ceph_entity_addr *ceph_osd_addr(struct ceph_osdmap *map, int osd) { if (osd >= map->max_osd) - return 0; + return NULL; return &map->osd_addr[osd]; } diff --git a/src/kernel/snap.c b/src/kernel/snap.c index 529aa1c3b85b2..b4d78926b78a9 100644 --- a/src/kernel/snap.c +++ b/src/kernel/snap.c @@ -707,9 +707,9 @@ void ceph_handle_snap(struct ceph_mds_client *mdsc, int i; int locked_rwsem = 0; - if (le32_to_cpu(msg->hdr.src.name.type) != CEPH_ENTITY_TYPE_MDS) + if (msg->hdr.src.name.type != CEPH_ENTITY_TYPE_MDS) return; - mds = le32_to_cpu(msg->hdr.src.name.num); + mds = le64_to_cpu(msg->hdr.src.name.num); /* decode */ if (msg->front.iov_len < sizeof(*h)) diff --git a/src/kernel/super.c b/src/kernel/super.c index c0396704cbe4a..8390da62cbd4b 100644 --- a/src/kernel/super.c +++ b/src/kernel/super.c @@ -55,7 +55,7 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf) struct ceph_client *client = ceph_inode_to_client(dentry->d_inode); struct ceph_monmap *monmap = client->monc.monmap; struct ceph_statfs st; - __le64 fsid; + u64 fsid; int err; dout("statfs\n"); @@ -82,10 +82,9 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf) buf->f_frsize = PAGE_CACHE_SIZE; /* leave fsid little-endian, regardless of host endianness */ - fsid = __ceph_fsid_major(&monmap->fsid) ^ - __ceph_fsid_minor(&monmap->fsid); - buf->f_fsid.val[0] = le64_to_cpu(fsid) & 0xffffffff; - buf->f_fsid.val[1] = le64_to_cpu(fsid) >> 32; + fsid = *(u64 *)(&monmap->fsid) ^ *((u64 *)&monmap->fsid + 1); + buf->f_fsid.val[0] = fsid & 0xffffffff; + buf->f_fsid.val[1] = fsid >> 32; return 0; } @@ -112,8 +111,8 @@ static int ceph_show_options(struct seq_file *m, struct vfsmount *mnt) if (args->flags & CEPH_OPT_FSID) seq_printf(m, ",fsidmajor=%llu,fsidminor%llu", - __ceph_fsid_major(&args->fsid), - __ceph_fsid_minor(&args->fsid)); + le64_to_cpu(*(__le64 *)&args->fsid.fsid[0]), + le64_to_cpu(*(__le64 *)&args->fsid.fsid[8])); if (args->flags & CEPH_OPT_NOSHARE) seq_puts(m, ",noshare"); if (args->flags & CEPH_OPT_DIRSTAT) @@ -450,8 +449,8 @@ static int parse_mount_args(struct ceph_client *client, client->monc.monmap->mon_inst[i].addr.erank = 0; client->monc.monmap->mon_inst[i].addr.nonce = 0; client->monc.monmap->mon_inst[i].name.type = - cpu_to_le32(CEPH_ENTITY_TYPE_MON); - client->monc.monmap->mon_inst[i].name.num = cpu_to_le32(i); + CEPH_ENTITY_TYPE_MON; + client->monc.monmap->mon_inst[i].name.num = cpu_to_le64(i); } client->monc.monmap->num_mon = num_mon; args->my_addr.ipaddr.sin_family = AF_INET; @@ -484,10 +483,10 @@ static int parse_mount_args(struct ceph_client *client, } switch (token) { case Opt_fsidmajor: - __ceph_fsid_set_major(&args->fsid, cpu_to_le64(intval)); + *(__le64 *)&args->fsid.fsid[0] = cpu_to_le64(intval); break; case Opt_fsidminor: - __ceph_fsid_set_minor(&args->fsid, cpu_to_le64(intval)); + *(__le64 *)&args->fsid.fsid[8] = cpu_to_le64(intval); break; case Opt_port: args->my_addr.ipaddr.sin_port = htons(intval); @@ -571,9 +570,9 @@ static int parse_mount_args(struct ceph_client *client, static void release_mount_args(struct ceph_mount_args *args) { kfree(args->snapdir_name); - args->snapdir_name = 0; + args->snapdir_name = NULL; kfree(args->secret); - args->secret = 0; + args->secret = NULL; } /* diff --git a/src/kernel/super.h b/src/kernel/super.h index 4638c338b17ce..d50e93dfabab0 100644 --- a/src/kernel/super.h +++ b/src/kernel/super.h @@ -770,31 +770,12 @@ extern struct kmem_cache *ceph_file_cachep; extern const char *ceph_msg_type_name(int type); -static inline __le64 __ceph_fsid_minor(struct ceph_fsid *fsid) -{ - return get_unaligned_le64(&fsid->fsid[8]); -} - -static inline __le64 __ceph_fsid_major(struct ceph_fsid *fsid) -{ - return get_unaligned_le64(&fsid->fsid[0]); -} - -static inline void __ceph_fsid_set_minor(struct ceph_fsid *fsid, __le64 val) -{ - put_unaligned_le64(val, &fsid->fsid[8]); -} - -static inline void __ceph_fsid_set_major(struct ceph_fsid *fsid, __le64 val) -{ - put_unaligned_le64(val, &fsid->fsid[0]); -} - -/* -extern int ceph_alloc_middle(struct ceph_connection *con, struct ceph_msg *msg); -extern struct ceph_msg *ceph_alloc_msg(struct ceph_connection *con, - struct ceph_msg_header *hdr); -*/ +#define FSID_FORMAT "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-" \ + "%02x%02x%02x%02x%02x%02x" +#define PR_FSID(f) (f)->fsid[0], (f)->fsid[1], (f)->fsid[2], (f)->fsid[3], \ + (f)->fsid[4], (f)->fsid[5], (f)->fsid[6], (f)->fsid[7], \ + (f)->fsid[8], (f)->fsid[9], (f)->fsid[10], (f)->fsid[11], \ + (f)->fsid[12], (f)->fsid[13], (f)->fsid[14], (f)->fsid[15] /* inode.c */ extern const struct inode_operations ceph_file_iops; -- 2.39.5