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

Commit 520ae0a3 authored by Songchun Fan's avatar Songchun Fan Committed by Android (Google) Code Review
Browse files

Merge "[frameworks] update with incfs.h" into rvc-dev

parents 5532c779 20d6ef24
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -157,7 +157,6 @@ std::string makeBindMdName() {

IncrementalService::IncFsMount::~IncFsMount() {
    incrementalService.mDataLoaderManager->destroyDataLoader(mountId);
    control.reset();
    LOG(INFO) << "Unmounting and cleaning up mount " << mountId << " with root '" << root << '\'';
    for (auto&& [target, _] : bindPoints) {
        LOG(INFO) << "\tbind: " << target;
@@ -424,9 +423,10 @@ StorageId IncrementalService::createStorage(
            LOG(ERROR) << "Vold::mountIncFs() returned invalid control parcel.";
            return kInvalidStorageId;
        }
        control.cmd = controlParcel.cmd.release().release();
        control.pendingReads = controlParcel.pendingReads.release().release();
        control.logs = controlParcel.log.release().release();
        int cmd = controlParcel.cmd.release().release();
        int pendingReads = controlParcel.pendingReads.release().release();
        int logs = controlParcel.log.release().release();
        control = mIncFs->createControl(cmd, pendingReads, logs);
    }

    std::unique_lock l(mLock);
@@ -965,16 +965,17 @@ bool IncrementalService::mountExistingImage(std::string_view root, std::string_v
    auto mountTarget = path::join(root, constants().mount);
    const auto backing = path::join(root, constants().backing);

    IncFsMount::Control control;
    IncrementalFileSystemControlParcel controlParcel;
    auto status = mVold->mountIncFs(backing, mountTarget, 0, &controlParcel);
    if (!status.isOk()) {
        LOG(ERROR) << "Vold::mountIncFs() failed: " << status.toString8();
        return false;
    }
    control.cmd = controlParcel.cmd.release().release();
    control.pendingReads = controlParcel.pendingReads.release().release();
    control.logs = controlParcel.log.release().release();

    int cmd = controlParcel.cmd.release().release();
    int pendingReads = controlParcel.pendingReads.release().release();
    int logs = controlParcel.log.release().release();
    IncFsMount::Control control = mIncFs->createControl(cmd, pendingReads, logs);

    auto ifs = std::make_shared<IncFsMount>(std::string(root), -1, std::move(control), *this);

@@ -1084,10 +1085,10 @@ bool IncrementalService::prepareDataLoader(IncrementalService::IncFsMount& ifs,
    }
    FileSystemControlParcel fsControlParcel;
    fsControlParcel.incremental = aidl::make_nullable<IncrementalFileSystemControlParcel>();
    fsControlParcel.incremental->cmd.reset(base::unique_fd(::dup(ifs.control.cmd)));
    fsControlParcel.incremental->cmd.reset(base::unique_fd(::dup(ifs.control.cmd())));
    fsControlParcel.incremental->pendingReads.reset(
            base::unique_fd(::dup(ifs.control.pendingReads)));
    fsControlParcel.incremental->log.reset(base::unique_fd(::dup(ifs.control.logs)));
            base::unique_fd(::dup(ifs.control.pendingReads())));
    fsControlParcel.incremental->log.reset(base::unique_fd(::dup(ifs.control.logs())));
    sp<IncrementalDataLoaderListener> listener =
            new IncrementalDataLoaderListener(*this,
                                              externalListener ? *externalListener
+22 −16
Original line number Diff line number Diff line
@@ -66,15 +66,17 @@ public:
class IncFsWrapper {
public:
    virtual ~IncFsWrapper() = default;
    virtual ErrorCode makeFile(Control control, std::string_view path, int mode, FileId id,
    virtual Control createControl(IncFsFd cmd, IncFsFd pendingReads, IncFsFd logs) const = 0;
    virtual ErrorCode makeFile(const Control& control, std::string_view path, int mode, FileId id,
                               NewFileParams params) const = 0;
    virtual ErrorCode makeDir(Control control, std::string_view path, int mode) const = 0;
    virtual RawMetadata getMetadata(Control control, FileId fileid) const = 0;
    virtual RawMetadata getMetadata(Control control, std::string_view path) const = 0;
    virtual FileId getFileId(Control control, std::string_view path) const = 0;
    virtual ErrorCode link(Control control, std::string_view from, std::string_view to) const = 0;
    virtual ErrorCode unlink(Control control, std::string_view path) const = 0;
    virtual base::unique_fd openWrite(Control control, FileId id) const = 0;
    virtual ErrorCode makeDir(const Control& control, std::string_view path, int mode) const = 0;
    virtual RawMetadata getMetadata(const Control& control, FileId fileid) const = 0;
    virtual RawMetadata getMetadata(const Control& control, std::string_view path) const = 0;
    virtual FileId getFileId(const Control& control, std::string_view path) const = 0;
    virtual ErrorCode link(const Control& control, std::string_view from,
                           std::string_view to) const = 0;
    virtual ErrorCode unlink(const Control& control, std::string_view path) const = 0;
    virtual base::unique_fd openWrite(const Control& control, FileId id) const = 0;
    virtual ErrorCode writeBlocks(Span<const DataBlock> blocks) const = 0;
};

@@ -149,29 +151,33 @@ class RealIncFs : public IncFsWrapper {
public:
    RealIncFs() = default;
    ~RealIncFs() = default;
    ErrorCode makeFile(Control control, std::string_view path, int mode, FileId id,
    Control createControl(IncFsFd cmd, IncFsFd pendingReads, IncFsFd logs) const override {
        return incfs::createControl(cmd, pendingReads, logs);
    }
    ErrorCode makeFile(const Control& control, std::string_view path, int mode, FileId id,
                       NewFileParams params) const override {
        return incfs::makeFile(control, path, mode, id, params);
    }
    ErrorCode makeDir(Control control, std::string_view path, int mode) const override {
    ErrorCode makeDir(const Control& control, std::string_view path, int mode) const override {
        return incfs::makeDir(control, path, mode);
    }
    RawMetadata getMetadata(Control control, FileId fileid) const override {
    RawMetadata getMetadata(const Control& control, FileId fileid) const override {
        return incfs::getMetadata(control, fileid);
    }
    RawMetadata getMetadata(Control control, std::string_view path) const override {
    RawMetadata getMetadata(const Control& control, std::string_view path) const override {
        return incfs::getMetadata(control, path);
    }
    FileId getFileId(Control control, std::string_view path) const override {
    FileId getFileId(const Control& control, std::string_view path) const override {
        return incfs::getFileId(control, path);
    }
    ErrorCode link(Control control, std::string_view from, std::string_view to) const override {
    ErrorCode link(const Control& control, std::string_view from,
                   std::string_view to) const override {
        return incfs::link(control, from, to);
    }
    ErrorCode unlink(Control control, std::string_view path) const override {
    ErrorCode unlink(const Control& control, std::string_view path) const override {
        return incfs::unlink(control, path);
    }
    base::unique_fd openWrite(Control control, FileId id) const override {
    base::unique_fd openWrite(const Control& control, FileId id) const override {
        return base::unique_fd{incfs::openWrite(control, id)};
    }
    ErrorCode writeBlocks(Span<const DataBlock> blocks) const override {
+12 −11
Original line number Diff line number Diff line
@@ -164,22 +164,23 @@ private:

class MockIncFs : public IncFsWrapper {
public:
    MOCK_CONST_METHOD3(createControl, Control(IncFsFd cmd, IncFsFd pendingReads, IncFsFd logs));
    MOCK_CONST_METHOD5(makeFile,
                       ErrorCode(Control control, std::string_view path, int mode, FileId id,
                       ErrorCode(const Control& control, std::string_view path, int mode, FileId id,
                                 NewFileParams params));
    MOCK_CONST_METHOD3(makeDir, ErrorCode(Control control, std::string_view path, int mode));
    MOCK_CONST_METHOD2(getMetadata, RawMetadata(Control control, FileId fileid));
    MOCK_CONST_METHOD2(getMetadata, RawMetadata(Control control, std::string_view path));
    MOCK_CONST_METHOD2(getFileId, FileId(Control control, std::string_view path));
    MOCK_CONST_METHOD3(makeDir, ErrorCode(const Control& control, std::string_view path, int mode));
    MOCK_CONST_METHOD2(getMetadata, RawMetadata(const Control& control, FileId fileid));
    MOCK_CONST_METHOD2(getMetadata, RawMetadata(const Control& control, std::string_view path));
    MOCK_CONST_METHOD2(getFileId, FileId(const Control& control, std::string_view path));
    MOCK_CONST_METHOD3(link,
                       ErrorCode(Control control, std::string_view from, std::string_view to));
    MOCK_CONST_METHOD2(unlink, ErrorCode(Control control, std::string_view path));
    MOCK_CONST_METHOD2(openWrite, base::unique_fd(Control control, FileId id));
                       ErrorCode(const Control& control, std::string_view from, std::string_view to));
    MOCK_CONST_METHOD2(unlink, ErrorCode(const Control& control, std::string_view path));
    MOCK_CONST_METHOD2(openWrite, base::unique_fd(const Control& control, FileId id));
    MOCK_CONST_METHOD1(writeBlocks, ErrorCode(Span<const DataBlock> blocks));

    void makeFileFails() { ON_CALL(*this, makeFile(_, _, _, _, _)).WillByDefault(Return(-1)); }
    void makeFileSuccess() { ON_CALL(*this, makeFile(_, _, _, _, _)).WillByDefault(Return(0)); }
    RawMetadata getMountInfoMetadata(Control control, std::string_view path) {
    RawMetadata getMountInfoMetadata(const Control& control, std::string_view path) {
        metadata::Mount m;
        m.mutable_storage()->set_id(100);
        m.mutable_loader()->set_package_name("com.test");
@@ -189,13 +190,13 @@ public:
        m.mutable_loader()->release_package_name();
        return {metadata.begin(), metadata.end()};
    }
    RawMetadata getStorageMetadata(Control control, std::string_view path) {
    RawMetadata getStorageMetadata(const Control& control, std::string_view path) {
        metadata::Storage st;
        st.set_id(100);
        auto metadata = st.SerializeAsString();
        return {metadata.begin(), metadata.end()};
    }
    RawMetadata getBindPointMetadata(Control control, std::string_view path) {
    RawMetadata getBindPointMetadata(const Control& control, std::string_view path) {
        metadata::BindPoint bp;
        std::string destPath = "dest";
        std::string srcPath = "src";