Commit b18d78de authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Andrew Morton
Browse files

nilfs2: convert nilfs_recovery_copy_block() to take a folio

Use memcpy_to_folio() instead of open-coding it, and use offset_in_folio()
in case anybody wants to use nilfs2 on a device with large blocks.

[konishi.ryusuke@gmail.com: added label name change]
Link: https://lkml.kernel.org/r/20241002150036.1339475-4-willy@infradead.org
Link: https://lkml.kernel.org/r/20241024092602.13395-12-konishi.ryusuke@gmail.com


Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent c1d73eb8
Loading
Loading
Loading
Loading
+7 −10
Original line number Diff line number Diff line
@@ -481,19 +481,16 @@ static int nilfs_prepare_segment_for_recovery(struct the_nilfs *nilfs,

static int nilfs_recovery_copy_block(struct the_nilfs *nilfs,
				     struct nilfs_recovery_block *rb,
				     loff_t pos, struct page *page)
				     loff_t pos, struct folio *folio)
{
	struct buffer_head *bh_org;
	size_t from = pos & ~PAGE_MASK;
	void *kaddr;
	size_t from = offset_in_folio(folio, pos);

	bh_org = __bread(nilfs->ns_bdev, rb->blocknr, nilfs->ns_blocksize);
	if (unlikely(!bh_org))
		return -EIO;

	kaddr = kmap_local_page(page);
	memcpy(kaddr + from, bh_org->b_data, bh_org->b_size);
	kunmap_local(kaddr);
	memcpy_to_folio(folio, from, bh_org->b_data, bh_org->b_size);
	brelse(bh_org);
	return 0;
}
@@ -531,13 +528,13 @@ static int nilfs_recover_dsync_blocks(struct the_nilfs *nilfs,
			goto failed_inode;
		}

		err = nilfs_recovery_copy_block(nilfs, rb, pos, &folio->page);
		err = nilfs_recovery_copy_block(nilfs, rb, pos, folio);
		if (unlikely(err))
			goto failed_page;
			goto failed_folio;

		err = nilfs_set_file_dirty(inode, 1);
		if (unlikely(err))
			goto failed_page;
			goto failed_folio;

		block_write_end(NULL, inode->i_mapping, pos, blocksize,
				blocksize, folio, NULL);
@@ -548,7 +545,7 @@ static int nilfs_recover_dsync_blocks(struct the_nilfs *nilfs,
		(*nr_salvaged_blocks)++;
		goto next;

 failed_page:
 failed_folio:
		folio_unlock(folio);
		folio_put(folio);