From: Jianpeng Ma Date: Tue, 25 Nov 2014 06:36:02 +0000 (+0800) Subject: PGBackend: Make objects_read_sync can handle fadvise flags X-Git-Tag: v0.91~55^2~3^2~13 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fc639b19617669be3cb8a20d7208dd0a6d5063d4;p=ceph.git PGBackend: Make objects_read_sync can handle fadvise flags Signed-off-by: Jianpeng Ma --- diff --git a/src/osd/ECBackend.cc b/src/osd/ECBackend.cc index 72f7371e145c..ed971ab9ea85 100644 --- a/src/osd/ECBackend.cc +++ b/src/osd/ECBackend.cc @@ -1570,6 +1570,7 @@ int ECBackend::objects_read_sync( const hobject_t &hoid, uint64_t off, uint64_t len, + uint32_t op_flags, bufferlist *bl) { return -EOPNOTSUPP; diff --git a/src/osd/ECBackend.h b/src/osd/ECBackend.h index f6199ff32125..2a71c339819e 100644 --- a/src/osd/ECBackend.h +++ b/src/osd/ECBackend.h @@ -112,6 +112,7 @@ public: const hobject_t &hoid, uint64_t off, uint64_t len, + uint32_t op_flags, bufferlist *bl); /** diff --git a/src/osd/PGBackend.h b/src/osd/PGBackend.h index 59efef1c955f..82d520e8c32b 100644 --- a/src/osd/PGBackend.h +++ b/src/osd/PGBackend.h @@ -572,6 +572,7 @@ const hobject_t &hoid, uint64_t off, uint64_t len, + uint32_t op_flags, bufferlist *bl) = 0; virtual void objects_read_async( diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index 2940dc8dcd49..893ed180573b 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -225,9 +225,10 @@ int ReplicatedBackend::objects_read_sync( const hobject_t &hoid, uint64_t off, uint64_t len, + uint32_t op_flags, bufferlist *bl) { - return store->read(coll, hoid, off, len, *bl); + return store->read(coll, hoid, off, len, *bl, op_flags); } struct AsyncReadCallback : public GenContext { diff --git a/src/osd/ReplicatedBackend.h b/src/osd/ReplicatedBackend.h index 5e1f0ec12666..7de3922d2860 100644 --- a/src/osd/ReplicatedBackend.h +++ b/src/osd/ReplicatedBackend.h @@ -153,6 +153,7 @@ public: const hobject_t &hoid, uint64_t off, uint64_t len, + uint32_t op_flags, bufferlist *bl); void objects_read_async( diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index f5898ebb9aeb..502cf0cc32b0 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -3332,7 +3332,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) dout(10) << " async_read noted for " << soid << dendl; } else { int r = pgbackend->objects_read_sync( - soid, op.extent.offset, op.extent.length, &osd_op.outdata); + soid, op.extent.offset, op.extent.length, op.flags, &osd_op.outdata); if (r >= 0) op.extent.length = r; else { @@ -3407,8 +3407,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) last < miter->first) { bufferlist t; uint64_t len = miter->first - last; - r = pgbackend->objects_read_sync( - soid, last, len, &t); + r = pgbackend->objects_read_sync(soid, last, len, op.flags, &t); if (!t.is_zero()) { osd->clog->error() << coll << " " << soid << " sparse-read found data in hole " << last << "~" << len << "\n"; @@ -3416,8 +3415,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) } bufferlist tmpbl; - r = pgbackend->objects_read_sync( - soid, miter->first, miter->second, &tmpbl); + r = pgbackend->objects_read_sync(soid, miter->first, miter->second, op.flags, &tmpbl); if (r < 0) break; @@ -3435,8 +3433,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) if (last < end) { bufferlist t; uint64_t len = end - last; - r = pgbackend->objects_read_sync( - soid, last, len, &t); + r = pgbackend->objects_read_sync(soid, last, len, op.flags, &t); if (!t.is_zero()) { osd->clog->error() << coll << " " << soid << " sparse-read found data in hole " << last << "~" << len << "\n"; @@ -5841,7 +5838,7 @@ int ReplicatedPG::fill_in_copy_get( cb->len = result; } else { result = pgbackend->objects_read_sync( - oi.soid, cursor.data_offset, left, &bl); + oi.soid, cursor.data_offset, left, osd_op.op.flags, &bl); if (result < 0) return result; }