Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 294609
b: refs/heads/master
c: 14a7235
h: refs/heads/master
i:
  294607: 238c91b
v: v3
  • Loading branch information
Christoph Hellwig authored and Ben Myers committed Feb 23, 2012
1 parent eacc1ad commit 9116e71
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cfb7cdca0aca5ee2e2ef491284bf1edc3b581885
refs/heads/master: 14a7235fba4302a82d61150eda92ec90d3ae9cfb
24 changes: 15 additions & 9 deletions trunk/fs/xfs/xfs_log.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ xlog_reserveq_wake(
*free_bytes -= need_bytes;

trace_xfs_log_grant_wake_up(log, tic);
wake_up(&tic->t_wait);
wake_up_process(tic->t_task);
}

return true;
Expand All @@ -193,7 +193,7 @@ xlog_writeq_wake(
*free_bytes -= need_bytes;

trace_xfs_log_regrant_write_wake_up(log, tic);
wake_up(&tic->t_wait);
wake_up_process(tic->t_task);
}

return true;
Expand All @@ -212,10 +212,13 @@ xlog_reserveq_wait(
goto shutdown;
xlog_grant_push_ail(log, need_bytes);

__set_current_state(TASK_UNINTERRUPTIBLE);
spin_unlock(&log->l_grant_reserve_lock);

XFS_STATS_INC(xs_sleep_logspace);
trace_xfs_log_grant_sleep(log, tic);

xlog_wait(&tic->t_wait, &log->l_grant_reserve_lock);
trace_xfs_log_grant_sleep(log, tic);
schedule();
trace_xfs_log_grant_wake(log, tic);

spin_lock(&log->l_grant_reserve_lock);
Expand Down Expand Up @@ -243,10 +246,13 @@ xlog_writeq_wait(
goto shutdown;
xlog_grant_push_ail(log, need_bytes);

__set_current_state(TASK_UNINTERRUPTIBLE);
spin_unlock(&log->l_grant_write_lock);

XFS_STATS_INC(xs_sleep_logspace);
trace_xfs_log_regrant_write_sleep(log, tic);

xlog_wait(&tic->t_wait, &log->l_grant_write_lock);
trace_xfs_log_regrant_write_sleep(log, tic);
schedule();
trace_xfs_log_regrant_write_wake(log, tic);

spin_lock(&log->l_grant_write_lock);
Expand Down Expand Up @@ -3276,6 +3282,7 @@ xlog_ticket_alloc(
}

atomic_set(&tic->t_ref, 1);
tic->t_task = current;
INIT_LIST_HEAD(&tic->t_queue);
tic->t_unit_res = unit_bytes;
tic->t_curr_res = unit_bytes;
Expand All @@ -3287,7 +3294,6 @@ xlog_ticket_alloc(
tic->t_trans_type = 0;
if (xflags & XFS_LOG_PERM_RESERV)
tic->t_flags |= XLOG_TIC_PERM_RESERV;
init_waitqueue_head(&tic->t_wait);

xlog_tic_reset_res(tic);

Expand Down Expand Up @@ -3615,12 +3621,12 @@ xfs_log_force_umount(
*/
spin_lock(&log->l_grant_reserve_lock);
list_for_each_entry(tic, &log->l_reserveq, t_queue)
wake_up(&tic->t_wait);
wake_up_process(tic->t_task);
spin_unlock(&log->l_grant_reserve_lock);

spin_lock(&log->l_grant_write_lock);
list_for_each_entry(tic, &log->l_writeq, t_queue)
wake_up(&tic->t_wait);
wake_up_process(tic->t_task);
spin_unlock(&log->l_grant_write_lock);

if (!(log->l_iclog->ic_state & XLOG_STATE_IOERROR)) {
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/xfs/xfs_log_priv.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,8 +239,8 @@ typedef struct xlog_res {
} xlog_res_t;

typedef struct xlog_ticket {
wait_queue_head_t t_wait; /* ticket wait queue */
struct list_head t_queue; /* reserve/write queue */
struct task_struct *t_task; /* task that owns this ticket */
xlog_tid_t t_tid; /* transaction identifier : 4 */
atomic_t t_ref; /* ticket reference count : 4 */
int t_curr_res; /* current reservation in bytes : 4 */
Expand Down

0 comments on commit 9116e71

Please sign in to comment.