]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: sparse endian fixes, fsid cleanup
authorSage Weil <sage@newdream.net>
Thu, 10 Sep 2009 18:59:10 +0000 (11:59 -0700)
committerSage Weil <sage@newdream.net>
Thu, 10 Sep 2009 18:59:10 +0000 (11:59 -0700)
13 files changed:
src/kernel/addr.c
src/kernel/caps.c
src/kernel/debugfs.c
src/kernel/mds_client.c
src/kernel/messenger.c
src/kernel/messenger.h
src/kernel/mon_client.c
src/kernel/osd_client.c
src/kernel/osdmap.c
src/kernel/osdmap.h
src/kernel/snap.c
src/kernel/super.c
src/kernel/super.h

index e4b5414624181f0b39a84bcd45abac99510113f5..5c337faa967df577cf34294952d723968154c090 100644 (file)
@@ -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);
index fb4cf0a1c4ba1bd99b636aa47e7396cfb2c1705b..fd36fca3a1f4221ad7d753fa52ed4a9ef0c66f3c 100644 (file)
@@ -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;
index 1cd7f434fcf939cd23b5b8206c04e1055dc82d32..5f31e6cb192edb6396d215f25d9126140922dd2b 100644 (file)
@@ -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;
 }
 
index daa60509d040545dc1fc5c285de0312933ea9ac8..63af4ed0f7e76dd62b6c6e3f85626a16c64ef788 100644 (file)
@@ -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 */
index 4b81d09fa05eb0e849f051d1f8f6ba962b94dd6a..b1d04589554ded6b4de3778c00ff3a721bf0e380 100644 (file)
@@ -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,
index 9d94edd304ff1a373ef5f096d41054a6814eba1f..317fe89c86823ac50949561fd6292bad1509c68e 100644 (file)
@@ -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 */
index a96a8aada0fa00213ad02ec25a7477e4f035a0b8..c461e21ac0c326f6e44e1def88aba374abc59270 100644 (file)
@@ -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);
index cc19464f03cae23bcaea968ecda768ad28df4f82..88b2d58c5702aa6f7e0dbe5ba1977f701643da34 100644 (file)
@@ -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]);
index de4ee4ab48336ef3916df944b5a2233dcfc37061..c84722907bbe815c3a1a723f5ffe6d039be63f03 100644 (file)
@@ -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;
index df9203054d4f43eaca86950fa05df04a3c277914..c76eecbf46dd4afd75de9f4ec26435f01f79170a 100644 (file)
@@ -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];
 }
 
index 529aa1c3b85b223f51a87b590b4ab914fa5d32cf..b4d78926b78a99ca2f11a541074efebc7325c6de 100644 (file)
@@ -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))
index c0396704cbe4a7b9a7dc25aee134a846d2ae8b67..8390da62cbd4b6f81fad95b49624c0263bb10b70 100644 (file)
@@ -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;
 }
 
 /*
index 4638c338b17cebb11ad04d84569c9d9503121a72..d50e93dfabab066a1225f49c853ce54fe1bca9c0 100644 (file)
@@ -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;