Thread (3 messages) 3 messages, 2 authors, 2021-05-19

Re: [PATCH v2] btrfs: do not infinite loop in data reclaim if we aborted

From: Johannes Thumshirn <hidden>
Date: 2021-05-19 16:11:30

On 19/05/2021 17:45, Josef Bacik wrote:
quoted hunk ↗ jump to hunk
diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c
index 42d0fa2092d4..0d36d684d552 100644
--- a/fs/btrfs/space-info.c
+++ b/fs/btrfs/space-info.c
@@ -941,6 +941,8 @@ static bool maybe_fail_all_tickets(struct btrfs_fs_info *fs_info,
 	struct reserve_ticket *ticket;
 	u64 tickets_id = space_info->tickets_id;
 	u64 first_ticket_bytes = 0;
+	bool aborted = test_bit(BTRFS_FS_STATE_TRANS_ABORTED,
+				&fs_info->fs_state);
can't this be const bool aborted = ...?

quoted hunk ↗ jump to hunk
@@ -1253,6 +1259,15 @@ static void btrfs_async_reclaim_data_space(struct work_struct *work)>  			spin_unlock(&space_info->lock);
 			return;
 		}
Although this pattern is only twice in btrfs_async_reclaim_data_space()

	const bool aborted = test_bit(BTRFS_FS_STATE_TRANS_ABORTED,
				      &fs_info->fs_state);

here as well?
+
+		/* Something happened, fail everything and bail. */
+		if (test_bit(BTRFS_FS_STATE_TRANS_ABORTED,
+			     &fs_info->fs_state)) {
+			maybe_fail_all_tickets(fs_info, space_info);
+			space_info->flush = 0;
+			spin_unlock(&space_info->lock);
+			return;
+		}
maybe_fail_all_tickets()
space_info->flush = 0
spin_unlock()
return

is introduced twice in btrfs_async_reclaim_data_space, can you add a 
goto label to consolidate?
quoted hunk ↗ jump to hunk
 		last_tickets_id = space_info->tickets_id;
 		spin_unlock(&space_info->lock);
 	}
@@ -1283,6 +1298,16 @@ static void btrfs_async_reclaim_data_space(struct work_struct *work)
 			} else {
 				flush_state = 0;
 			}
+
+			/* Something happened, fail everything and bail. */
+			if (test_bit(BTRFS_FS_STATE_TRANS_ABORTED,
+				     &fs_info->fs_state)) {
+				maybe_fail_all_tickets(fs_info, space_info);
+				space_info->flush = 0;
+				spin_unlock(&space_info->lock);
+				return;
+			}
+
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help