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: Jie Liu <jeff.liu@oracle.com> Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
f749278c5a
commit
e773fc934f
@ -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(
|
|||||||
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 @@
|
|||||||
#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 {
|
|||||||
__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__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user