From b9cbf1a76cc9673d85bd64a9f7bb9f5a86f9a494 Mon Sep 17 00:00:00 2001 From: sageweil Date: Tue, 18 Dec 2007 17:56:41 +0000 Subject: [PATCH] bits git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@2221 29311d96-e01e-0410-9327-a35deaab8ce9 --- branches/ebofs/ebofs/BufferCache.cc | 4 ++-- branches/ebofs/ebofs/Ebofs.cc | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/branches/ebofs/ebofs/BufferCache.cc b/branches/ebofs/ebofs/BufferCache.cc index c8bfba9902493..9fe8db19e5cde 100644 --- a/branches/ebofs/ebofs/BufferCache.cc +++ b/branches/ebofs/ebofs/BufferCache.cc @@ -1282,15 +1282,15 @@ void BufferCache::rx_finish(ObjectCache *oc, block_t pblock = diskstart; // verify csum + csum_t want = sp->second.csum; csum_t actual = calc_csum(bl.c_str(), bl.length()); - if (actual != sp->second.csum || rand() % 5 == 0) { + if (actual != want || rand() % 5 == 0) { dout(0) << "rx_finish bad csum on partial block " << pblock << dendl; derr(0) << "rx_finish bad csum on partial block " << pblock << " ****************" << dendl; poison_commit = true; *sp->second.on->get_extent_csum_ptr(sp->second.oblock, 1) = actual; sp->second.on->data_csum += actual - want; - interval_set bad; bad.insert(sp->second.oblock*EBOFS_BLOCK_SIZE, EBOFS_BLOCK_SIZE); sp->second.on->bad_byte_extents.union_of(bad); diff --git a/branches/ebofs/ebofs/Ebofs.cc b/branches/ebofs/ebofs/Ebofs.cc index 14ff96e7879f9..35002a54cb56d 100644 --- a/branches/ebofs/ebofs/Ebofs.cc +++ b/branches/ebofs/ebofs/Ebofs.cc @@ -1617,6 +1617,21 @@ void Ebofs::apply_write(Onode *on, off_t off, size_t len, const bufferlist& bl) block_t bstart = off / EBOFS_BLOCK_SIZE; + // partial? + off_t last_block_byte = on->last_block * EBOFS_BLOCK_SIZE; + bool partial_head = (off & EBOFS_BLOCK_MASK) && off < last_block_byte; + bool partial_tail = ((off+len) & EBOFS_BLOCK_MASK) && (off+len) < on->object_size; + + partial_head + if ((bh->start() == bstart && + opos % EBOFS_BLOCK_SIZE != 0) || + (bh->last() == blast && + ((off_t)len+off) % EBOFS_BLOCK_SIZE != 0 && + ((off_t)len+off) < on->object_size)) { + + + + // extending object? if (off+(off_t)len > on->object_size) { dout(10) << "apply_write extending size on " << *on << ": " << on->object_size << " -> " << off+len << dendl; @@ -1629,7 +1644,6 @@ void Ebofs::apply_write(Onode *on, off_t off, size_t len, const bufferlist& bl) block_t blen = blast-bstart+1; block_t oldlastblock = on->last_block; - // map b range onto buffer_heads map hits; oc->map_write(bstart, blen, hits, super_epoch); -- 2.39.5