Skip to content

Commit

Permalink
xfs: convert buf_cancel_table allocation to kmalloc_array
Browse files Browse the repository at this point in the history
While we're messing around with how recovery allocates and frees the
buffer cancellation table, convert the allocation to use kmalloc_array
instead of the old kmem_alloc APIs, and make it handle a null return,
even though that's not likely.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
  • Loading branch information
Darrick J. Wong authored and Dave Chinner committed May 27, 2022
1 parent 8db074b commit 910bbdf
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 6 deletions.
2 changes: 1 addition & 1 deletion fs/xfs/libxfs/xfs_log_recover.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ int xlog_recover_iget(struct xfs_mount *mp, xfs_ino_t ino,
struct xfs_inode **ipp);
void xlog_recover_release_intent(struct xlog *log, unsigned short intent_type,
uint64_t intent_id);
void xlog_alloc_buf_cancel_table(struct xlog *log);
int xlog_alloc_buf_cancel_table(struct xlog *log);
void xlog_free_buf_cancel_table(struct xlog *log);

#ifdef DEBUG
Expand Down
14 changes: 10 additions & 4 deletions fs/xfs/xfs_buf_item_recover.c
Original file line number Diff line number Diff line change
Expand Up @@ -1015,19 +1015,25 @@ xlog_check_buf_cancel_table(
}
#endif

void
int
xlog_alloc_buf_cancel_table(
struct xlog *log)
{
void *p;
int i;

ASSERT(log->l_buf_cancel_table == NULL);

log->l_buf_cancel_table = kmem_zalloc(XLOG_BC_TABLE_SIZE *
sizeof(struct list_head),
0);
p = kmalloc_array(XLOG_BC_TABLE_SIZE, sizeof(struct list_head),
GFP_KERNEL);
if (!p)
return -ENOMEM;

log->l_buf_cancel_table = p;
for (i = 0; i < XLOG_BC_TABLE_SIZE; i++)
INIT_LIST_HEAD(&log->l_buf_cancel_table[i]);

return 0;
}

void
Expand Down
4 changes: 3 additions & 1 deletion fs/xfs/xfs_log_recover.c
Original file line number Diff line number Diff line change
Expand Up @@ -3231,7 +3231,9 @@ xlog_do_log_recovery(
* First do a pass to find all of the cancelled buf log items.
* Store them in the buf_cancel_table for use in the second pass.
*/
xlog_alloc_buf_cancel_table(log);
error = xlog_alloc_buf_cancel_table(log);
if (error)
return error;

error = xlog_do_recovery_pass(log, head_blk, tail_blk,
XLOG_RECOVER_PASS1, NULL);
Expand Down

0 comments on commit 910bbdf

Please sign in to comment.