@@ -1988,7 +1988,7 @@ static void fuse_writepage_args_page_fill(struct fuse_writepage_args *wpa, struc
19881988
19891989 ap -> folios [folio_index ] = folio ;
19901990 ap -> descs [folio_index ].offset = 0 ;
1991- ap -> descs [folio_index ].length = PAGE_SIZE ;
1991+ ap -> descs [folio_index ].length = folio_size ( folio ) ;
19921992
19931993 inc_wb_stat (& inode_to_bdi (inode )-> wb , WB_WRITEBACK );
19941994}
@@ -2062,6 +2062,7 @@ struct fuse_fill_wb_data {
20622062 struct fuse_file * ff ;
20632063 struct inode * inode ;
20642064 unsigned int max_folios ;
2065+ unsigned int nr_pages ;
20652066};
20662067
20672068static bool fuse_pages_realloc (struct fuse_fill_wb_data * data )
@@ -2109,15 +2110,15 @@ static bool fuse_writepage_need_send(struct fuse_conn *fc, struct folio *folio,
21092110 WARN_ON (!ap -> num_folios );
21102111
21112112 /* Reached max pages */
2112- if (ap -> num_folios == fc -> max_pages )
2113+ if (data -> nr_pages + folio_nr_pages ( folio ) > fc -> max_pages )
21132114 return true;
21142115
21152116 /* Reached max write bytes */
2116- if ((ap -> num_folios + 1 ) * PAGE_SIZE > fc -> max_write )
2117+ if ((data -> nr_pages * PAGE_SIZE ) + folio_size ( folio ) > fc -> max_write )
21172118 return true;
21182119
21192120 /* Discontinuity */
2120- if (ap -> folios [ap -> num_folios - 1 ]-> index + 1 != folio_index (folio ))
2121+ if (folio_next_index ( ap -> folios [ap -> num_folios - 1 ]) != folio_index (folio ))
21212122 return true;
21222123
21232124 /* Need to grow the pages array? If so, did the expansion fail? */
@@ -2148,6 +2149,7 @@ static int fuse_writepages_fill(struct folio *folio,
21482149 if (wpa && fuse_writepage_need_send (fc , folio , ap , data )) {
21492150 fuse_writepages_send (data );
21502151 data -> wpa = NULL ;
2152+ data -> nr_pages = 0 ;
21512153 }
21522154
21532155 if (data -> wpa == NULL ) {
@@ -2162,6 +2164,7 @@ static int fuse_writepages_fill(struct folio *folio,
21622164 folio_start_writeback (folio );
21632165
21642166 fuse_writepage_args_page_fill (wpa , folio , ap -> num_folios );
2167+ data -> nr_pages += folio_nr_pages (folio );
21652168
21662169 err = 0 ;
21672170 ap -> num_folios ++ ;
@@ -2192,6 +2195,7 @@ static int fuse_writepages(struct address_space *mapping,
21922195 data .inode = inode ;
21932196 data .wpa = NULL ;
21942197 data .ff = NULL ;
2198+ data .nr_pages = 0 ;
21952199
21962200 err = write_cache_pages (mapping , wbc , fuse_writepages_fill , & data );
21972201 if (data .wpa ) {
0 commit comments