diff options
Diffstat (limited to 'fs/xfs/xfs_log_recover.c')
| -rw-r--r-- | fs/xfs/xfs_log_recover.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index b1047de2fffd..61af610d79b3 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c | |||
| @@ -1455,10 +1455,19 @@ xlog_recover_add_to_trans( | |||
| 1455 | item = item->ri_prev; | 1455 | item = item->ri_prev; |
| 1456 | 1456 | ||
| 1457 | if (item->ri_total == 0) { /* first region to be added */ | 1457 | if (item->ri_total == 0) { /* first region to be added */ |
| 1458 | item->ri_total = in_f->ilf_size; | 1458 | if (in_f->ilf_size == 0 || |
| 1459 | ASSERT(item->ri_total <= XLOG_MAX_REGIONS_IN_ITEM); | 1459 | in_f->ilf_size > XLOG_MAX_REGIONS_IN_ITEM) { |
| 1460 | item->ri_buf = kmem_zalloc((item->ri_total * | 1460 | xlog_warn( |
| 1461 | sizeof(xfs_log_iovec_t)), KM_SLEEP); | 1461 | "XFS: bad number of regions (%d) in inode log format", |
| 1462 | in_f->ilf_size); | ||
| 1463 | ASSERT(0); | ||
| 1464 | return XFS_ERROR(EIO); | ||
| 1465 | } | ||
| 1466 | |||
| 1467 | item->ri_total = in_f->ilf_size; | ||
| 1468 | item->ri_buf = | ||
| 1469 | kmem_zalloc(item->ri_total * sizeof(xfs_log_iovec_t), | ||
| 1470 | KM_SLEEP); | ||
| 1462 | } | 1471 | } |
| 1463 | ASSERT(item->ri_total > item->ri_cnt); | 1472 | ASSERT(item->ri_total > item->ri_cnt); |
| 1464 | /* Description region is ri_buf[0] */ | 1473 | /* Description region is ri_buf[0] */ |
