From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 4B8FA1FF39E for ; Mon, 10 Jun 2024 13:44:33 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1A94815CC0; Mon, 10 Jun 2024 13:45:08 +0200 (CEST) From: Dominik Csapak To: pbs-devel@lists.proxmox.com Date: Mon, 10 Jun 2024 13:45:03 +0200 Message-Id: <20240610114505.2211336-1-d.csapak@proxmox.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.021 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pbs-devel] [PATCH proxmox-backup 1/3] tape: refactor setting the mode page X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" we'll reuse that code later for a different page/subpage Signed-off-by: Dominik Csapak --- pbs-tape/src/sg_tape.rs | 59 ++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/pbs-tape/src/sg_tape.rs b/pbs-tape/src/sg_tape.rs index 50f5c079..1aa7d492 100644 --- a/pbs-tape/src/sg_tape.rs +++ b/pbs-tape/src/sg_tape.rs @@ -804,35 +804,17 @@ impl SgTape { Ok(()) } - /// Set important drive options - #[allow(clippy::vec_init_then_push)] - pub fn set_drive_options( + // tries to set the given page with either mode sense 6 or 10 depending on + // the given header size + fn drive_mode_select( &mut self, - compression: Option, - block_length: Option, - buffer_mode: Option, + head: ModeParameterHeader, + block_descriptor: ModeBlockDescriptor, + page: T, ) -> Result<(), Error> { - // Note: Read/Modify/Write - - let (mut head, mut block_descriptor, mut page) = self.read_compression_page()?; - let mut sg_raw = SgRaw::new(&mut self.file, 0)?; sg_raw.set_timeout(Self::SCSI_TAPE_DEFAULT_TIMEOUT); - head.reset_mode_data_len(); // mode_data_len need to be zero - - if let Some(compression) = compression { - page.set_compression(compression); - } - - if let Some(block_length) = block_length { - block_descriptor.set_block_length(block_length)?; - } - - if let Some(buffer_mode) = buffer_mode { - head.set_buffer_mode(buffer_mode); - } - match head { ModeParameterHeader::Long(head) => { let mut data = Vec::new(); @@ -878,8 +860,37 @@ impl SgTape { format_err!("set drive options (mode select(6)) failed - {err}") })?; } + }; + Ok(()) + } + + /// Set important drive options + #[allow(clippy::vec_init_then_push)] + pub fn set_drive_options( + &mut self, + compression: Option, + block_length: Option, + buffer_mode: Option, + ) -> Result<(), Error> { + // Note: Read/Modify/Write + let (mut head, mut block_descriptor, mut page) = self.read_compression_page()?; + + head.reset_mode_data_len(); // mode_data_len need to be zero + + if let Some(compression) = compression { + page.set_compression(compression); } + if let Some(block_length) = block_length { + block_descriptor.set_block_length(block_length)?; + } + + if let Some(buffer_mode) = buffer_mode { + head.set_buffer_mode(buffer_mode); + } + + self.drive_mode_select(head, block_descriptor, page)?; + Ok(()) } -- 2.39.2 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel