@@ -1988,7 +1988,7 @@ static void fuse_writepage_args_page_fill(struct fuse_writepage_args *wpa, struc
1988
1988
1989
1989
ap -> folios [folio_index ] = folio ;
1990
1990
ap -> descs [folio_index ].offset = 0 ;
1991
- ap -> descs [folio_index ].length = PAGE_SIZE ;
1991
+ ap -> descs [folio_index ].length = folio_size ( folio ) ;
1992
1992
1993
1993
inc_wb_stat (& inode_to_bdi (inode )-> wb , WB_WRITEBACK );
1994
1994
}
@@ -2062,6 +2062,7 @@ struct fuse_fill_wb_data {
2062
2062
struct fuse_file * ff ;
2063
2063
struct inode * inode ;
2064
2064
unsigned int max_folios ;
2065
+ unsigned int nr_pages ;
2065
2066
};
2066
2067
2067
2068
static 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,
2109
2110
WARN_ON (!ap -> num_folios );
2110
2111
2111
2112
/* Reached max pages */
2112
- if (ap -> num_folios == fc -> max_pages )
2113
+ if (data -> nr_pages + folio_nr_pages ( folio ) > fc -> max_pages )
2113
2114
return true;
2114
2115
2115
2116
/* 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 )
2117
2118
return true;
2118
2119
2119
2120
/* 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 ))
2121
2122
return true;
2122
2123
2123
2124
/* Need to grow the pages array? If so, did the expansion fail? */
@@ -2148,6 +2149,7 @@ static int fuse_writepages_fill(struct folio *folio,
2148
2149
if (wpa && fuse_writepage_need_send (fc , folio , ap , data )) {
2149
2150
fuse_writepages_send (data );
2150
2151
data -> wpa = NULL ;
2152
+ data -> nr_pages = 0 ;
2151
2153
}
2152
2154
2153
2155
if (data -> wpa == NULL ) {
@@ -2162,6 +2164,7 @@ static int fuse_writepages_fill(struct folio *folio,
2162
2164
folio_start_writeback (folio );
2163
2165
2164
2166
fuse_writepage_args_page_fill (wpa , folio , ap -> num_folios );
2167
+ data -> nr_pages += folio_nr_pages (folio );
2165
2168
2166
2169
err = 0 ;
2167
2170
ap -> num_folios ++ ;
@@ -2192,6 +2195,7 @@ static int fuse_writepages(struct address_space *mapping,
2192
2195
data .inode = inode ;
2193
2196
data .wpa = NULL ;
2194
2197
data .ff = NULL ;
2198
+ data .nr_pages = 0 ;
2195
2199
2196
2200
err = write_cache_pages (mapping , wbc , fuse_writepages_fill , & data );
2197
2201
if (data .wpa ) {
0 commit comments