Fixes for node_ensure_len

This commit is contained in:
Jeremy Soller
2016-06-21 11:13:59 -06:00
parent 55e6b13555
commit dd4a90119f
+20 -3
View File
@@ -296,16 +296,31 @@ impl FileSystem {
return Err(Error::new(ENOENT));
}
let node = try!(self.node(block));
for extent in node.1.extents.iter() {
let mut changed = false;
let mut node = try!(self.node(block));
for mut extent in node.1.extents.iter_mut() {
if extent.length >= length {
length = 0;
break;
} else {
length -= extent.length;
changed = true;
let allocated = ((extent.length + 511)/512) * 512;
if allocated >= length {
extent.length = length;
length = 0;
break;
} else {
extent.length = allocated;
length -= allocated;
}
}
}
if changed {
try!(self.write_at(node.0, &node.1));
}
if length > 0 {
if node.1.next > 0 {
self.node_ensure_len(node.1.next, length)
@@ -459,6 +474,8 @@ impl FileSystem {
let mut extents = Vec::new();
try!(self.node_extents(block, block_offset, byte_offset + buf.len(), &mut extents));
println!("{:?}", extents);
let mut i = 0;
for extent in extents.iter() {
let mut block = extent.block;