On 6.02.25 10:42, Pavel Tikhomirov wrote:


On 1/24/25 23:36, Alexander Atanasov wrote:
diff --git a/drivers/md/dm-ploop-cmd.c b/drivers/md/dm-ploop-cmd.c
index f98542e952e1..fa9f8c9d8d40 100644
--- a/drivers/md/dm-ploop-cmd.c
+++ b/drivers/md/dm-ploop-cmd.c
@@ -34,7 +34,7 @@ static void ploop_advance_holes_bitmap(struct ploop *ploop,
          return;
      cmd->resize.stage++;
-    write_lock_irq(&ploop->bat_rwlock);
+    write_lock_irqsave(&ploop->bat_rwlock, flags);

Why s/irq/irqsave/ ?

   +-< ploop_advance_holes_bitmap
     +-< ploop_process_resize_cmd
     | +-< ploop_resize
     | | +-< ploop_message
           +-< ploop_target->message
             +-< target_message # ioctl - process context

It can't be called in interrupt context, thus should be "_irq".

      /* Copy and swap holes_bitmap */
      size = DIV_ROUND_UP(ploop->hb_nr, 8);
      memcpy(cmd->resize.holes_bitmap, ploop->holes_bitmap, size);
@@ -46,7 +46,7 @@ static void ploop_advance_holes_bitmap(struct ploop *ploop,
          ploop_init_be_iter(ploop, md->id, &i, &end);
          bat_entries = md->kmpage;
-        spin_lock_irqsave(&md->md_lock, flags); /* read */
+        spin_lock(&md->md_lock); /* read */
          for (; i <= end; i++) {
              if (!ploop_md_page_cluster_is_in_top_delta(ploop, md, i))
                  continue;
@@ -57,9 +57,9 @@ static void ploop_advance_holes_bitmap(struct ploop *ploop,
                  ploop_hole_clear_bit(dst_clu, ploop);
              }
          }
-        spin_unlock_irqrestore(&md->md_lock, flags);
+        spin_unlock(&md->md_lock);
      }
-    write_unlock_irq(&ploop->bat_rwlock);
+    write_unlock_irqrestore(&ploop->bat_rwlock, flags);

Same.

  }
  static int ploop_wait_for_completion_maybe_killable(struct completion *comp,



Please, remember that we are called from DM in irq context and we try to prepare reqests as early as possible. Which means it does allocations and prepares BAT updates which do modify holes bitmap. Same code paths are called again in irq context where we complete requests and eventually restart delayed.

I don't know exactly what traces are you using but they miss the entry points.

Overall we must use irqsave/irqrestore almost every where except may be management commands that change only status.

--
Regards,
Alexander Atanasov

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to