30
30
#include "util.h"
31
31
#include "trace_gfs2.h"
32
32
33
- static int gfs2_aspace_writepage (struct page * page , struct writeback_control * wbc )
33
+ static void gfs2_aspace_write_folio (struct folio * folio ,
34
+ struct writeback_control * wbc )
34
35
{
35
- struct folio * folio = page_folio (page );
36
36
struct buffer_head * bh , * head ;
37
37
int nr_underway = 0 ;
38
38
blk_opf_t write_flags = REQ_META | REQ_PRIO | wbc_to_write_flags (wbc );
@@ -66,8 +66,8 @@ static int gfs2_aspace_writepage(struct page *page, struct writeback_control *wb
66
66
} while ((bh = bh -> b_this_page ) != head );
67
67
68
68
/*
69
- * The page and its buffers are protected by PageWriteback(), so we can
70
- * drop the bh refcounts early.
69
+ * The folio and its buffers are protected from truncation by
70
+ * the writeback flag, so we can drop the bh refcounts early.
71
71
*/
72
72
BUG_ON (folio_test_writeback (folio ));
73
73
folio_start_writeback (folio );
@@ -84,21 +84,39 @@ static int gfs2_aspace_writepage(struct page *page, struct writeback_control *wb
84
84
85
85
if (nr_underway == 0 )
86
86
folio_end_writeback (folio );
87
+ }
88
+
89
+ static int gfs2_aspace_writepage (struct page * page , struct writeback_control * wbc )
90
+ {
91
+ gfs2_aspace_write_folio (page_folio (page ), wbc );
87
92
88
93
return 0 ;
89
94
}
90
95
96
+ static int gfs2_aspace_writepages (struct address_space * mapping ,
97
+ struct writeback_control * wbc )
98
+ {
99
+ struct folio * folio = NULL ;
100
+ int error ;
101
+
102
+ while ((folio = writeback_iter (mapping , wbc , folio , & error )))
103
+ gfs2_aspace_write_folio (folio , wbc );
104
+
105
+ return error ;
106
+ }
107
+
91
108
const struct address_space_operations gfs2_meta_aops = {
92
109
.dirty_folio = block_dirty_folio ,
93
110
.invalidate_folio = block_invalidate_folio ,
94
- .writepage = gfs2_aspace_writepage ,
111
+ .writepages = gfs2_aspace_writepages ,
95
112
.release_folio = gfs2_release_folio ,
96
113
};
97
114
98
115
const struct address_space_operations gfs2_rgrp_aops = {
99
116
.dirty_folio = block_dirty_folio ,
100
117
.invalidate_folio = block_invalidate_folio ,
101
118
.writepage = gfs2_aspace_writepage ,
119
+ .writepages = gfs2_aspace_writepages ,
102
120
.release_folio = gfs2_release_folio ,
103
121
};
104
122
0 commit comments