From: Jianpeng Ma Date: Tue, 25 Nov 2014 06:51:14 +0000 (+0800) Subject: PGTransaction: Modify append/write function can handle fadvise flags. X-Git-Tag: v0.91~55^2~3^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8acc9321a242d271a2e44cc541e11e6ad03e20cc;p=ceph.git PGTransaction: Modify append/write function can handle fadvise flags. Signed-off-by: Jianpeng Ma --- diff --git a/src/osd/ECTransaction.h b/src/osd/ECTransaction.h index 7b104c7e254f..e0a3afa6b4af 100644 --- a/src/osd/ECTransaction.h +++ b/src/osd/ECTransaction.h @@ -28,8 +28,9 @@ public: hobject_t oid; uint64_t off; bufferlist bl; - AppendOp(const hobject_t &oid, uint64_t off, bufferlist &bl) - : oid(oid), off(off), bl(bl) {} + uint32_t fadvise_flags; + AppendOp(const hobject_t &oid, uint64_t off, bufferlist &bl, uint32_t flags) + : oid(oid), off(off), bl(bl), fadvise_flags(flags) {} }; struct CloneOp { hobject_t source; @@ -110,14 +111,15 @@ public: const hobject_t &hoid, uint64_t off, uint64_t len, - bufferlist &bl) { + bufferlist &bl, + uint32_t fadvise_flags) { if (len == 0) { touch(hoid); return; } written += len; assert(len == bl.length()); - ops.push_back(AppendOp(hoid, off, bl)); + ops.push_back(AppendOp(hoid, off, bl, fadvise_flags)); } void stash( const hobject_t &hoid, diff --git a/src/osd/PGBackend.h b/src/osd/PGBackend.h index dea075aeccbd..8b6c397750c2 100644 --- a/src/osd/PGBackend.h +++ b/src/osd/PGBackend.h @@ -434,7 +434,8 @@ const hobject_t &hoid, ///< [in] object to write uint64_t off, ///< [in] off at which to write uint64_t len, ///< [in] len to write from bl - bufferlist &bl ///< [in] bl to write will be claimed to len + bufferlist &bl, ///< [in] bl to write will be claimed to len + uint32_t fadvise_flags = 0 ///< [in] fadvise hint ) { assert(0); } virtual void omap_setkeys( const hobject_t &hoid, ///< [in] object to write @@ -475,8 +476,9 @@ const hobject_t &hoid, ///< [in] object to write uint64_t off, ///< [in] off at which to write uint64_t len, ///< [in] len to write from bl - bufferlist &bl ///< [in] bl to write will be claimed to len - ) { write(hoid, off, len, bl); } + bufferlist &bl, ///< [in] bl to write will be claimed to len + uint32_t fadvise_flags ///< [in] fadvise hint + ) { write(hoid, off, len, bl, fadvise_flags); } /// to_append *must* have come from the same PGBackend (same concrete type) virtual void append( diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index 97e69dd0c646..fcf51ed76678 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -321,7 +321,8 @@ public: const hobject_t &hoid, uint64_t off, uint64_t len, - bufferlist &bl + bufferlist &bl, + uint32_t fadvise_flags ) { written += len; t->write(get_coll_ct(hoid), hoid, off, len, bl); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 8b587c13603b..856fb99cb216 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -4037,9 +4037,9 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) if (result < 0) break; if (pool.info.require_rollback()) { - t->append(soid, op.extent.offset, op.extent.length, osd_op.indata); + t->append(soid, op.extent.offset, op.extent.length, osd_op.indata, op.flags); } else { - t->write(soid, op.extent.offset, op.extent.length, osd_op.indata); + t->write(soid, op.extent.offset, op.extent.length, osd_op.indata, op.flags); } write_update_size_and_usage(ctx->delta_stats, oi, ctx->modified_ranges, op.extent.offset, op.extent.length, true); @@ -4072,7 +4072,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) } } ctx->mod_desc.create(); - t->append(soid, op.extent.offset, op.extent.length, osd_op.indata); + t->append(soid, op.extent.offset, op.extent.length, osd_op.indata, op.flags); if (obs.exists) { map to_set = ctx->obc->attr_cache; map > &overlay = @@ -4094,7 +4094,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) if (obs.exists) { t->truncate(soid, 0); } - t->write(soid, op.extent.offset, op.extent.length, osd_op.indata); + t->write(soid, op.extent.offset, op.extent.length, osd_op.indata, op.flags); } if (!obs.exists) { ctx->delta_stats.num_objects++; @@ -6126,7 +6126,8 @@ void ReplicatedPG::_write_copy_chunk(CopyOpRef cop, PGBackend::PGTransaction *t) cop->results.temp_oid, cop->temp_cursor.data_offset, cop->data.length(), - cop->data); + cop->data, + 0); cop->data.clear(); } if (!pool.info.require_rollback()) { @@ -11322,7 +11323,7 @@ void ReplicatedPG::hit_set_persist() bufferlist boi(sizeof(ctx->new_obs.oi)); ::encode(ctx->new_obs.oi, boi); - ctx->op_t->append(oid, 0, bl.length(), bl); + ctx->op_t->append(oid, 0, bl.length(), bl, 0); setattr_maybe_cache(ctx->obc, ctx, ctx->op_t, OI_ATTR, boi); setattr_maybe_cache(ctx->obc, ctx, ctx->op_t, SS_ATTR, bss); ctx->log.push_back(