[pbs-devel] [PATCH FOLLOW-UP proxmox-backup 3/4] task tracking: refactor code

Fabian Grünbichler f.gruenbichler at proxmox.com
Thu Nov 20 10:01:38 CET 2025


no semantic changes intended, but make the code a little more readable and
slightly faster, by only initializing the new entry when needed.

Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
---
 pbs-datastore/src/task_tracking.rs | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/pbs-datastore/src/task_tracking.rs b/pbs-datastore/src/task_tracking.rs
index 755d88fdf..b7e569efb 100644
--- a/pbs-datastore/src/task_tracking.rs
+++ b/pbs-datastore/src/task_tracking.rs
@@ -101,10 +101,7 @@ pub fn update_active_operations(
     let (_lock, options) = open_lock_file(name)?;
 
     let pid = std::process::id();
-    let starttime = procfs::PidStat::read_from_pid(Pid::from_raw(pid as pid_t))?.starttime;
-
-    let mut updated_active_operations = ActiveOperationStats::default();
-    let mut found_entry = false;
+    let mut current_pid_operations = None;
     let mut updated_tasks: Vec<TaskOperations> = match file_read_optional_string(&path)? {
         Some(data) => serde_json::from_str::<Vec<TaskOperations>>(&data)?
             .into_iter()
@@ -112,13 +109,12 @@ pub fn update_active_operations(
                 match procfs::check_process_running_pstart(task.pid as pid_t, task.starttime) {
                     // update entry for current PID
                     Some(_stat) if pid == task.pid => {
-                        found_entry = true;
                         match operation {
                             Operation::Read => task.active_operations.read += count,
                             Operation::Write => task.active_operations.write += count,
                             Operation::Lookup => (), // no IO must happen there
                         };
-                        updated_active_operations = task.active_operations;
+                        current_pid_operations = Some(task.active_operations);
                         Some(task)
                     }
                     // keep other entries
@@ -131,7 +127,9 @@ pub fn update_active_operations(
         None => Vec::new(),
     };
 
-    if !found_entry {
+    let active_operations = if let Some(current) = current_pid_operations {
+        current
+    } else {
         if count < 0 {
             // if we don't have any operations at the moment, decrementing is not possible..
             log::warn!(
@@ -140,22 +138,27 @@ to decrement by {count}!"
             );
             count = 0;
         };
+        let starttime = procfs::PidStat::read_from_pid(Pid::from_raw(pid as pid_t))?.starttime;
+
+        let mut active_operations = ActiveOperationStats::default();
         match operation {
-            Operation::Read => updated_active_operations.read = count,
-            Operation::Write => updated_active_operations.write = count,
+            Operation::Read => active_operations.read = count,
+            Operation::Write => active_operations.write = count,
             Operation::Lookup => (),
         };
         updated_tasks.push(TaskOperations {
             pid,
             starttime,
-            active_operations: updated_active_operations,
+            active_operations,
         });
-    }
+        active_operations
+    };
     replace_file(
         &path,
         serde_json::to_string(&updated_tasks)?.as_bytes(),
         options,
         false,
-    )
-    .map(|_| updated_active_operations)
+    )?;
+
+    Ok(active_operations)
 }
-- 
2.47.3





More information about the pbs-devel mailing list