Skip to content

Commit 374bf9c

Browse files
josefbacikkdave
authored andcommitted
btrfs: unify error handling for ticket flushing
Currently we handle the cleanup of errored out tickets in both the priority flush path and the normal flushing path. This is the same code in both places, so just refactor so we don't duplicate the cleanup work. Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent 844245b commit 374bf9c

File tree

1 file changed

+11
-21
lines changed

1 file changed

+11
-21
lines changed

fs/btrfs/space-info.c

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -878,20 +878,19 @@ static void priority_reclaim_metadata_space(struct btrfs_fs_info *fs_info,
878878
} while (flush_state < ARRAY_SIZE(priority_flush_states));
879879
}
880880

881-
static int wait_reserve_ticket(struct btrfs_fs_info *fs_info,
882-
struct btrfs_space_info *space_info,
883-
struct reserve_ticket *ticket)
881+
static void wait_reserve_ticket(struct btrfs_fs_info *fs_info,
882+
struct btrfs_space_info *space_info,
883+
struct reserve_ticket *ticket)
884884

885885
{
886886
DEFINE_WAIT(wait);
887-
u64 reclaim_bytes = 0;
888887
int ret = 0;
889888

890889
spin_lock(&space_info->lock);
891890
while (ticket->bytes > 0 && ticket->error == 0) {
892891
ret = prepare_to_wait_event(&ticket->wait, &wait, TASK_KILLABLE);
893892
if (ret) {
894-
ret = -EINTR;
893+
ticket->error = -EINTR;
895894
break;
896895
}
897896
spin_unlock(&space_info->lock);
@@ -901,18 +900,7 @@ static int wait_reserve_ticket(struct btrfs_fs_info *fs_info,
901900
finish_wait(&ticket->wait, &wait);
902901
spin_lock(&space_info->lock);
903902
}
904-
if (!ret)
905-
ret = ticket->error;
906-
if (!list_empty(&ticket->list))
907-
list_del_init(&ticket->list);
908-
if (ticket->bytes && ticket->bytes < ticket->orig_bytes)
909-
reclaim_bytes = ticket->orig_bytes - ticket->bytes;
910903
spin_unlock(&space_info->lock);
911-
912-
if (reclaim_bytes)
913-
btrfs_space_info_add_old_bytes(fs_info, space_info,
914-
reclaim_bytes);
915-
return ret;
916904
}
917905

918906
/**
@@ -1010,16 +998,18 @@ static int __reserve_metadata_bytes(struct btrfs_fs_info *fs_info,
1010998
return ret;
1011999

10121000
if (flush == BTRFS_RESERVE_FLUSH_ALL)
1013-
return wait_reserve_ticket(fs_info, space_info, &ticket);
1001+
wait_reserve_ticket(fs_info, space_info, &ticket);
1002+
else
1003+
priority_reclaim_metadata_space(fs_info, space_info, &ticket);
10141004

1015-
ret = 0;
1016-
priority_reclaim_metadata_space(fs_info, space_info, &ticket);
10171005
spin_lock(&space_info->lock);
1018-
if (ticket.bytes) {
1006+
ret = ticket.error;
1007+
if (ticket.bytes || ticket.error) {
10191008
if (ticket.bytes < orig_bytes)
10201009
reclaim_bytes = orig_bytes - ticket.bytes;
10211010
list_del_init(&ticket.list);
1022-
ret = -ENOSPC;
1011+
if (!ret)
1012+
ret = -ENOSPC;
10231013
}
10241014
spin_unlock(&space_info->lock);
10251015

0 commit comments

Comments
 (0)