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

Commit c80040c9 authored by Akilesh Kailash's avatar Akilesh Kailash Committed by Automerger Merge Worker
Browse files

Merge changes I25fb5fce,I86cffff6,I031eb1a1,Ie40633c0,I08562b89 am: 1765610f

Original change: https://android-review.googlesource.com/c/platform/system/core/+/1799089

Change-Id: I71b09f7f389f61390afc5bf871cad4bb1a3d7832
parents 6c891567 1765610f
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -34,11 +34,12 @@
namespace android {
namespace snapshot {

CowReader::CowReader()
CowReader::CowReader(ReaderFlags reader_flag)
    : fd_(-1),
      header_(),
      fd_size_(0),
      merge_op_blocks_(std::make_shared<std::vector<uint32_t>>()) {}
      merge_op_blocks_(std::make_shared<std::vector<uint32_t>>()),
      reader_flag_(reader_flag) {}

static void SHA256(const void*, size_t, uint8_t[]) {
#if 0
@@ -415,7 +416,7 @@ bool CowReader::ParseOps(std::optional<uint64_t> label) {
//==============================================================
bool CowReader::PrepMergeOps() {
    auto merge_op_blocks = std::make_shared<std::vector<uint32_t>>();
    std::set<int, std::greater<int>> other_ops;
    std::vector<int> other_ops;
    auto seq_ops_set = std::unordered_set<uint32_t>();
    auto block_map = std::make_shared<std::unordered_map<uint32_t, int>>();
    size_t num_seqs = 0;
@@ -446,7 +447,7 @@ bool CowReader::PrepMergeOps() {
        if (!has_seq_ops_ && IsOrderedOp(current_op)) {
            merge_op_blocks->emplace_back(current_op.new_block);
        } else if (seq_ops_set.count(current_op.new_block) == 0) {
            other_ops.insert(current_op.new_block);
            other_ops.push_back(current_op.new_block);
        }
        block_map->insert({current_op.new_block, i});
    }
@@ -462,6 +463,18 @@ bool CowReader::PrepMergeOps() {
    } else {
        num_ordered_ops_to_merge_ = 0;
    }

    // Sort the vector in increasing order if merging in user-space as
    // we can batch merge them when iterating from forward.
    //
    // dm-snapshot-merge requires decreasing order as we iterate the blocks
    // in reverse order.
    if (reader_flag_ == ReaderFlags::USERSPACE_MERGE) {
        std::sort(other_ops.begin(), other_ops.end());
    } else {
        std::sort(other_ops.begin(), other_ops.end(), std::greater<int>());
    }

    merge_op_blocks->reserve(merge_op_blocks->size() + other_ops.size());
    for (auto block : other_ops) {
        merge_op_blocks->emplace_back(block);
+2 −2
Original line number Diff line number Diff line
@@ -26,8 +26,8 @@ static constexpr uint32_t kCowVersionMinor = 0;

static constexpr uint32_t kCowVersionManifest = 2;

static constexpr uint32_t BLOCK_SZ = 4096;
static constexpr uint32_t BLOCK_SHIFT = (__builtin_ffs(BLOCK_SZ) - 1);
static constexpr size_t BLOCK_SZ = 4096;
static constexpr size_t BLOCK_SHIFT = (__builtin_ffs(BLOCK_SZ) - 1);

// This header appears as the first sequence of bytes in the COW. All fields
// in the layout are little-endian encoded. The on-disk layout is:
+7 −1
Original line number Diff line number Diff line
@@ -104,7 +104,12 @@ class ICowOpIter {

class CowReader final : public ICowReader {
  public:
    CowReader();
    enum class ReaderFlags {
        DEFAULT = 0,
        USERSPACE_MERGE = 1,
    };

    CowReader(ReaderFlags reader_flag = ReaderFlags::DEFAULT);
    ~CowReader() { owned_fd_ = {}; }

    // Parse the COW, optionally, up to the given label. If no label is
@@ -166,6 +171,7 @@ class CowReader final : public ICowReader {
    uint64_t num_ordered_ops_to_merge_;
    bool has_seq_ops_;
    std::shared_ptr<std::unordered_map<uint64_t, uint64_t>> data_loc_;
    ReaderFlags reader_flag_;
};

}  // namespace snapshot
+2 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ cc_defaults {
        "fs_mgr_defaults",
    ],
    srcs: [
        "snapuserd_server.cpp",
        "dm-snapshot-merge/snapuserd_server.cpp",
        "dm-snapshot-merge/snapuserd.cpp",
        "dm-snapshot-merge/snapuserd_worker.cpp",
        "dm-snapshot-merge/snapuserd_readahead.cpp",
@@ -67,6 +67,7 @@ cc_defaults {
	"user-space-merge/snapuserd_merge.cpp",
	"user-space-merge/snapuserd_readahead.cpp",
	"user-space-merge/snapuserd_transitions.cpp",
        "user-space-merge/snapuserd_server.cpp",
    ],

    cflags: [
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
#include <android-base/scopeguard.h>
#include <fs_mgr/file_wait.h>
#include <snapuserd/snapuserd_client.h>

#include "snapuserd_server.h"

#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
Loading