Signed-off-by: Thomas Mühlbacher <[email protected]>
---
 bch_bindgen/src/bcachefs.rs | 12 ++++++++++--
 bch_bindgen/src/bkey.rs     | 29 +++++++++++++++++++++++++----
 bch_bindgen/src/btree.rs    | 31 ++++++++++++++++++-------------
 bch_bindgen/src/errcode.rs  |  2 +-
 bch_bindgen/src/lib.rs      | 10 ++++++----
 bch_bindgen/src/sb_io.rs    |  2 +-
 src/commands/mount.rs       | 12 ++++++------
 src/key.rs                  |  9 +++++----
 src/wrappers/handle.rs      |  4 +++-
 9 files changed, 75 insertions(+), 36 deletions(-)

diff --git a/bch_bindgen/src/bcachefs.rs b/bch_bindgen/src/bcachefs.rs
index 8f6d41a4..fbbac5ed 100644
--- a/bch_bindgen/src/bcachefs.rs
+++ b/bch_bindgen/src/bcachefs.rs
@@ -20,6 +20,7 @@ bitfield! {
 }
 use std::mem::offset_of;
 impl bch_sb_field_crypt {
+    #[must_use]
     pub fn scrypt_flags(&self) -> Option<bch_scrypt_flags> {
         use std::convert::TryInto;
         match 
bch_kdf_types(bch_crypt_flags(self.flags).TYPE().try_into().ok()?) {
@@ -27,6 +28,7 @@ impl bch_sb_field_crypt {
             _ => None,
         }
     }
+    #[must_use]
     pub fn key(&self) -> &bch_encrypted_key {
         &self.key
     }
@@ -43,29 +45,33 @@ impl PartialEq for bch_sb {
 }
 
 impl bch_sb {
+    #[must_use]
     pub fn crypt(&self) -> Option<&bch_sb_field_crypt> {
         unsafe {
             let ptr = bch2_sb_field_get_id(
-                self as *const _ as *mut _,
+                std::ptr::from_ref(self).cast_mut(),
                 bch_sb_field_type::BCH_SB_FIELD_crypt,
             ) as *const u8;
             if ptr.is_null() {
                 None
             } else {
                 let offset = offset_of!(bch_sb_field_crypt, field);
-                Some(&*((ptr.sub(offset)) as *const _))
+                Some(&*(ptr.sub(offset)).cast())
             }
         }
     }
+    #[must_use]
     pub fn uuid(&self) -> uuid::Uuid {
         uuid::Uuid::from_bytes(self.user_uuid.b)
     }
 
+    #[must_use]
     pub fn number_of_devices(&self) -> u32 {
         unsafe { c::bch2_sb_nr_devices(self) }
     }
 
     /// Get the nonce used to encrypt the superblock
+    #[must_use]
     pub fn nonce(&self) -> nonce {
         let [a, b, c, d, e, f, g, h, _rest @ ..] = self.uuid.b;
         let dword1 = u32::from_le_bytes([a, b, c, d]);
@@ -76,10 +82,12 @@ impl bch_sb {
     }
 }
 impl bch_sb_handle {
+    #[must_use]
     pub fn sb(&self) -> &bch_sb {
         unsafe { &*self.sb }
     }
 
+    #[must_use]
     pub fn bdev(&self) -> &block_device {
         unsafe { &*self.bdev }
     }
diff --git a/bch_bindgen/src/bkey.rs b/bch_bindgen/src/bkey.rs
index 77e05900..af109167 100644
--- a/bch_bindgen/src/bkey.rs
+++ b/bch_bindgen/src/bkey.rs
@@ -61,16 +61,37 @@ impl<'a, 'b> BkeySC<'a> {
         }
     }
 
+    #[must_use]
     pub fn to_text(&'a self, fs: &'b Fs) -> BkeySCToText<'a, 'b> {
         BkeySCToText { k: self, fs }
     }
 
+    #[must_use]
     pub fn v(&'a self) -> BkeyValC<'a> {
         unsafe {
-            let ty: c::bch_bkey_type = transmute(self.k.type_ as u32);
+            let ty: c::bch_bkey_type = transmute(u32::from(self.k.type_));
 
-            use c::bch_bkey_type::*;
-            use BkeyValC::*;
+            use c::bch_bkey_type::{
+                KEY_TYPE_accounting, KEY_TYPE_alloc, KEY_TYPE_alloc_v2, 
KEY_TYPE_alloc_v3,
+                KEY_TYPE_alloc_v4, KEY_TYPE_backpointer, KEY_TYPE_btree_ptr, 
KEY_TYPE_btree_ptr_v2,
+                KEY_TYPE_bucket_gens, KEY_TYPE_cookie, KEY_TYPE_deleted, 
KEY_TYPE_dirent,
+                KEY_TYPE_error, KEY_TYPE_extent, KEY_TYPE_hash_whiteout,
+                KEY_TYPE_indirect_inline_data, KEY_TYPE_inline_data, 
KEY_TYPE_inode,
+                KEY_TYPE_inode_alloc_cursor, KEY_TYPE_inode_generation, 
KEY_TYPE_inode_v2,
+                KEY_TYPE_inode_v3, KEY_TYPE_logged_op_finsert, 
KEY_TYPE_logged_op_truncate,
+                KEY_TYPE_lru, KEY_TYPE_quota, KEY_TYPE_reflink_p, 
KEY_TYPE_reflink_v,
+                KEY_TYPE_reservation, KEY_TYPE_set, KEY_TYPE_snapshot, 
KEY_TYPE_snapshot_tree,
+                KEY_TYPE_stripe, KEY_TYPE_subvolume, KEY_TYPE_whiteout, 
KEY_TYPE_xattr,
+                KEY_TYPE_MAX,
+            };
+            use BkeyValC::{
+                accounting, alloc, alloc_v2, alloc_v4, backpointer, btree_ptr, 
btree_ptr_v2,
+                bucket_gens, cookie, deleted, dirent, error, extent, 
hash_whiteout,
+                indirect_inline_data, inline_data, inode, inode_alloc_cursor, 
inode_generation,
+                inode_v2, inode_v3, logged_op_finsert, logged_op_truncate, 
lru, quota, reflink_p,
+                reflink_v, reservation, set, snapshot, snapshot_tree, stripe, 
subvolume, whiteout,
+                xattr,
+            };
             match ty {
                 KEY_TYPE_deleted => deleted,
                 KEY_TYPE_whiteout => whiteout,
@@ -133,7 +154,7 @@ impl fmt::Display for BkeySCToText<'_, '_> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
         unsafe {
             printbuf_to_formatter(f, |buf| {
-                c::bch2_bkey_val_to_text(buf, self.fs.raw, self.k.to_raw())
+                c::bch2_bkey_val_to_text(buf, self.fs.raw, self.k.to_raw());
             })
         }
     }
diff --git a/bch_bindgen/src/btree.rs b/bch_bindgen/src/btree.rs
index ed563b95..99c2a5b5 100644
--- a/bch_bindgen/src/btree.rs
+++ b/bch_bindgen/src/btree.rs
@@ -15,6 +15,7 @@ pub struct BtreeTrans<'f> {
 }
 
 impl<'f> BtreeTrans<'f> {
+    #[must_use]
     pub fn new(fs: &'f Fs) -> BtreeTrans<'f> {
         unsafe {
             BtreeTrans {
@@ -57,6 +58,7 @@ pub struct BtreeIter<'t> {
 }
 
 impl<'t> BtreeIter<'t> {
+    #[must_use]
     pub fn new(
         trans: &'t BtreeTrans<'t>,
         btree: c::btree_id,
@@ -71,7 +73,7 @@ impl<'t> BtreeIter<'t> {
                 iter.as_mut_ptr(),
                 btree,
                 pos,
-                flags.bits as u32,
+                u32::from(flags.bits),
             );
 
             BtreeIter {
@@ -85,14 +87,14 @@ impl<'t> BtreeIter<'t> {
         unsafe {
             let k = c::bch2_btree_iter_peek_max(&mut self.raw, end);
             errptr_to_result_c(k.k).map(|_| {
-                if !k.k.is_null() {
+                if k.k.is_null() {
+                    None
+                } else {
                     Some(BkeySC {
                         k:    &*k.k,
                         v:    &*k.v,
                         iter: PhantomData,
                     })
-                } else {
-                    None
                 }
             })
         }
@@ -107,14 +109,14 @@ impl<'t> BtreeIter<'t> {
             let k = c::bch2_btree_iter_peek_and_restart_outlined(&mut 
self.raw);
 
             errptr_to_result_c(k.k).map(|_| {
-                if !k.k.is_null() {
+                if k.k.is_null() {
+                    None
+                } else {
                     Some(BkeySC {
                         k:    &*k.k,
                         v:    &*k.v,
                         iter: PhantomData,
                     })
-                } else {
-                    None
                 }
             })
         }
@@ -139,6 +141,7 @@ pub struct BtreeNodeIter<'t> {
 }
 
 impl<'t> BtreeNodeIter<'t> {
+    #[must_use]
     pub fn new(
         trans: &'t BtreeTrans<'t>,
         btree: c::btree_id,
@@ -156,7 +159,7 @@ impl<'t> BtreeNodeIter<'t> {
                 pos,
                 locks_want,
                 depth,
-                flags.bits as u32,
+                u32::from(flags.bits),
             );
 
             BtreeNodeIter {
@@ -169,14 +172,14 @@ impl<'t> BtreeNodeIter<'t> {
     pub fn peek(&mut self) -> Result<Option<&c::btree>, bch_errcode> {
         unsafe {
             let b = c::bch2_btree_iter_peek_node(&mut self.raw);
-            errptr_to_result_c(b).map(|b| if !b.is_null() { Some(&*b) } else { 
None })
+            errptr_to_result_c(b).map(|b| if b.is_null() { None } else { 
Some(&*b) })
         }
     }
 
     pub fn peek_and_restart(&mut self) -> Result<Option<&c::btree>, 
bch_errcode> {
         unsafe {
             let b = c::bch2_btree_iter_peek_node_and_restart(&mut self.raw);
-            errptr_to_result_c(b).map(|b| if !b.is_null() { Some(&*b) } else { 
None })
+            errptr_to_result_c(b).map(|b| if b.is_null() { None } else { 
Some(&*b) })
         }
     }
 
@@ -189,7 +192,7 @@ impl<'t> BtreeNodeIter<'t> {
     pub fn next(&mut self) -> Result<Option<&c::btree>, bch_errcode> {
         unsafe {
             let b = c::bch2_btree_iter_next_node(&mut self.raw);
-            errptr_to_result_c(b).map(|b| if !b.is_null() { Some(&*b) } else { 
None })
+            errptr_to_result_c(b).map(|b| if b.is_null() { None } else { 
Some(&*b) })
         }
     }
 }
@@ -201,10 +204,12 @@ impl Drop for BtreeNodeIter<'_> {
 }
 
 impl<'b, 'f> c::btree {
+    #[must_use]
     pub fn to_text(&'b self, fs: &'f Fs) -> BtreeNodeToText<'b, 'f> {
         BtreeNodeToText { b: self, fs }
     }
 
+    #[must_use]
     pub fn ondisk_to_text(&'b self, fs: &'f Fs) -> BtreeNodeOndiskToText<'b, 
'f> {
         BtreeNodeOndiskToText { b: self, fs }
     }
@@ -218,7 +223,7 @@ pub struct BtreeNodeToText<'b, 'f> {
 impl fmt::Display for BtreeNodeToText<'_, '_> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
         printbuf_to_formatter(f, |buf| unsafe {
-            c::bch2_btree_node_to_text(buf, self.fs.raw, self.b)
+            c::bch2_btree_node_to_text(buf, self.fs.raw, self.b);
         })
     }
 }
@@ -231,7 +236,7 @@ pub struct BtreeNodeOndiskToText<'b, 'f> {
 impl fmt::Display for BtreeNodeOndiskToText<'_, '_> {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
         printbuf_to_formatter(f, |buf| unsafe {
-            c::bch2_btree_node_ondisk_to_text(buf, self.fs.raw, self.b)
+            c::bch2_btree_node_ondisk_to_text(buf, self.fs.raw, self.b);
         })
     }
 }
diff --git a/bch_bindgen/src/errcode.rs b/bch_bindgen/src/errcode.rs
index 4d75f1d2..b8d12c19 100644
--- a/bch_bindgen/src/errcode.rs
+++ b/bch_bindgen/src/errcode.rs
@@ -7,7 +7,7 @@ pub use crate::c::bch_errcode;
 impl fmt::Display for bch_errcode {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         let s = unsafe { CStr::from_ptr(bcachefs::bch2_err_str(*self as i32)) 
};
-        write!(f, "{:?}", s)
+        write!(f, "{s:?}")
     }
 }
 
diff --git a/bch_bindgen/src/lib.rs b/bch_bindgen/src/lib.rs
index 7825cde1..7c313921 100644
--- a/bch_bindgen/src/lib.rs
+++ b/bch_bindgen/src/lib.rs
@@ -14,14 +14,16 @@ pub mod c {
 
 use c::bpos as Bpos;
 
+#[must_use]
 pub const fn spos(inode: u64, offset: u64, snapshot: u32) -> Bpos {
     Bpos {
-        inode,
-        offset,
         snapshot,
+        offset,
+        inode,
     }
 }
 
+#[must_use]
 pub const fn pos(inode: u64, offset: u64) -> Bpos {
     spos(inode, offset, 0)
 }
@@ -69,7 +71,7 @@ impl fmt::Display for c::btree_id {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         let s = unsafe { CStr::from_ptr(c::bch2_btree_id_str(*self)) };
         let s = s.to_str().unwrap();
-        write!(f, "{}", s)
+        write!(f, "{s}")
     }
 }
 
@@ -158,7 +160,7 @@ impl fmt::Display for Bpos {
 
         let s = unsafe { CStr::from_ptr(buf.buf) };
         let s = s.to_str().unwrap();
-        write!(f, "{}", s)
+        write!(f, "{s}")
     }
 }
 
diff --git a/bch_bindgen/src/sb_io.rs b/bch_bindgen/src/sb_io.rs
index 46e17673..de6ee4ad 100644
--- a/bch_bindgen/src/sb_io.rs
+++ b/bch_bindgen/src/sb_io.rs
@@ -1,5 +1,5 @@
 use crate::bcachefs;
-use crate::bcachefs::*;
+use crate::bcachefs::{bch_opts, bch_sb_handle};
 use crate::errcode::bch_errcode;
 use crate::path_to_cstr;
 use anyhow::anyhow;
diff --git a/src/commands/mount.rs b/src/commands/mount.rs
index 148d686e..07354d89 100644
--- a/src/commands/mount.rs
+++ b/src/commands/mount.rs
@@ -74,7 +74,7 @@ fn mount_inner(
                 src
             );
         } else {
-            eprintln!("mount: {}: {}", src, e);
+            eprintln!("mount: {src}: {e}");
         }
 
         Err(e.into())
@@ -211,15 +211,15 @@ fn get_devices_by_uuid(
     opts: &bch_opts
 ) -> anyhow::Result<Vec<(PathBuf, bch_sb_handle)>> {
     let devices = {
-        if !udev_bcachefs.is_empty() {
+        if udev_bcachefs.is_empty() {
+            get_all_block_devnodes()?
+        } else {
             let uuid_string = uuid.hyphenated().to_string();
             if let Some(devices) = udev_bcachefs.get(&uuid_string) {
                 devices.clone()
             } else {
                 Vec::new()
             }
-        } else {
-            get_all_block_devnodes()?
         }
     };
 
@@ -351,7 +351,7 @@ pub struct Cli {
     /// Path to passphrase file
     ///
     /// This can be used to optionally specify a file to read the passphrase
-    /// from. An explictly specified key_location/unlock_policy overrides this
+    /// from. An explictly specified `key_location/unlock_policy` overrides 
this
     /// argument.
     #[arg(short = 'f', long)]
     passphrase_file: Option<PathBuf>,
@@ -399,7 +399,7 @@ pub fn mount(mut argv: Vec<String>, symlink_cmd: 
Option<&str>) -> std::process::
     logging::setup(cli.verbose, cli.colorize);
 
     match cmd_mount_inner(&cli) {
-        Ok(_) => std::process::ExitCode::SUCCESS,
+        Ok(()) => std::process::ExitCode::SUCCESS,
         Err(e) => {
             error!("Mount failed: {e}");
             std::process::ExitCode::FAILURE
diff --git a/src/key.rs b/src/key.rs
index 8cf4f124..50cae47c 100644
--- a/src/key.rs
+++ b/src/key.rs
@@ -175,9 +175,10 @@ impl Passphrase {
 
     // blocks indefinitely if no input is available on stdin
     pub fn new_from_prompt(uuid: &Uuid) -> Result<Self> {
-        match Self::new_from_askpassword(uuid) {
-            Ok(phrase) => return phrase,
-            Err(_) => debug!("Failed to start systemd-ask-password, doing the 
prompt ourselves"),
+        if let Ok(phrase) = Self::new_from_askpassword(uuid) {
+            return phrase;
+        } else {
+            debug!("Failed to start systemd-ask-password, doing the prompt 
ourselves")
         }
         let old = termios::tcgetattr(stdin())?;
         let mut new = old.clone();
@@ -219,7 +220,7 @@ impl Passphrase {
     }
 
     fn derive(&self, crypt: &bch_sb_field_crypt) -> bch_key {
-        let crypt_ptr = (crypt as *const bch_sb_field_crypt).cast_mut();
+        let crypt_ptr = 
std::ptr::from_ref::<bch_sb_field_crypt>(crypt).cast_mut();
 
         unsafe { bcachefs::derive_passphrase(crypt_ptr, self.get().as_ptr()) }
     }
diff --git a/src/wrappers/handle.rs b/src/wrappers/handle.rs
index b9a4a63d..3aec53ef 100644
--- a/src/wrappers/handle.rs
+++ b/src/wrappers/handle.rs
@@ -42,7 +42,9 @@ pub enum BcachefsIoctlPayload {
 impl From<&BcachefsIoctlPayload> for *const libc::c_void {
     fn from(value: &BcachefsIoctlPayload) -> Self {
         match value {
-            BcachefsIoctlPayload::Subvolume(p) => (p as *const 
bch_ioctl_subvolume).cast(),
+            BcachefsIoctlPayload::Subvolume(p) => {
+                std::ptr::from_ref::<bch_ioctl_subvolume>(p).cast()
+            }
         }
     }
 }
-- 
2.48.1


Reply via email to