[pbs-devel] [PATCH proxmox-backup v2 4/6] tape: changer: sg_pt: extend volume tag parsing

Dominik Csapak d.csapak at proxmox.com
Wed Jul 21 17:10:41 CEST 2021


by also returning the size we read from the reader (we need that later)
and while were at it, also return the alternate volume tag if we have
it (we already read it, so we can return it)

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
new in v2
 src/tape/changer/sg_pt_changer.rs | 32 +++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/tape/changer/sg_pt_changer.rs b/src/tape/changer/sg_pt_changer.rs
index a15d8192..9938dfe1 100644
--- a/src/tape/changer/sg_pt_changer.rs
+++ b/src/tape/changer/sg_pt_changer.rs
@@ -507,30 +507,34 @@ impl SubHeader {
         &self,
         reader: &mut R,
         full: bool,
-    ) -> Result<Option<String>, Error> {
+    ) -> Result<(Option<String>, usize), Error> {
 
         if (self.flags & 128) != 0 { // has PVolTag
             let tmp = reader.read_exact_allocated(SCSI_VOLUME_TAG_LEN)?;
             if full {
                 let volume_tag = scsi_ascii_to_string(&tmp);
-                return Ok(Some(volume_tag));
+                return Ok((Some(volume_tag), SCSI_VOLUME_TAG_LEN));
+            } else {
+                return Ok((None, SCSI_VOLUME_TAG_LEN));
             }
         }
-        Ok(None)
+        Ok((None, 0))
     }
 
     // AFAIK, tape changer do not use AlternateVolumeTag
     // but parse anyways, just to be sure
-    fn skip_alternate_volume_tag<R: Read>(
+    fn parse_alternate_volume_tag<R: Read>(
         &self,
         reader: &mut R,
-    ) -> Result<Option<String>, Error> {
+    ) -> Result<(Option<String>, usize), Error> {
 
         if (self.flags & 64) != 0 { // has AVolTag
-            let _tmp = reader.read_exact_allocated(SCSI_VOLUME_TAG_LEN)?;
+            let tmp = reader.read_exact_allocated(SCSI_VOLUME_TAG_LEN)?;
+            let avoltag = scsi_ascii_to_string(&tmp);
+            Ok((Some(avoltag), SCSI_VOLUME_TAG_LEN))
+        } else {
+            Ok((None, 0))
         }
-
-        Ok(None)
     }
 }
 
@@ -668,9 +672,9 @@ fn decode_element_status_page(
                         let desc: TransportDescriptor = unsafe { reader.read_be_value()? };
 
                         let full = (desc.flags1 & 1) != 0;
-                        let volume_tag = subhead.parse_optional_volume_tag(&mut reader, full)?;
+                        let (volume_tag, _) = subhead.parse_optional_volume_tag(&mut reader, full)?;
 
-                        subhead.skip_alternate_volume_tag(&mut reader)?;
+                        subhead.parse_alternate_volume_tag(&mut reader)?;
 
                         let mut reserved = [0u8; 4];
                         reader.read_exact(&mut reserved)?;
@@ -687,9 +691,9 @@ fn decode_element_status_page(
                         let desc: StorageDescriptor = unsafe { reader.read_be_value()? };
 
                         let full = (desc.flags1 & 1) != 0;
-                        let volume_tag = subhead.parse_optional_volume_tag(&mut reader, full)?;
+                        let (volume_tag, _) = subhead.parse_optional_volume_tag(&mut reader, full)?;
 
-                        subhead.skip_alternate_volume_tag(&mut reader)?;
+                        subhead.parse_alternate_volume_tag(&mut reader)?;
 
                         let mut reserved = [0u8; 4];
                         reader.read_exact(&mut reserved)?;
@@ -722,9 +726,9 @@ fn decode_element_status_page(
                         };
 
                         let full = (desc.flags1 & 1) != 0;
-                        let volume_tag = subhead.parse_optional_volume_tag(&mut reader, full)?;
+                        let (volume_tag, _) = subhead.parse_optional_volume_tag(&mut reader, full)?;
 
-                        subhead.skip_alternate_volume_tag(&mut reader)?;
+                        subhead.parse_alternate_volume_tag(&mut reader)?;
 
                         let dvcid: DvcidHead = unsafe { reader.read_be_value()? };
 
-- 
2.30.2






More information about the pbs-devel mailing list