From cd0fc7aabe41c2a51db1d6e5187b54a10cf9c2e3 Mon Sep 17 00:00:00 2001 From: sage Date: Wed, 1 Mar 2006 07:17:05 +0000 Subject: [PATCH] truncate bug; stupid git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@706 29311d96-e01e-0410-9327-a35deaab8ce9 --- ceph/ebofs/BlockDevice.cc | 2 +- ceph/ebofs/Ebofs.cc | 14 ++++++++++++-- ceph/ebofs/Onode.h | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ceph/ebofs/BlockDevice.cc b/ceph/ebofs/BlockDevice.cc index 506b3acb3a4ed..cd73a849f7f1b 100644 --- a/ceph/ebofs/BlockDevice.cc +++ b/ceph/ebofs/BlockDevice.cc @@ -557,7 +557,7 @@ int BlockDevice::open(kicker *idle) fd = 0; return -1; } - + cout << fd << endl; // lock /*int r = ::flock(fd, LOCK_EX); if (r < 0) { diff --git a/ceph/ebofs/Ebofs.cc b/ceph/ebofs/Ebofs.cc index a9ac581f453a0..39178f7dd1301 100644 --- a/ceph/ebofs/Ebofs.cc +++ b/ceph/ebofs/Ebofs.cc @@ -38,8 +38,6 @@ char *nice_blocks(block_t b) int Ebofs::mount() { - dout(2) << "mounting " << dev.get_device_name() << " " << dev.get_num_blocks() << " blocks, " << nice_blocks(dev.get_num_blocks()) << endl; - ebofs_lock.Lock(); assert(!mounted); @@ -49,6 +47,8 @@ int Ebofs::mount() return r; } + dout(2) << "mounting " << dev.get_device_name() << " " << dev.get_num_blocks() << " blocks, " << nice_blocks(dev.get_num_blocks()) << endl; + // read super bufferptr bp1 = bufferpool.alloc(EBOFS_BLOCK_SIZE); bufferptr bp2 = bufferpool.alloc(EBOFS_BLOCK_SIZE); @@ -1866,6 +1866,16 @@ int Ebofs::truncate(object_t oid, off_t size) for (unsigned i=0; i uncom; + if (nblocks > 0) { + interval_set left; + left.insert(0, nblocks); + uncom.intersection_of(left, on->uncommitted); + } + dout(10) << "uncommitted was " << on->uncommitted << " now " << uncom << endl; + on->uncommitted = uncom; } else { assert(size == on->object_size); diff --git a/ceph/ebofs/Onode.h b/ceph/ebofs/Onode.h index 9a9f1a1732b6c..900b5bf7ae9d3 100644 --- a/ceph/ebofs/Onode.h +++ b/ceph/ebofs/Onode.h @@ -342,6 +342,7 @@ inline ostream& operator<<(ostream& out, Onode& on) if (on.is_dirty()) out << " dirty"; if (on.is_dangling()) out << " dangling"; if (on.is_deleted()) out << " deleted"; + out << " uncom=" << on.uncommitted; // out << " " << &on; out << ")"; return out; -- 2.39.5