summaryrefslogtreecommitdiff
path: root/src/osdc
diff options
context:
space:
mode:
authorLi Wang <liwang@ubuntukylin.com>2013-08-15 12:04:03 +0800
committerSage Weil <sage@inktank.com>2013-08-19 22:49:37 -0700
commit35b00c8b2c0688cb130b6af02e19cd6b69550f15 (patch)
tree28b63c6a2d1ba4c2c326d8ad24d547fac3ca009a /src/osdc
parent2398c1b57dc486f2cca44d7e924742d9525583d5 (diff)
downloadceph-35b00c8b2c0688cb130b6af02e19cd6b69550f15.tar.gz
Ceph-fuse: Fallocate and punch hole support
This patch implements fallocate and punch hole support for Ceph fuse client. Signed-off-by: Yunchuan Wen <yunchuanwen@ubuntukylin.com> Signed-off-by: Li Wang <liwang@ubuntukylin.com> Reviewed-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'src/osdc')
-rw-r--r--src/osdc/Filer.h23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/osdc/Filer.h b/src/osdc/Filer.h
index d1cfb4f5275..607dc7b30d5 100644
--- a/src/osdc/Filer.h
+++ b/src/osdc/Filer.h
@@ -208,12 +208,14 @@ class Filer {
uint64_t len,
utime_t mtime,
int flags,
+ bool keep_first,
Context *onack,
Context *oncommit) {
vector<ObjectExtent> extents;
Striper::file_to_extents(cct, ino, layout, offset, len, 0, extents);
if (extents.size() == 1) {
- if (extents[0].offset == 0 && extents[0].length == layout->fl_object_size)
+ if (extents[0].offset == 0 && extents[0].length == layout->fl_object_size &&
+ (!keep_first || extents[0].objectno != 0))
objecter->remove(extents[0].oid, extents[0].oloc,
snapc, mtime, flags, onack, oncommit);
else
@@ -223,7 +225,8 @@ class Filer {
C_GatherBuilder gack(cct, onack);
C_GatherBuilder gcom(cct, oncommit);
for (vector<ObjectExtent>::iterator p = extents.begin(); p != extents.end(); ++p) {
- if (p->offset == 0 && p->length == layout->fl_object_size)
+ if (p->offset == 0 && p->length == layout->fl_object_size &&
+ (!keep_first || p->objectno != 0))
objecter->remove(p->oid, p->oloc,
snapc, mtime, flags,
onack ? gack.new_sub():0,
@@ -240,6 +243,22 @@ class Filer {
return 0;
}
+ int zero(inodeno_t ino,
+ ceph_file_layout *layout,
+ const SnapContext& snapc,
+ uint64_t offset,
+ uint64_t len,
+ utime_t mtime,
+ int flags,
+ Context *onack,
+ Context *oncommit) {
+
+ return zero(ino, layout,
+ snapc, offset,
+ len, mtime,
+ flags, false,
+ onack, oncommit);
+ }
// purge range of ino.### objects
int purge_range(inodeno_t ino,
ceph_file_layout *layout,