xfs: add a helper to figure out the space log reservation per item
Add a new helper xfs_calc_buf_res() to calcuate out the transaction space reservations per item. xfs_buf_log_overhead() is used to figure out the extra space for struct xfs_buf_log_format that gets written into the log for every buffer as well as a log opheader, i.e. struct xlog_op_header. Signed-off-by: Jie Liu <jeff.liu@oracle.com> CC: Dave Chinner <david@fromorbit.com> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
2729423cf2
commit
4f3b57832b
@ -37,14 +37,45 @@
|
||||
#include "xfs_extent_busy.h"
|
||||
#include "xfs_bmap.h"
|
||||
#include "xfs_quota.h"
|
||||
#include "xfs_qm.h"
|
||||
#include "xfs_trans_priv.h"
|
||||
#include "xfs_trans_space.h"
|
||||
#include "xfs_inode_item.h"
|
||||
#include "xfs_log_priv.h"
|
||||
#include "xfs_buf_item.h"
|
||||
#include "xfs_trace.h"
|
||||
|
||||
kmem_zone_t *xfs_trans_zone;
|
||||
kmem_zone_t *xfs_log_item_desc_zone;
|
||||
|
||||
/*
|
||||
* A buffer has a format structure overhead in the log in addition
|
||||
* to the data, so we need to take this into account when reserving
|
||||
* space in a transaction for a buffer. Round the space required up
|
||||
* to a multiple of 128 bytes so that we don't change the historical
|
||||
* reservation that has been used for this overhead.
|
||||
*/
|
||||
STATIC uint
|
||||
xfs_buf_log_overhead(void)
|
||||
{
|
||||
return round_up(sizeof(struct xlog_op_header) +
|
||||
sizeof(struct xfs_buf_log_format), 128);
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate out transaction log reservation per item in bytes.
|
||||
*
|
||||
* The nbufs argument is used to indicate the number of items that
|
||||
* will be changed in a transaction. size is used to tell how many
|
||||
* bytes should be reserved per item.
|
||||
*/
|
||||
STATIC uint
|
||||
xfs_calc_buf_res(
|
||||
uint nbufs,
|
||||
uint size)
|
||||
{
|
||||
return nbufs * (size + xfs_buf_log_overhead());
|
||||
}
|
||||
|
||||
/*
|
||||
* Various log reservation values.
|
||||
|
Loading…
Reference in New Issue
Block a user