snapuserd: Move more fields out of Worker.
These fields are specific to either ReadWorker or MergeWorker, but not
both.
Bug: 288273605
Test: snapuserd_test
Change-Id: I2db9cfa2a8f034249879517bd90a40babe97bc64
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.cpp
index c47abe3..4c8223f 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.cpp
@@ -25,11 +25,19 @@
using namespace android::dm;
using android::base::unique_fd;
+void ReadWorker::CloseFds() {
+ ctrl_fd_ = {};
+ backing_store_fd_ = {};
+ Worker::CloseFds();
+}
+
ReadWorker::ReadWorker(const std::string& cow_device, const std::string& backing_device,
const std::string& control_device, const std::string& misc_name,
const std::string& base_path_merge,
std::shared_ptr<SnapshotHandler> snapuserd)
- : Worker(cow_device, backing_device, control_device, misc_name, base_path_merge, snapuserd) {}
+ : Worker(cow_device, misc_name, base_path_merge, snapuserd),
+ backing_store_device_(backing_device),
+ control_device_(control_device) {}
// Start the replace operation. This will read the
// internal COW format and if the block is compressed,
@@ -209,6 +217,19 @@
if (!Worker::Init()) {
return false;
}
+
+ backing_store_fd_.reset(open(backing_store_device_.c_str(), O_RDONLY));
+ if (backing_store_fd_ < 0) {
+ SNAP_PLOG(ERROR) << "Open Failed: " << backing_store_device_;
+ return false;
+ }
+
+ ctrl_fd_.reset(open(control_device_.c_str(), O_RDWR));
+ if (ctrl_fd_ < 0) {
+ SNAP_PLOG(ERROR) << "Unable to open " << control_device_;
+ return false;
+ }
+
xorsink_.Initialize(&bufsink_, BLOCK_SZ);
return true;
}
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.h b/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.h
index b12dab2..bc0474f 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.h
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/read_worker.h
@@ -30,6 +30,7 @@
bool Run();
bool Init() override;
+ void CloseFds() override;
private:
// Functions interacting with dm-user
@@ -50,6 +51,15 @@
bool ReadFromSourceDevice(const CowOperation* cow_op);
bool ReadDataFromBaseDevice(sector_t sector, size_t read_size);
+ constexpr bool IsBlockAligned(size_t size) { return ((size & (BLOCK_SZ - 1)) == 0); }
+ constexpr sector_t ChunkToSector(chunk_t chunk) { return chunk << CHUNK_SHIFT; }
+
+ std::string backing_store_device_;
+ unique_fd backing_store_fd_;
+
+ std::string control_device_;
+ unique_fd ctrl_fd_;
+
XorSink xorsink_;
bool header_response_ = false;
};
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp
index baf06b3..e52d752 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_core.cpp
@@ -59,9 +59,8 @@
worker_threads_.push_back(std::move(wt));
}
- merge_thread_ =
- std::make_unique<MergeWorker>(cow_device_, backing_store_device_, control_device_,
- misc_name_, base_path_merge_, GetSharedPtr());
+ merge_thread_ = std::make_unique<MergeWorker>(cow_device_, misc_name_, base_path_merge_,
+ GetSharedPtr());
read_ahead_thread_ = std::make_unique<ReadAhead>(cow_device_, backing_store_device_, misc_name_,
GetSharedPtr());
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_merge.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_merge.cpp
index ee71011..510e27d 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_merge.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_merge.cpp
@@ -24,11 +24,10 @@
using namespace android::dm;
using android::base::unique_fd;
-MergeWorker::MergeWorker(const std::string& cow_device, const std::string& backing_device,
- const std::string& control_device, const std::string& misc_name,
+MergeWorker::MergeWorker(const std::string& cow_device, const std::string& misc_name,
const std::string& base_path_merge,
std::shared_ptr<SnapshotHandler> snapuserd)
- : Worker(cow_device, backing_device, control_device, misc_name, base_path_merge, snapuserd) {}
+ : Worker(cow_device, misc_name, base_path_merge, snapuserd) {}
int MergeWorker::PrepareMerge(uint64_t* source_offset, int* pending_ops,
std::vector<const CowOperation*>* replace_zero_vec) {
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_merge.h b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_merge.h
index 3da73c2..f35147f 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_merge.h
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/snapuserd_merge.h
@@ -22,8 +22,7 @@
class MergeWorker : public Worker {
public:
- MergeWorker(const std::string& cow_device, const std::string& backing_device,
- const std::string& control_device, const std::string& misc_name,
+ MergeWorker(const std::string& cow_device, const std::string& misc_name,
const std::string& base_path_merge, std::shared_ptr<SnapshotHandler> snapuserd);
bool Run();
@@ -40,6 +39,7 @@
void FinalizeIouring();
private:
+ std::unique_ptr<ICowOpIter> cowop_iter_;
std::unique_ptr<struct io_uring> ring_;
size_t ra_block_index_ = 0;
uint64_t blocks_merged_in_group_ = 0;
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/worker.cpp b/fs_mgr/libsnapshot/snapuserd/user-space-merge/worker.cpp
index ef6781a..aa15630 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/worker.cpp
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/worker.cpp
@@ -19,12 +19,9 @@
namespace android {
namespace snapshot {
-Worker::Worker(const std::string& cow_device, const std::string& backing_device,
- const std::string& control_device, const std::string& misc_name,
+Worker::Worker(const std::string& cow_device, const std::string& misc_name,
const std::string& base_path_merge, std::shared_ptr<SnapshotHandler> snapuserd) {
cow_device_ = cow_device;
- backing_store_device_ = backing_device;
- control_device_ = control_device;
misc_name_ = misc_name;
base_path_merge_ = base_path_merge;
snapuserd_ = snapuserd;
@@ -63,24 +60,12 @@
}
bool Worker::InitializeFds() {
- backing_store_fd_.reset(open(backing_store_device_.c_str(), O_RDONLY));
- if (backing_store_fd_ < 0) {
- SNAP_PLOG(ERROR) << "Open Failed: " << backing_store_device_;
- return false;
- }
-
cow_fd_.reset(open(cow_device_.c_str(), O_RDWR));
if (cow_fd_ < 0) {
SNAP_PLOG(ERROR) << "Open Failed: " << cow_device_;
return false;
}
- ctrl_fd_.reset(open(control_device_.c_str(), O_RDWR));
- if (ctrl_fd_ < 0) {
- SNAP_PLOG(ERROR) << "Unable to open " << control_device_;
- return false;
- }
-
// Base device used by merge thread
base_path_merge_fd_.reset(open(base_path_merge_.c_str(), O_RDWR));
if (base_path_merge_fd_ < 0) {
diff --git a/fs_mgr/libsnapshot/snapuserd/user-space-merge/worker.h b/fs_mgr/libsnapshot/snapuserd/user-space-merge/worker.h
index d38ce5d..1175ab7 100644
--- a/fs_mgr/libsnapshot/snapuserd/user-space-merge/worker.h
+++ b/fs_mgr/libsnapshot/snapuserd/user-space-merge/worker.h
@@ -33,8 +33,7 @@
class Worker {
public:
- Worker(const std::string& cow_device, const std::string& backing_device,
- const std::string& control_device, const std::string& misc_name,
+ Worker(const std::string& cow_device, const std::string& misc_name,
const std::string& base_path_merge, std::shared_ptr<SnapshotHandler> snapuserd);
virtual ~Worker() = default;
@@ -45,14 +44,7 @@
void InitializeBufsink();
bool InitializeFds();
bool InitReader();
- void CloseFds() {
- ctrl_fd_ = {};
- backing_store_fd_ = {};
- base_path_merge_fd_ = {};
- }
-
- // IO Path
- bool IsBlockAligned(size_t size) { return ((size & (BLOCK_SZ - 1)) == 0); }
+ virtual void CloseFds() { base_path_merge_fd_ = {}; }
bool ReadDataFromBaseDevice(sector_t sector, size_t read_size);
@@ -60,26 +52,19 @@
bool ProcessReplaceOp(const CowOperation* cow_op);
bool ProcessZeroOp();
- sector_t ChunkToSector(chunk_t chunk) { return chunk << CHUNK_SHIFT; }
- chunk_t SectorToChunk(sector_t sector) { return sector >> CHUNK_SHIFT; }
-
std::unique_ptr<CowReader> reader_;
BufferSink bufsink_;
- std::string cow_device_;
- std::string backing_store_device_;
- std::string control_device_;
- std::string misc_name_;
- std::string base_path_merge_;
+ std::string misc_name_; // Needed for SNAP_LOG.
- unique_fd cow_fd_;
- unique_fd backing_store_fd_;
unique_fd base_path_merge_fd_;
- unique_fd ctrl_fd_;
-
- std::unique_ptr<ICowOpIter> cowop_iter_;
std::shared_ptr<SnapshotHandler> snapuserd_;
+
+ private:
+ std::string cow_device_;
+ std::string base_path_merge_;
+ unique_fd cow_fd_;
};
} // namespace snapshot