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
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
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);
}
}
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);
* 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;
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 */
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;
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);
}
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,
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;
}
// 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);
}
};