|
@@ -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.
|