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