@@ -107,7 +107,7 @@ static void map_buffer_to_folio(struct folio *folio, struct buffer_head *bh,
107107 * don't make any buffers if there is only one buffer on
108108 * the folio and the folio just needs to be set up to date
109109 */
110- if (inode -> i_blkbits == PAGE_SHIFT &&
110+ if (inode -> i_blkbits == folio_shift ( folio ) &&
111111 buffer_uptodate (bh )) {
112112 folio_mark_uptodate (folio );
113113 return ;
@@ -153,15 +153,15 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
153153 struct folio * folio = args -> folio ;
154154 struct inode * inode = folio -> mapping -> host ;
155155 const unsigned blkbits = inode -> i_blkbits ;
156- const unsigned blocks_per_page = PAGE_SIZE >> blkbits ;
156+ const unsigned blocks_per_folio = folio_size ( folio ) >> blkbits ;
157157 const unsigned blocksize = 1 << blkbits ;
158158 struct buffer_head * map_bh = & args -> map_bh ;
159159 sector_t block_in_file ;
160160 sector_t last_block ;
161161 sector_t last_block_in_file ;
162162 sector_t first_block ;
163163 unsigned page_block ;
164- unsigned first_hole = blocks_per_page ;
164+ unsigned first_hole = blocks_per_folio ;
165165 struct block_device * bdev = NULL ;
166166 int length ;
167167 int fully_mapped = 1 ;
@@ -170,9 +170,6 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
170170 unsigned relative_block ;
171171 gfp_t gfp = mapping_gfp_constraint (folio -> mapping , GFP_KERNEL );
172172
173- /* MAX_BUF_PER_PAGE, for example */
174- VM_BUG_ON_FOLIO (folio_test_large (folio ), folio );
175-
176173 if (args -> is_readahead ) {
177174 opf |= REQ_RAHEAD ;
178175 gfp |= __GFP_NORETRY | __GFP_NOWARN ;
@@ -181,8 +178,8 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
181178 if (folio_buffers (folio ))
182179 goto confused ;
183180
184- block_in_file = ( sector_t ) folio -> index << ( PAGE_SHIFT - blkbits ) ;
185- last_block = block_in_file + args -> nr_pages * blocks_per_page ;
181+ block_in_file = folio_pos ( folio ) >> blkbits ;
182+ last_block = block_in_file + (( args -> nr_pages * PAGE_SIZE ) >> blkbits ) ;
186183 last_block_in_file = (i_size_read (inode ) + blocksize - 1 ) >> blkbits ;
187184 if (last_block > last_block_in_file )
188185 last_block = last_block_in_file ;
@@ -204,7 +201,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
204201 clear_buffer_mapped (map_bh );
205202 break ;
206203 }
207- if (page_block == blocks_per_page )
204+ if (page_block == blocks_per_folio )
208205 break ;
209206 page_block ++ ;
210207 block_in_file ++ ;
@@ -216,7 +213,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
216213 * Then do more get_blocks calls until we are done with this folio.
217214 */
218215 map_bh -> b_folio = folio ;
219- while (page_block < blocks_per_page ) {
216+ while (page_block < blocks_per_folio ) {
220217 map_bh -> b_state = 0 ;
221218 map_bh -> b_size = 0 ;
222219
@@ -229,7 +226,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
229226
230227 if (!buffer_mapped (map_bh )) {
231228 fully_mapped = 0 ;
232- if (first_hole == blocks_per_page )
229+ if (first_hole == blocks_per_folio )
233230 first_hole = page_block ;
234231 page_block ++ ;
235232 block_in_file ++ ;
@@ -247,7 +244,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
247244 goto confused ;
248245 }
249246
250- if (first_hole != blocks_per_page )
247+ if (first_hole != blocks_per_folio )
251248 goto confused ; /* hole -> non-hole */
252249
253250 /* Contiguous blocks? */
@@ -260,16 +257,16 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
260257 if (relative_block == nblocks ) {
261258 clear_buffer_mapped (map_bh );
262259 break ;
263- } else if (page_block == blocks_per_page )
260+ } else if (page_block == blocks_per_folio )
264261 break ;
265262 page_block ++ ;
266263 block_in_file ++ ;
267264 }
268265 bdev = map_bh -> b_bdev ;
269266 }
270267
271- if (first_hole != blocks_per_page ) {
272- folio_zero_segment (folio , first_hole << blkbits , PAGE_SIZE );
268+ if (first_hole != blocks_per_folio ) {
269+ folio_zero_segment (folio , first_hole << blkbits , folio_size ( folio ) );
273270 if (first_hole == 0 ) {
274271 folio_mark_uptodate (folio );
275272 folio_unlock (folio );
@@ -303,10 +300,10 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args)
303300 relative_block = block_in_file - args -> first_logical_block ;
304301 nblocks = map_bh -> b_size >> blkbits ;
305302 if ((buffer_boundary (map_bh ) && relative_block == nblocks ) ||
306- (first_hole != blocks_per_page ))
303+ (first_hole != blocks_per_folio ))
307304 args -> bio = mpage_bio_submit_read (args -> bio );
308305 else
309- args -> last_block_in_bio = first_block + blocks_per_page - 1 ;
306+ args -> last_block_in_bio = first_block + blocks_per_folio - 1 ;
310307out :
311308 return args -> bio ;
312309
@@ -385,7 +382,7 @@ int mpage_read_folio(struct folio *folio, get_block_t get_block)
385382{
386383 struct mpage_readpage_args args = {
387384 .folio = folio ,
388- .nr_pages = 1 ,
385+ .nr_pages = folio_nr_pages ( folio ) ,
389386 .get_block = get_block ,
390387 };
391388
@@ -456,12 +453,12 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
456453 struct address_space * mapping = folio -> mapping ;
457454 struct inode * inode = mapping -> host ;
458455 const unsigned blkbits = inode -> i_blkbits ;
459- const unsigned blocks_per_page = PAGE_SIZE >> blkbits ;
456+ const unsigned blocks_per_folio = folio_size ( folio ) >> blkbits ;
460457 sector_t last_block ;
461458 sector_t block_in_file ;
462459 sector_t first_block ;
463460 unsigned page_block ;
464- unsigned first_unmapped = blocks_per_page ;
461+ unsigned first_unmapped = blocks_per_folio ;
465462 struct block_device * bdev = NULL ;
466463 int boundary = 0 ;
467464 sector_t boundary_block = 0 ;
@@ -486,12 +483,12 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
486483 */
487484 if (buffer_dirty (bh ))
488485 goto confused ;
489- if (first_unmapped == blocks_per_page )
486+ if (first_unmapped == blocks_per_folio )
490487 first_unmapped = page_block ;
491488 continue ;
492489 }
493490
494- if (first_unmapped != blocks_per_page )
491+ if (first_unmapped != blocks_per_folio )
495492 goto confused ; /* hole -> non-hole */
496493
497494 if (!buffer_dirty (bh ) || !buffer_uptodate (bh ))
@@ -527,7 +524,7 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
527524 * The page has no buffers: map it to disk
528525 */
529526 BUG_ON (!folio_test_uptodate (folio ));
530- block_in_file = ( sector_t ) folio -> index << ( PAGE_SHIFT - blkbits ) ;
527+ block_in_file = folio_pos ( folio ) >> blkbits ;
531528 /*
532529 * Whole page beyond EOF? Skip allocating blocks to avoid leaking
533530 * space.
@@ -536,7 +533,7 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
536533 goto page_is_mapped ;
537534 last_block = (i_size - 1 ) >> blkbits ;
538535 map_bh .b_folio = folio ;
539- for (page_block = 0 ; page_block < blocks_per_page ; ) {
536+ for (page_block = 0 ; page_block < blocks_per_folio ; ) {
540537
541538 map_bh .b_state = 0 ;
542539 map_bh .b_size = 1 << blkbits ;
@@ -618,14 +615,14 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
618615 BUG_ON (folio_test_writeback (folio ));
619616 folio_start_writeback (folio );
620617 folio_unlock (folio );
621- if (boundary || (first_unmapped != blocks_per_page )) {
618+ if (boundary || (first_unmapped != blocks_per_folio )) {
622619 bio = mpage_bio_submit_write (bio );
623620 if (boundary_block ) {
624621 write_boundary_block (boundary_bdev ,
625622 boundary_block , 1 << blkbits );
626623 }
627624 } else {
628- mpd -> last_block_in_bio = first_block + blocks_per_page - 1 ;
625+ mpd -> last_block_in_bio = first_block + blocks_per_folio - 1 ;
629626 }
630627 goto out ;
631628
0 commit comments