@@ -154,6 +154,7 @@ void f2fs_destroy_compress_ctx(struct compress_ctx *cc, bool reuse)
154
154
cc -> rpages = NULL ;
155
155
cc -> nr_rpages = 0 ;
156
156
cc -> nr_cpages = 0 ;
157
+ cc -> valid_nr_cpages = 0 ;
157
158
if (!reuse )
158
159
cc -> cluster_idx = NULL_CLUSTER ;
159
160
}
@@ -620,7 +621,6 @@ static int f2fs_compress_pages(struct compress_ctx *cc)
620
621
const struct f2fs_compress_ops * cops =
621
622
f2fs_cops [fi -> i_compress_algorithm ];
622
623
unsigned int max_len , new_nr_cpages ;
623
- struct page * * new_cpages ;
624
624
u32 chksum = 0 ;
625
625
int i , ret ;
626
626
@@ -635,6 +635,7 @@ static int f2fs_compress_pages(struct compress_ctx *cc)
635
635
636
636
max_len = COMPRESS_HEADER_SIZE + cc -> clen ;
637
637
cc -> nr_cpages = DIV_ROUND_UP (max_len , PAGE_SIZE );
638
+ cc -> valid_nr_cpages = cc -> nr_cpages ;
638
639
639
640
cc -> cpages = page_array_alloc (cc -> inode , cc -> nr_cpages );
640
641
if (!cc -> cpages ) {
@@ -685,13 +686,6 @@ static int f2fs_compress_pages(struct compress_ctx *cc)
685
686
686
687
new_nr_cpages = DIV_ROUND_UP (cc -> clen + COMPRESS_HEADER_SIZE , PAGE_SIZE );
687
688
688
- /* Now we're going to cut unnecessary tail pages */
689
- new_cpages = page_array_alloc (cc -> inode , new_nr_cpages );
690
- if (!new_cpages ) {
691
- ret = - ENOMEM ;
692
- goto out_vunmap_cbuf ;
693
- }
694
-
695
689
/* zero out any unused part of the last page */
696
690
memset (& cc -> cbuf -> cdata [cc -> clen ], 0 ,
697
691
(new_nr_cpages * PAGE_SIZE ) -
@@ -701,20 +695,16 @@ static int f2fs_compress_pages(struct compress_ctx *cc)
701
695
vm_unmap_ram (cc -> rbuf , cc -> cluster_size );
702
696
703
697
for (i = 0 ; i < cc -> nr_cpages ; i ++ ) {
704
- if (i < new_nr_cpages ) {
705
- new_cpages [i ] = cc -> cpages [i ];
698
+ if (i < new_nr_cpages )
706
699
continue ;
707
- }
708
700
f2fs_compress_free_page (cc -> cpages [i ]);
709
701
cc -> cpages [i ] = NULL ;
710
702
}
711
703
712
704
if (cops -> destroy_compress_ctx )
713
705
cops -> destroy_compress_ctx (cc );
714
706
715
- page_array_free (cc -> inode , cc -> cpages , cc -> nr_cpages );
716
- cc -> cpages = new_cpages ;
717
- cc -> nr_cpages = new_nr_cpages ;
707
+ cc -> valid_nr_cpages = new_nr_cpages ;
718
708
719
709
trace_f2fs_compress_pages_end (cc -> inode , cc -> cluster_idx ,
720
710
cc -> clen , ret );
@@ -1308,14 +1298,14 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,
1308
1298
1309
1299
cic -> magic = F2FS_COMPRESSED_PAGE_MAGIC ;
1310
1300
cic -> inode = inode ;
1311
- atomic_set (& cic -> pending_pages , cc -> nr_cpages );
1301
+ atomic_set (& cic -> pending_pages , cc -> valid_nr_cpages );
1312
1302
cic -> rpages = page_array_alloc (cc -> inode , cc -> cluster_size );
1313
1303
if (!cic -> rpages )
1314
1304
goto out_put_cic ;
1315
1305
1316
1306
cic -> nr_rpages = cc -> cluster_size ;
1317
1307
1318
- for (i = 0 ; i < cc -> nr_cpages ; i ++ ) {
1308
+ for (i = 0 ; i < cc -> valid_nr_cpages ; i ++ ) {
1319
1309
f2fs_set_compressed_page (cc -> cpages [i ], inode ,
1320
1310
cc -> rpages [i + 1 ]-> index , cic );
1321
1311
fio .compressed_page = cc -> cpages [i ];
@@ -1360,7 +1350,7 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,
1360
1350
if (fio .compr_blocks && __is_valid_data_blkaddr (blkaddr ))
1361
1351
fio .compr_blocks ++ ;
1362
1352
1363
- if (i > cc -> nr_cpages ) {
1353
+ if (i > cc -> valid_nr_cpages ) {
1364
1354
if (__is_valid_data_blkaddr (blkaddr )) {
1365
1355
f2fs_invalidate_blocks (sbi , blkaddr );
1366
1356
f2fs_update_data_blkaddr (& dn , NEW_ADDR );
@@ -1385,8 +1375,8 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,
1385
1375
1386
1376
if (fio .compr_blocks )
1387
1377
f2fs_i_compr_blocks_update (inode , fio .compr_blocks - 1 , false);
1388
- f2fs_i_compr_blocks_update (inode , cc -> nr_cpages , true);
1389
- add_compr_block_stat (inode , cc -> nr_cpages );
1378
+ f2fs_i_compr_blocks_update (inode , cc -> valid_nr_cpages , true);
1379
+ add_compr_block_stat (inode , cc -> valid_nr_cpages );
1390
1380
1391
1381
set_inode_flag (cc -> inode , FI_APPEND_WRITE );
1392
1382
if (cc -> cluster_idx == 0 )
@@ -1424,9 +1414,7 @@ static int f2fs_write_compressed_pages(struct compress_ctx *cc,
1424
1414
else
1425
1415
f2fs_unlock_op (sbi );
1426
1416
out_free :
1427
- for (i = 0 ; i < cc -> nr_cpages ; i ++ ) {
1428
- if (!cc -> cpages [i ])
1429
- continue ;
1417
+ for (i = 0 ; i < cc -> valid_nr_cpages ; i ++ ) {
1430
1418
f2fs_compress_free_page (cc -> cpages [i ]);
1431
1419
cc -> cpages [i ] = NULL ;
1432
1420
}
0 commit comments