Merge "libsnapshot: Implement OnlineKernelSnapshotWriter::OpenReader." am: f70d801d4b
am: 66469ee991
am: 5d4aa45cd4
Original change: https://android-review.googlesource.com/c/platform/system/core/+/1455721 Change-Id: Ib7f5f0d06e74fa5bf29895167550c2325d15b4e6
This commit is contained in:
commit
47ec08dc95
5 changed files with 137 additions and 2 deletions
|
@ -74,6 +74,7 @@ filegroup {
|
|||
"android/snapshot/snapshot.proto",
|
||||
"device_info.cpp",
|
||||
"snapshot.cpp",
|
||||
"snapshot_reader.cpp",
|
||||
"snapshot_stats.cpp",
|
||||
"snapshot_stub.cpp",
|
||||
"snapshot_metadata_updater.cpp",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "device_info.h"
|
||||
#include "partition_cow_creator.h"
|
||||
#include "snapshot_metadata_updater.h"
|
||||
#include "snapshot_reader.h"
|
||||
#include "utility.h"
|
||||
|
||||
namespace android {
|
||||
|
|
77
fs_mgr/libsnapshot/snapshot_reader.cpp
Normal file
77
fs_mgr/libsnapshot/snapshot_reader.cpp
Normal file
|
@ -0,0 +1,77 @@
|
|||
//
|
||||
// Copyright (C) 2020 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
#include <ext4_utils/ext4_utils.h>
|
||||
|
||||
#include "snapshot_reader.h"
|
||||
|
||||
namespace android {
|
||||
namespace snapshot {
|
||||
|
||||
// Not supported.
|
||||
bool ReadOnlyFileDescriptor::Open(const char*, int, mode_t) {
|
||||
errno = EINVAL;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ReadOnlyFileDescriptor::Open(const char*, int) {
|
||||
errno = EINVAL;
|
||||
return false;
|
||||
}
|
||||
|
||||
ssize_t ReadOnlyFileDescriptor::Write(const void*, size_t) {
|
||||
errno = EINVAL;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ReadOnlyFileDescriptor::BlkIoctl(int, uint64_t, uint64_t, int*) {
|
||||
errno = EINVAL;
|
||||
return false;
|
||||
}
|
||||
|
||||
ReadFdFileDescriptor::ReadFdFileDescriptor(android::base::unique_fd&& fd) : fd_(std::move(fd)) {}
|
||||
|
||||
ssize_t ReadFdFileDescriptor::Read(void* buf, size_t count) {
|
||||
return read(fd_.get(), buf, count);
|
||||
}
|
||||
|
||||
off64_t ReadFdFileDescriptor::Seek(off64_t offset, int whence) {
|
||||
return lseek(fd_.get(), offset, whence);
|
||||
}
|
||||
|
||||
uint64_t ReadFdFileDescriptor::BlockDevSize() {
|
||||
return get_block_device_size(fd_.get());
|
||||
}
|
||||
|
||||
bool ReadFdFileDescriptor::Close() {
|
||||
fd_ = {};
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ReadFdFileDescriptor::IsSettingErrno() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ReadFdFileDescriptor::IsOpen() {
|
||||
return fd_ >= 0;
|
||||
}
|
||||
|
||||
bool ReadFdFileDescriptor::Flush() {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace snapshot
|
||||
} // namespace android
|
50
fs_mgr/libsnapshot/snapshot_reader.h
Normal file
50
fs_mgr/libsnapshot/snapshot_reader.h
Normal file
|
@ -0,0 +1,50 @@
|
|||
//
|
||||
// Copyright (C) 2020 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <android-base/file.h>
|
||||
#include <payload_consumer/file_descriptor.h>
|
||||
|
||||
namespace android {
|
||||
namespace snapshot {
|
||||
|
||||
class ReadOnlyFileDescriptor : public chromeos_update_engine::FileDescriptor {
|
||||
public:
|
||||
bool Open(const char* path, int flags, mode_t mode) override;
|
||||
bool Open(const char* path, int flags) override;
|
||||
ssize_t Write(const void* buf, size_t count) override;
|
||||
bool BlkIoctl(int request, uint64_t start, uint64_t length, int* result) override;
|
||||
};
|
||||
|
||||
class ReadFdFileDescriptor : public ReadOnlyFileDescriptor {
|
||||
public:
|
||||
explicit ReadFdFileDescriptor(android::base::unique_fd&& fd);
|
||||
|
||||
ssize_t Read(void* buf, size_t count) override;
|
||||
off64_t Seek(off64_t offset, int whence) override;
|
||||
uint64_t BlockDevSize() override;
|
||||
bool Close() override;
|
||||
bool IsSettingErrno() override;
|
||||
bool IsOpen() override;
|
||||
bool Flush() override;
|
||||
|
||||
private:
|
||||
android::base::unique_fd fd_;
|
||||
};
|
||||
|
||||
} // namespace snapshot
|
||||
} // namespace android
|
|
@ -19,10 +19,12 @@
|
|||
#include <android-base/file.h>
|
||||
#include <android-base/logging.h>
|
||||
#include <payload_consumer/file_descriptor.h>
|
||||
#include "snapshot_reader.h"
|
||||
|
||||
namespace android {
|
||||
namespace snapshot {
|
||||
|
||||
using android::base::unique_fd;
|
||||
using chromeos_update_engine::FileDescriptor;
|
||||
|
||||
ISnapshotWriter::ISnapshotWriter(const CowOptions& options) : ICowWriter(options) {}
|
||||
|
@ -83,8 +85,12 @@ bool OnlineKernelSnapshotWriter::EmitCopy(uint64_t new_block, uint64_t old_block
|
|||
}
|
||||
|
||||
std::unique_ptr<FileDescriptor> OnlineKernelSnapshotWriter::OpenReader() {
|
||||
LOG(ERROR) << "OnlineKernelSnapshotWriter::OpenReader not yet implemented";
|
||||
return nullptr;
|
||||
unique_fd fd(dup(snapshot_fd_.get()));
|
||||
if (fd < 0) {
|
||||
PLOG(ERROR) << "dup2 failed in OpenReader";
|
||||
return nullptr;
|
||||
}
|
||||
return std::make_unique<ReadFdFileDescriptor>(std::move(fd));
|
||||
}
|
||||
|
||||
} // namespace snapshot
|
||||
|
|
Loading…
Reference in a new issue