Commit e773fc93 authored by Jie Liu's avatar Jie Liu Committed by Ben Myers

xfs: Refactor xfs_ticket_alloc() to extract a new helper

Refactor xlog_ticket_alloc() to extract a new helper, i.e.
xfs_log_calc_unit_res().

This helper would be used to calculate the total log reservation
size by adding extra log operation/transation headers for a new
log ticket.
Signed-off-by: default avatarJie Liu <jeff.liu@oracle.com>
Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarMark Tinguely <tinguely@sgi.com>
Signed-off-by: default avatarBen Myers <bpm@sgi.com>
parent f749278c
...@@ -3391,24 +3391,17 @@ xfs_log_ticket_get( ...@@ -3391,24 +3391,17 @@ xfs_log_ticket_get(
} }
/* /*
* Allocate and initialise a new log ticket. * Figure out the total log space unit (in bytes) that would be
* required for a log ticket.
*/ */
struct xlog_ticket * int
xlog_ticket_alloc( xfs_log_calc_unit_res(
struct xlog *log, struct xfs_mount *mp,
int unit_bytes, int unit_bytes)
int cnt,
char client,
bool permanent,
xfs_km_flags_t alloc_flags)
{ {
struct xlog_ticket *tic; struct xlog *log = mp->m_log;
uint num_headers; int iclog_space;
int iclog_space; uint num_headers;
tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags);
if (!tic)
return NULL;
/* /*
* Permanent reservations have up to 'cnt'-1 active log operations * Permanent reservations have up to 'cnt'-1 active log operations
...@@ -3483,20 +3476,43 @@ xlog_ticket_alloc( ...@@ -3483,20 +3476,43 @@ xlog_ticket_alloc(
unit_bytes += log->l_iclog_hsize; unit_bytes += log->l_iclog_hsize;
/* for roundoff padding for transaction data and one for commit record */ /* for roundoff padding for transaction data and one for commit record */
if (xfs_sb_version_haslogv2(&log->l_mp->m_sb) && if (xfs_sb_version_haslogv2(&mp->m_sb) && mp->m_sb.sb_logsunit > 1) {
log->l_mp->m_sb.sb_logsunit > 1) {
/* log su roundoff */ /* log su roundoff */
unit_bytes += 2*log->l_mp->m_sb.sb_logsunit; unit_bytes += 2 * mp->m_sb.sb_logsunit;
} else { } else {
/* BB roundoff */ /* BB roundoff */
unit_bytes += 2*BBSIZE; unit_bytes += 2 * BBSIZE;
} }
return unit_bytes;
}
/*
* Allocate and initialise a new log ticket.
*/
struct xlog_ticket *
xlog_ticket_alloc(
struct xlog *log,
int unit_bytes,
int cnt,
char client,
bool permanent,
xfs_km_flags_t alloc_flags)
{
struct xlog_ticket *tic;
int unit_res;
tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags);
if (!tic)
return NULL;
unit_res = xfs_log_calc_unit_res(log->l_mp, unit_bytes);
atomic_set(&tic->t_ref, 1); atomic_set(&tic->t_ref, 1);
tic->t_task = current; tic->t_task = current;
INIT_LIST_HEAD(&tic->t_queue); INIT_LIST_HEAD(&tic->t_queue);
tic->t_unit_res = unit_bytes; tic->t_unit_res = unit_res;
tic->t_curr_res = unit_bytes; tic->t_curr_res = unit_res;
tic->t_cnt = cnt; tic->t_cnt = cnt;
tic->t_ocnt = cnt; tic->t_ocnt = cnt;
tic->t_tid = prandom_u32(); tic->t_tid = prandom_u32();
......
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
#ifndef __XFS_LOG_FORMAT_H__ #ifndef __XFS_LOG_FORMAT_H__
#define __XFS_LOG_FORMAT_H__ #define __XFS_LOG_FORMAT_H__
struct xfs_mount;
/* /*
* On-disk Log Format definitions. * On-disk Log Format definitions.
* *
...@@ -834,4 +836,6 @@ struct xfs_icreate_log { ...@@ -834,4 +836,6 @@ struct xfs_icreate_log {
__be32 icl_gen; /* inode generation number to use */ __be32 icl_gen; /* inode generation number to use */
}; };
int xfs_log_calc_unit_res(struct xfs_mount *mp, int unit_bytes);
#endif /* __XFS_LOG_FORMAT_H__ */ #endif /* __XFS_LOG_FORMAT_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment