Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 294613
b: refs/heads/master
c: 23ee3df
h: refs/heads/master
i:
  294611: 3f4a359
v: v3
  • Loading branch information
Christoph Hellwig authored and Ben Myers committed Feb 23, 2012
1 parent e097cc3 commit 9733052
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 48 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: a79bf2d75b8f96bcdb6714138cd53cb3c358669c
refs/heads/master: 23ee3df349b8b8fd153bd02fccf08b31aec5bce3
63 changes: 18 additions & 45 deletions trunk/fs/xfs/xfs_log.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,65 +221,32 @@ xlog_writeq_wake(
}

STATIC int
xlog_reserveq_wait(
xlog_grant_head_wait(
struct log *log,
struct xlog_grant_head *head,
struct xlog_ticket *tic,
int need_bytes)
{
list_add_tail(&tic->t_queue, &log->l_reserve_head.waiters);
list_add_tail(&tic->t_queue, &head->waiters);

do {
if (XLOG_FORCED_SHUTDOWN(log))
goto shutdown;
xlog_grant_push_ail(log, need_bytes);

__set_current_state(TASK_UNINTERRUPTIBLE);
spin_unlock(&log->l_reserve_head.lock);
spin_unlock(&head->lock);

XFS_STATS_INC(xs_sleep_logspace);

trace_xfs_log_grant_sleep(log, tic);
schedule();
trace_xfs_log_grant_wake(log, tic);

spin_lock(&log->l_reserve_head.lock);
spin_lock(&head->lock);
if (XLOG_FORCED_SHUTDOWN(log))
goto shutdown;
} while (xlog_space_left(log, &log->l_reserve_head.grant) < need_bytes);

list_del_init(&tic->t_queue);
return 0;
shutdown:
list_del_init(&tic->t_queue);
return XFS_ERROR(EIO);
}

STATIC int
xlog_writeq_wait(
struct log *log,
struct xlog_ticket *tic,
int need_bytes)
{
list_add_tail(&tic->t_queue, &log->l_write_head.waiters);

do {
if (XLOG_FORCED_SHUTDOWN(log))
goto shutdown;
xlog_grant_push_ail(log, need_bytes);

__set_current_state(TASK_UNINTERRUPTIBLE);
spin_unlock(&log->l_write_head.lock);

XFS_STATS_INC(xs_sleep_logspace);

trace_xfs_log_regrant_write_sleep(log, tic);
schedule();
trace_xfs_log_regrant_write_wake(log, tic);

spin_lock(&log->l_write_head.lock);
if (XLOG_FORCED_SHUTDOWN(log))
goto shutdown;
} while (xlog_space_left(log, &log->l_write_head.grant) < need_bytes);
} while (xlog_space_left(log, &head->grant) < need_bytes);

list_del_init(&tic->t_queue);
return 0;
Expand Down Expand Up @@ -2596,12 +2563,15 @@ xlog_grant_log_space(
if (!list_empty_careful(&log->l_reserve_head.waiters)) {
spin_lock(&log->l_reserve_head.lock);
if (!xlog_reserveq_wake(log, &free_bytes) ||
free_bytes < need_bytes)
error = xlog_reserveq_wait(log, tic, need_bytes);
free_bytes < need_bytes) {
error = xlog_grant_head_wait(log, &log->l_reserve_head,
tic, need_bytes);
}
spin_unlock(&log->l_reserve_head.lock);
} else if (free_bytes < need_bytes) {
spin_lock(&log->l_reserve_head.lock);
error = xlog_reserveq_wait(log, tic, need_bytes);
error = xlog_grant_head_wait(log, &log->l_reserve_head, tic,
need_bytes);
spin_unlock(&log->l_reserve_head.lock);
}
if (error)
Expand Down Expand Up @@ -2649,12 +2619,15 @@ xlog_regrant_write_log_space(
if (!list_empty_careful(&log->l_write_head.waiters)) {
spin_lock(&log->l_write_head.lock);
if (!xlog_writeq_wake(log, &free_bytes) ||
free_bytes < need_bytes)
error = xlog_writeq_wait(log, tic, need_bytes);
free_bytes < need_bytes) {
error = xlog_grant_head_wait(log, &log->l_write_head,
tic, need_bytes);
}
spin_unlock(&log->l_write_head.lock);
} else if (free_bytes < need_bytes) {
spin_lock(&log->l_write_head.lock);
error = xlog_writeq_wait(log, tic, need_bytes);
error = xlog_grant_head_wait(log, &log->l_write_head, tic,
need_bytes);
spin_unlock(&log->l_write_head.lock);
}

Expand Down
2 changes: 0 additions & 2 deletions trunk/fs/xfs/xfs_trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -837,8 +837,6 @@ DEFINE_LOGGRANT_EVENT(xfs_log_grant_wake_up);
DEFINE_LOGGRANT_EVENT(xfs_log_regrant_write_enter);
DEFINE_LOGGRANT_EVENT(xfs_log_regrant_write_exit);
DEFINE_LOGGRANT_EVENT(xfs_log_regrant_write_error);
DEFINE_LOGGRANT_EVENT(xfs_log_regrant_write_sleep);
DEFINE_LOGGRANT_EVENT(xfs_log_regrant_write_wake);
DEFINE_LOGGRANT_EVENT(xfs_log_regrant_write_wake_up);
DEFINE_LOGGRANT_EVENT(xfs_log_regrant_reserve_enter);
DEFINE_LOGGRANT_EVENT(xfs_log_regrant_reserve_exit);
Expand Down

0 comments on commit 9733052

Please sign in to comment.