From: Sage Weil Date: Tue, 1 Apr 2008 22:42:14 +0000 (-0700) Subject: Merge branch 'inclock1' into unstable X-Git-Tag: v0.2~229^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d17eba20a6ba5bfcd4365015b3625619f0dd7d06;p=ceph.git Merge branch 'inclock1' into unstable Conflicts: src/TODO src/client/FileCache.cc src/kernel/mdsmap.h src/osdc/Filer.h src/osdc/ObjectCacher.h --- d17eba20a6ba5bfcd4365015b3625619f0dd7d06 diff --cc src/client/FileCache.cc index 94fc82fbf487,e69d5ef5d247..3ff496417b3e --- a/src/client/FileCache.cc +++ b/src/client/FileCache.cc @@@ -194,7 -194,7 +194,7 @@@ int FileCache::read(off_t offset, size_ int rvalue = 0; C_Cond *onfinish = new C_Cond(&cond, &done, &rvalue); - r = oc->file_read(ino, &layout, offset, size, &blist, onfinish); - r = oc->file_read(inode, offset, size, &blist, 0, onfinish); ++ r = oc->file_read(ino, &layout, offset, size, &blist, 0, onfinish); if (r == 0) { // block @@@ -206,7 -206,7 +206,7 @@@ delete onfinish; } } else { - r = oc->file_atomic_sync_read(ino, &layout, offset, size, &blist, client_lock); - r = oc->file_atomic_sync_read(inode, offset, size, &blist, 0, client_lock); ++ r = oc->file_atomic_sync_read(ino, &layout, offset, size, &blist, 0, client_lock); } // dec reading counter @@@ -238,10 -238,10 +238,10 @@@ void FileCache::write(off_t offset, siz oc->wait_for_write(size, client_lock); // async, caching, non-blocking. - oc->file_write(ino, &layout, offset, size, blist); - oc->file_write(inode, offset, size, blist, 0); ++ oc->file_write(ino, &layout, offset, size, blist, 0); } else { // atomic, synchronous, blocking. - oc->file_atomic_sync_write(ino, &layout, offset, size, blist, client_lock); - oc->file_atomic_sync_write(inode, offset, size, blist, 0, client_lock); ++ oc->file_atomic_sync_write(ino, &layout, offset, size, blist, 0, client_lock); } } diff --cc src/kernel/mdsmap.c index f009546dd942,690da8789fb2..6feb35501c29 --- a/src/kernel/mdsmap.c +++ b/src/kernel/mdsmap.c @@@ -65,8 -65,9 +65,9 @@@ struct ceph_mdsmap *ceph_mdsmap_decode( ceph_decode_need(p, end, 10*sizeof(__u32), bad); ceph_decode_32(p, m->m_epoch); ceph_decode_32(p, m->m_client_epoch); + ceph_decode_32(p, m->m_last_failure); ceph_decode_32(p, m->m_created.tv_sec); - ceph_decode_32(p, m->m_created.tv_usec); + ceph_decode_32(p, m->m_created.tv_nsec); ceph_decode_32(p, m->m_anchortable); ceph_decode_32(p, m->m_root); ceph_decode_32(p, m->m_cap_bit_timeout); diff --cc src/kernel/mdsmap.h index c373107722bf,6c879d910588..e41c7d68a90a --- a/src/kernel/mdsmap.h +++ b/src/kernel/mdsmap.h @@@ -9,8 -9,8 +9,8 @@@ * fields limited to those the client cares about */ struct ceph_mdsmap { - ceph_epoch_t m_epoch, m_client_epoch; + ceph_epoch_t m_epoch, m_client_epoch, m_last_failure; - struct ceph_timeval m_created; + struct ceph_timespec m_created; __u32 m_anchortable; __u32 m_root; __u32 m_cap_bit_timeout; diff --cc src/kernel/osd_client.c index cf2966a847db,199c503d1546..9b74ddccdb8e --- a/src/kernel/osd_client.c +++ b/src/kernel/osd_client.c @@@ -190,7 -181,7 +190,7 @@@ struct ceph_osd_request *register_reque req->r_tid = head->tid = ++osdc->last_tid; req->r_flags = 0; req->r_request = msg; -- req->r_pgid = head->layout.ol_pgid; ++ req->r_pgid.pg64 = le64_to_cpu(head->layout.ol_pgid); req->r_reply = 0; req->r_result = 0; atomic_set(&req->r_ref, 2); /* one for request_tree, one for caller */ diff --cc src/kernel/osdmap.c index f4b60a55f0ea,841e203c59c3..4ef7b433e7fa --- a/src/kernel/osdmap.c +++ b/src/kernel/osdmap.c @@@ -543,6 -543,6 +543,8 @@@ void calc_object_layout(struct ceph_obj struct ceph_osdmap *osdmap) { unsigned num, num_mask; ++ union ceph_pg pgid; ++ if (fl->fl_pg_preferred >= 0) { num = osdmap->lpg_num; num_mask = osdmap->lpg_num_mask; @@@ -550,12 -550,12 +552,15 @@@ num = osdmap->pg_num; num_mask = osdmap->pg_num_mask; } -- ol->ol_pgid.pg.ps = -- ceph_stable_mod(oid->bno + crush_hash32_2(oid->ino, -- oid->ino>>32), -- num, num_mask); -- ol->ol_pgid.pg.preferred = fl->fl_pg_preferred; -- ol->ol_pgid.pg.type = fl->fl_pg_type; -- ol->ol_pgid.pg.size = fl->fl_pg_size; -- ol->ol_stripe_unit = fl->fl_object_stripe_unit; ++ ++ pgid.pg64 = 0; /* start with it zeroed out */ ++ pgid.pg.ps = ceph_stable_mod(oid->bno + crush_hash32_2(oid->ino, ++ oid->ino>>32), ++ num, num_mask); ++ pgid.pg.preferred = fl->fl_pg_preferred; ++ pgid.pg.type = fl->fl_pg_type; ++ pgid.pg.size = fl->fl_pg_size; ++ ++ ol->ol_pgid = cpu_to_le64(pgid.pg64); ++ ol->ol_stripe_unit = cpu_to_le32(fl->fl_object_stripe_unit); } diff --cc src/osdc/Filer.h index c9f5f0f4badf,6a094035b105..637f562e3c0d --- a/src/osdc/Filer.h +++ b/src/osdc/Filer.h @@@ -83,9 -84,10 +84,10 @@@ class Filer Objecter::OSDRead *prepare_read(inode_t& inode, off_t offset, size_t len, - bufferlist *bl) { - Objecter::OSDRead *rd = new Objecter::OSDRead(bl); - bufferlist *bl, ++ bufferlist *bl, + int flags) { + Objecter::OSDRead *rd = objecter->prepare_read(bl, flags); - file_to_extents(inode, offset, len, rd->extents); + file_to_extents(inode.ino, &inode.layout, offset, len, rd->extents); return rd; } int read(inode_t& inode, @@@ -105,28 -108,30 +108,30 @@@ Context *onack, Context *oncommit, objectrev_t rev=0) { - Objecter::OSDWrite *wr = new Objecter::OSDWrite(bl); + Objecter::OSDWrite *wr = objecter->prepare_write(bl, flags); - file_to_extents(inode, offset, len, wr->extents, rev); + file_to_extents(inode.ino, &inode.layout, offset, len, wr->extents, rev); return objecter->modifyx(wr, onack, oncommit) > 0 ? 0:-1; } int zero(inode_t& inode, off_t offset, size_t len, + int flags, Context *onack, Context *oncommit) { - Objecter::OSDModify *z = new Objecter::OSDModify(CEPH_OSD_OP_ZERO); + Objecter::OSDModify *z = objecter->prepare_modify(CEPH_OSD_OP_ZERO, flags); - file_to_extents(inode, offset, len, z->extents); + file_to_extents(inode.ino, &inode.layout, offset, len, z->extents); return objecter->modifyx(z, onack, oncommit) > 0 ? 0:-1; } int remove(inode_t& inode, off_t offset, size_t len, + int flags, Context *onack, Context *oncommit) { - Objecter::OSDModify *z = new Objecter::OSDModify(CEPH_OSD_OP_DELETE); + Objecter::OSDModify *z = objecter->prepare_modify(CEPH_OSD_OP_DELETE, flags); - file_to_extents(inode, offset, len, z->extents); + file_to_extents(inode.ino, &inode.layout, offset, len, z->extents); return objecter->modifyx(z, onack, oncommit) > 0 ? 0:-1; } diff --cc src/osdc/ObjectCacher.h index 2da641312248,170b2e0e9b68..196687f92094 --- a/src/osdc/ObjectCacher.h +++ b/src/osdc/ObjectCacher.h @@@ -484,45 -484,46 +484,46 @@@ class ObjectCacher // file functions /*** async+caching (non-blocking) file interface ***/ - int file_read(inode_t& inode, + int file_read(inodeno_t ino, ceph_file_layout *layout, off_t offset, size_t len, bufferlist *bl, + int flags, Context *onfinish) { - Objecter::OSDRead *rd = new Objecter::OSDRead(bl); + Objecter::OSDRead *rd = objecter->prepare_read(bl, flags); - filer.file_to_extents(inode, offset, len, rd->extents); - return readx(rd, inode.ino, onfinish); + filer.file_to_extents(ino, layout, offset, len, rd->extents); + return readx(rd, ino, onfinish); } - int file_write(inode_t& inode, + int file_write(inodeno_t ino, ceph_file_layout *layout, off_t offset, size_t len, - bufferlist& bl, - objectrev_t rev=0) { - Objecter::OSDWrite *wr = new Objecter::OSDWrite(bl); + bufferlist& bl, int flags, + objectrev_t rev=0) { + Objecter::OSDWrite *wr = objecter->prepare_write(bl, flags); - filer.file_to_extents(inode, offset, len, wr->extents); - return writex(wr, inode.ino); + filer.file_to_extents(ino, layout, offset, len, wr->extents); + return writex(wr, ino); } /*** sync+blocking file interface ***/ - int file_atomic_sync_read(inode_t& inode, + int file_atomic_sync_read(inodeno_t ino, ceph_file_layout *layout, off_t offset, size_t len, - bufferlist *bl, + bufferlist *bl, int flags, Mutex &lock) { - Objecter::OSDRead *rd = new Objecter::OSDRead(bl); + Objecter::OSDRead *rd = objecter->prepare_read(bl, flags); - filer.file_to_extents(inode, offset, len, rd->extents); - return atomic_sync_readx(rd, inode.ino, lock); + filer.file_to_extents(ino, layout, offset, len, rd->extents); + return atomic_sync_readx(rd, ino, lock); } - int file_atomic_sync_write(inode_t& inode, + int file_atomic_sync_write(inodeno_t ino, ceph_file_layout *layout, off_t offset, size_t len, - bufferlist& bl, + bufferlist& bl, int flags, Mutex &lock, - objectrev_t rev=0) { - Objecter::OSDWrite *wr = new Objecter::OSDWrite(bl); + objectrev_t rev=0) { + Objecter::OSDWrite *wr = objecter->prepare_write(bl, flags); - filer.file_to_extents(inode, offset, len, wr->extents); - return atomic_sync_writex(wr, inode.ino, lock); + filer.file_to_extents(ino, layout, offset, len, wr->extents); + return atomic_sync_writex(wr, ino, lock); } };