Mark source partition as writable before writing corrected bits

When corrupted blocks are detected, update_engine attempts to write
FEC corrected bits to source partition before procedding. If write
fails, update_engine falls back to using FEC File descriptor, which uses
more COW space. Writes to source partition will fail if we do not first
mark source partitions as writable.

Test: th
Bug: 286514683
Change-Id: I04afc610c244e7ba0b75907241ba99e83e2569d8
diff --git a/payload_consumer/verified_source_fd.cc b/payload_consumer/verified_source_fd.cc
index f35b6a9..09ac95b 100644
--- a/payload_consumer/verified_source_fd.cc
+++ b/payload_consumer/verified_source_fd.cc
@@ -69,11 +69,16 @@
 bool VerifiedSourceFd::WriteBackCorrectedSourceBlocks(
     const std::vector<unsigned char>& source_data,
     const google::protobuf::RepeatedPtrField<Extent>& extents) {
+  utils::SetBlockDeviceReadOnly(source_path_, false);
+  DEFER {
+    utils::SetBlockDeviceReadOnly(source_path_, true);
+  };
   auto fd = std::make_shared<EintrSafeFileDescriptor>();
   TEST_AND_RETURN_FALSE_ERRNO(fd->Open(source_path_.c_str(), O_RDWR));
   DirectExtentWriter writer(fd);
   TEST_AND_RETURN_FALSE(writer.Init(extents, block_size_));
-  return writer.Write(source_data.data(), source_data.size());
+  TEST_AND_RETURN_FALSE(writer.Write(source_data.data(), source_data.size()));
+  return true;
 }
 
 FileDescriptorPtr VerifiedSourceFd::ChooseSourceFD(