Lines Matching refs:ticket
69 * wait on ticket->wait for ->bytes to be reduced to 0, or ->error to be set
70 * on the ticket.
81 * the ticket is woken up.
83 * -> ticket wakeup
91 * space_info->priority_tickets, and we do not use ticket->wait, we simply
354 struct reserve_ticket *ticket)
356 if (!list_empty(&ticket->list)) {
357 list_del_init(&ticket->list);
358 ASSERT(space_info->reclaim_size >= ticket->bytes);
359 space_info->reclaim_size -= ticket->bytes;
378 struct reserve_ticket *ticket;
381 ticket = list_first_entry(head, struct reserve_ticket, list);
383 /* Check and see if our ticket can be satisified now. */
384 if ((used + ticket->bytes <= space_info->total_bytes) ||
385 btrfs_can_overcommit(fs_info, space_info, ticket->bytes,
389 ticket->bytes);
390 remove_ticket(space_info, ticket);
391 ticket->bytes = 0;
393 wake_up(&ticket->wait);
576 struct reserve_ticket *ticket = NULL;
597 ticket = list_first_entry(&space_info->priority_tickets,
600 ticket = list_first_entry(&space_info->tickets,
602 if (ticket)
603 bytes_needed = ticket->bytes;
820 struct reserve_ticket *ticket)
830 if (global_rsv->reserved < min_bytes + ticket->bytes) {
834 global_rsv->reserved -= ticket->bytes;
835 remove_ticket(space_info, ticket);
836 ticket->bytes = 0;
837 wake_up(&ticket->wait);
853 * order, so if there is a large ticket first and then smaller ones we could
858 * other tickets, or if it stumbles across a ticket that was smaller than the
859 * first ticket.
864 struct reserve_ticket *ticket;
875 ticket = list_first_entry(&space_info->tickets,
878 if (ticket->steal &&
879 steal_from_global_rsv(fs_info, space_info, ticket))
885 * would result in the ticket succeeding. However if we have a
886 * smaller ticket in the queue it may be small enough to be
888 * subsequent ticket is smaller than the first ticket go ahead
893 first_ticket_bytes = ticket->bytes;
894 else if (first_ticket_bytes > ticket->bytes)
898 btrfs_info(fs_info, "failing ticket with %llu bytes",
899 ticket->bytes);
901 remove_ticket(space_info, ticket);
902 ticket->error = -ENOSPC;
903 wake_up(&ticket->wait);
908 * here to see if we can make progress with the next ticket in
1140 struct reserve_ticket *ticket,
1160 if (ticket->bytes == 0) {
1170 struct reserve_ticket *ticket)
1175 if (ticket->bytes == 0) {
1185 struct reserve_ticket *ticket)
1192 while (ticket->bytes > 0 && ticket->error == 0) {
1193 ret = prepare_to_wait_event(&ticket->wait, &wait, TASK_KILLABLE);
1198 * space for this ticket. If that would happen, then the
1199 * ticket's task would not known that space was reserved
1203 remove_ticket(space_info, ticket);
1204 ticket->error = -EINTR;
1211 finish_wait(&ticket->wait, &wait);
1218 * handle_reserve_ticket - do the appropriate flushing and waiting for a ticket
1221 * @ticket - the ticket for the reservation
1224 * This does the work of figuring out how to flush for the ticket, waiting for
1229 struct reserve_ticket *ticket,
1238 wait_reserve_ticket(fs_info, space_info, ticket);
1241 priority_reclaim_metadata_space(fs_info, space_info, ticket,
1246 priority_reclaim_metadata_space(fs_info, space_info, ticket,
1251 priority_reclaim_data_space(fs_info, space_info, ticket);
1259 ret = ticket->error;
1260 if (ticket->bytes || ticket->error) {
1262 * We were a priority ticket, so we need to delete ourselves
1268 if (!list_empty(&ticket->list)) {
1269 remove_ticket(space_info, ticket);
1277 ASSERT(list_empty(&ticket->list));
1284 ASSERT(!(ticket->bytes == 0 && ticket->error));
1317 struct reserve_ticket ticket;
1358 * If we couldn't make a reservation then setup our reservation ticket
1361 * If we are a priority flusher then we just need to add our ticket to
1365 ticket.bytes = orig_bytes;
1366 ticket.error = 0;
1367 space_info->reclaim_size += ticket.bytes;
1368 init_waitqueue_head(&ticket.wait);
1369 ticket.steal = (flush == BTRFS_RESERVE_FLUSH_ALL_STEAL);
1373 list_add_tail(&ticket.list, &space_info->tickets);
1383 list_add_tail(&ticket.list,
1406 return handle_reserve_ticket(fs_info, space_info, &ticket, flush);