Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 229054
b: refs/heads/master
c: 663e496
h: refs/heads/master
v: v3
  • Loading branch information
Dave Chinner authored and Dave Chinner committed Dec 21, 2010
1 parent 0532df4 commit 4010e81
Show file tree
Hide file tree
Showing 2 changed files with 49 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: 3f336c6fa17c2b3d14b3dd1bd6e64e9cc97b6359
refs/heads/master: 663e496a720a3a9fc08ea70b29724e8906b34e43
95 changes: 48 additions & 47 deletions trunk/fs/xfs/xfs_log.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,53 +98,34 @@ STATIC void xlog_verify_tail_lsn(xlog_t *log, xlog_in_core_t *iclog,
STATIC int xlog_iclogs_empty(xlog_t *log);

static void
xlog_grant_sub_space(struct log *log, int bytes)
{
log->l_grant_write_bytes -= bytes;
if (log->l_grant_write_bytes < 0) {
log->l_grant_write_bytes += log->l_logsize;
log->l_grant_write_cycle--;
}

log->l_grant_reserve_bytes -= bytes;
if ((log)->l_grant_reserve_bytes < 0) {
log->l_grant_reserve_bytes += log->l_logsize;
log->l_grant_reserve_cycle--;
}

}

static void
xlog_grant_add_space_write(struct log *log, int bytes)
xlog_grant_sub_space(
struct log *log,
int *cycle,
int *space,
int bytes)
{
int tmp = log->l_logsize - log->l_grant_write_bytes;
if (tmp > bytes)
log->l_grant_write_bytes += bytes;
else {
log->l_grant_write_cycle++;
log->l_grant_write_bytes = bytes - tmp;
*space -= bytes;
if (*space < 0) {
*space += log->l_logsize;
(*cycle)--;
}
}

static void
xlog_grant_add_space_reserve(struct log *log, int bytes)
xlog_grant_add_space(
struct log *log,
int *cycle,
int *space,
int bytes)
{
int tmp = log->l_logsize - log->l_grant_reserve_bytes;
int tmp = log->l_logsize - *space;
if (tmp > bytes)
log->l_grant_reserve_bytes += bytes;
*space += bytes;
else {
log->l_grant_reserve_cycle++;
log->l_grant_reserve_bytes = bytes - tmp;
*space = bytes - tmp;
(*cycle)++;
}
}

static inline void
xlog_grant_add_space(struct log *log, int bytes)
{
xlog_grant_add_space_write(log, bytes);
xlog_grant_add_space_reserve(log, bytes);
}

static void
xlog_tic_reset_res(xlog_ticket_t *tic)
{
Expand Down Expand Up @@ -1344,7 +1325,10 @@ xlog_sync(xlog_t *log,

/* move grant heads by roundoff in sync */
spin_lock(&log->l_grant_lock);
xlog_grant_add_space(log, roundoff);
xlog_grant_add_space(log, &log->l_grant_reserve_cycle,
&log->l_grant_reserve_bytes, roundoff);
xlog_grant_add_space(log, &log->l_grant_write_cycle,
&log->l_grant_write_bytes, roundoff);
spin_unlock(&log->l_grant_lock);

/* put cycle number in every block */
Expand Down Expand Up @@ -2574,7 +2558,10 @@ xlog_grant_log_space(xlog_t *log,
list_del_init(&tic->t_queue);

/* we've got enough space */
xlog_grant_add_space(log, need_bytes);
xlog_grant_add_space(log, &log->l_grant_reserve_cycle,
&log->l_grant_reserve_bytes, need_bytes);
xlog_grant_add_space(log, &log->l_grant_write_cycle,
&log->l_grant_write_bytes, need_bytes);
trace_xfs_log_grant_exit(log, tic);
xlog_verify_grant_head(log, 1);
xlog_verify_grant_tail(log);
Expand Down Expand Up @@ -2701,7 +2688,8 @@ xlog_regrant_write_log_space(xlog_t *log,
list_del_init(&tic->t_queue);

/* we've got enough space */
xlog_grant_add_space_write(log, need_bytes);
xlog_grant_add_space(log, &log->l_grant_write_cycle,
&log->l_grant_write_bytes, need_bytes);
trace_xfs_log_regrant_write_exit(log, tic);
xlog_verify_grant_head(log, 1);
xlog_verify_grant_tail(log);
Expand Down Expand Up @@ -2742,7 +2730,12 @@ xlog_regrant_reserve_log_space(xlog_t *log,
ticket->t_cnt--;

spin_lock(&log->l_grant_lock);
xlog_grant_sub_space(log, ticket->t_curr_res);
xlog_grant_sub_space(log, &log->l_grant_reserve_cycle,
&log->l_grant_reserve_bytes,
ticket->t_curr_res);
xlog_grant_sub_space(log, &log->l_grant_write_cycle,
&log->l_grant_write_bytes,
ticket->t_curr_res);
ticket->t_curr_res = ticket->t_unit_res;
xlog_tic_reset_res(ticket);

Expand All @@ -2756,7 +2749,9 @@ xlog_regrant_reserve_log_space(xlog_t *log,
return;
}

xlog_grant_add_space_reserve(log, ticket->t_unit_res);
xlog_grant_add_space(log, &log->l_grant_reserve_cycle,
&log->l_grant_reserve_bytes,
ticket->t_unit_res);

trace_xfs_log_regrant_reserve_exit(log, ticket);

Expand Down Expand Up @@ -2785,24 +2780,30 @@ STATIC void
xlog_ungrant_log_space(xlog_t *log,
xlog_ticket_t *ticket)
{
int bytes;

if (ticket->t_cnt > 0)
ticket->t_cnt--;

spin_lock(&log->l_grant_lock);
trace_xfs_log_ungrant_enter(log, ticket);

xlog_grant_sub_space(log, ticket->t_curr_res);

trace_xfs_log_ungrant_sub(log, ticket);

/* If this is a permanent reservation ticket, we may be able to free
/*
* If this is a permanent reservation ticket, we may be able to free
* up more space based on the remaining count.
*/
bytes = ticket->t_curr_res;
if (ticket->t_cnt > 0) {
ASSERT(ticket->t_flags & XLOG_TIC_PERM_RESERV);
xlog_grant_sub_space(log, ticket->t_unit_res*ticket->t_cnt);
bytes += ticket->t_unit_res*ticket->t_cnt;
}

xlog_grant_sub_space(log, &log->l_grant_reserve_cycle,
&log->l_grant_reserve_bytes, bytes);
xlog_grant_sub_space(log, &log->l_grant_write_cycle,
&log->l_grant_write_bytes, bytes);

trace_xfs_log_ungrant_exit(log, ticket);

xlog_verify_grant_head(log, 1);
Expand Down

0 comments on commit 4010e81

Please sign in to comment.