|
@@ -63,15 +63,29 @@ STATIC void xlog_recover_check_summary(xlog_t *);
|
|
|
/* Number of basic blocks in a log sector */
|
|
|
#define xlog_sectbb(log) (1 << (log)->l_sectbb_log)
|
|
|
|
|
|
+/*
|
|
|
+ * Verify the given count of basic blocks is valid number of blocks
|
|
|
+ * to specify for an operation involving the given XFS log buffer.
|
|
|
+ * Returns nonzero if the count is valid, 0 otherwise.
|
|
|
+ */
|
|
|
+
|
|
|
+static inline int
|
|
|
+xlog_buf_bbcount_valid(
|
|
|
+ xlog_t *log,
|
|
|
+ int bbcount)
|
|
|
+{
|
|
|
+ return bbcount > 0 && bbcount <= log->l_logBBsize;
|
|
|
+}
|
|
|
+
|
|
|
STATIC xfs_buf_t *
|
|
|
xlog_get_bp(
|
|
|
xlog_t *log,
|
|
|
int nbblks)
|
|
|
{
|
|
|
- if (nbblks <= 0 || nbblks > log->l_logBBsize) {
|
|
|
- xlog_warn("XFS: Invalid block length (0x%x) given for buffer", nbblks);
|
|
|
- XFS_ERROR_REPORT("xlog_get_bp(1)",
|
|
|
- XFS_ERRLEVEL_HIGH, log->l_mp);
|
|
|
+ if (!xlog_buf_bbcount_valid(log, nbblks)) {
|
|
|
+ xlog_warn("XFS: Invalid block length (0x%x) given for buffer",
|
|
|
+ nbblks);
|
|
|
+ XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp);
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
@@ -121,10 +135,10 @@ xlog_bread_noalign(
|
|
|
{
|
|
|
int error;
|
|
|
|
|
|
- if (nbblks <= 0 || nbblks > log->l_logBBsize) {
|
|
|
- xlog_warn("XFS: Invalid block length (0x%x) given for buffer", nbblks);
|
|
|
- XFS_ERROR_REPORT("xlog_bread(1)",
|
|
|
- XFS_ERRLEVEL_HIGH, log->l_mp);
|
|
|
+ if (!xlog_buf_bbcount_valid(log, nbblks)) {
|
|
|
+ xlog_warn("XFS: Invalid block length (0x%x) given for buffer",
|
|
|
+ nbblks);
|
|
|
+ XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp);
|
|
|
return EFSCORRUPTED;
|
|
|
}
|
|
|
|
|
@@ -183,10 +197,10 @@ xlog_bwrite(
|
|
|
{
|
|
|
int error;
|
|
|
|
|
|
- if (nbblks <= 0 || nbblks > log->l_logBBsize) {
|
|
|
- xlog_warn("XFS: Invalid block length (0x%x) given for buffer", nbblks);
|
|
|
- XFS_ERROR_REPORT("xlog_bwrite(1)",
|
|
|
- XFS_ERRLEVEL_HIGH, log->l_mp);
|
|
|
+ if (!xlog_buf_bbcount_valid(log, nbblks)) {
|
|
|
+ xlog_warn("XFS: Invalid block length (0x%x) given for buffer",
|
|
|
+ nbblks);
|
|
|
+ XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp);
|
|
|
return EFSCORRUPTED;
|
|
|
}
|
|
|
|