Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71c68022 authored by Akilesh Kailash's avatar Akilesh Kailash Committed by Gerrit Code Review
Browse files

Merge changes from topic "vabc-merge-phase-1"

* changes:
  snapuserd: Refactor buffer allocation code
  snapuserd: Implement snapshot merge
  snapuserd: Move dm-snapshot-merge related code
parents 6042b45f fb964a1f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -145,6 +145,8 @@ class CowReader final : public ICowReader {
    // Creates a clone of the current CowReader without the file handlers
    std::unique_ptr<CowReader> CloneCowReader();

    void UpdateMergeOpsCompleted(int num_merge_ops) { header_.num_merge_ops += num_merge_ops; }

  private:
    bool ParseOps(std::optional<uint64_t> label);
    bool PrepMergeOps();
+13 −6
Original line number Diff line number Diff line
@@ -57,10 +57,16 @@ cc_defaults {
    ],
    srcs: [
        "snapuserd_server.cpp",
        "snapuserd.cpp",
        "dm-snapshot-merge/snapuserd.cpp",
        "dm-snapshot-merge/snapuserd_worker.cpp",
        "dm-snapshot-merge/snapuserd_readahead.cpp",
        "snapuserd_daemon.cpp",
        "snapuserd_worker.cpp",
        "snapuserd_readahead.cpp",
	"snapuserd_buffer.cpp",
	"user-space-merge/snapuserd_core.cpp",
	"user-space-merge/snapuserd_dm_user.cpp",
	"user-space-merge/snapuserd_merge.cpp",
	"user-space-merge/snapuserd_readahead.cpp",
	"user-space-merge/snapuserd_transitions.cpp",
    ],

    cflags: [
@@ -101,9 +107,10 @@ cc_test {
        "fs_mgr_defaults",
    ],
    srcs: [
        "cow_snapuserd_test.cpp",
        "snapuserd.cpp",
        "snapuserd_worker.cpp",
        "dm-snapshot-merge/cow_snapuserd_test.cpp",
        "dm-snapshot-merge/snapuserd.cpp",
        "dm-snapshot-merge/snapuserd_worker.cpp",
	"snapuserd_buffer.cpp",
    ],
    cflags: [
        "-Wall",
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include <libdm/dm.h>
#include <libdm/loop_control.h>
#include <libsnapshot/cow_writer.h>
#include <snapuserd/snapuserd_buffer.h>
#include <snapuserd/snapuserd_client.h>
#include <storage_literals/storage_literals.h>

+1 −33
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@
#include <libdm/dm.h>
#include <libsnapshot/cow_reader.h>
#include <libsnapshot/cow_writer.h>
#include <snapuserd/snapuserd_buffer.h>
#include <snapuserd/snapuserd_kernel.h>

namespace android {
@@ -89,39 +90,6 @@ enum class READ_AHEAD_IO_TRANSITION {
    READ_AHEAD_FAILURE,
};

class BufferSink : public IByteSink {
  public:
    void Initialize(size_t size);
    void* GetBufPtr() { return buffer_.get(); }
    void Clear() { memset(GetBufPtr(), 0, buffer_size_); }
    void* GetPayloadBuffer(size_t size);
    void* GetBuffer(size_t requested, size_t* actual) override;
    void UpdateBufferOffset(size_t size) { buffer_offset_ += size; }
    struct dm_user_header* GetHeaderPtr();
    bool ReturnData(void*, size_t) override { return true; }
    void ResetBufferOffset() { buffer_offset_ = 0; }
    void* GetPayloadBufPtr();

  private:
    std::unique_ptr<uint8_t[]> buffer_;
    loff_t buffer_offset_;
    size_t buffer_size_;
};

class XorSink : public IByteSink {
  public:
    void Initialize(BufferSink* sink, size_t size);
    void Reset();
    void* GetBuffer(size_t requested, size_t* actual) override;
    bool ReturnData(void* buffer, size_t len) override;

  private:
    BufferSink* bufsink_;
    std::unique_ptr<uint8_t[]> buffer_;
    size_t buffer_size_;
    size_t returned_;
};

class Snapuserd;

class ReadAheadThread {
Loading