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);
*
* 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;
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;
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;
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;
}
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);
if (mode == USE_RANDOM_MDS)
goto random;
- inode = 0;
+ inode = NULL;
if (req->r_inode) {
inode = req->r_inode;
} else if (req->r_dentry) {
}
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))
{
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;
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");
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) {
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);
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))
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 */
/*
* 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,
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);
*/
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,
}
/* 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 */
*/
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;
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 {
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;
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);
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;
}
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]);
/*
* 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;
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,
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) {
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;
int osd)
{
if (osd >= map->max_osd)
- return 0;
+ return NULL;
return &map->osd_addr[osd];
}
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))
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");
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;
}
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)
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;
}
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);
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;
}
/*
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;