Skip to content

Commit 6420f17

Browse files
Matthew Wilcox (Oracle)brauner
authored andcommitted
orangefs: Pass mapping to orangefs_writepages_work()
Remove two accesses to page->mapping by passing the mapping from orangefs_writepages() to orangefs_writepages_callback() and then orangefs_writepages_work(). That makes it obvious that all folios come from the same mapping, so we can hoist the call to mapping_set_error() outside the loop. While I'm here, switch from write_cache_pages() to writeback_iter() which removes an indirect function call. Signed-off-by: "Matthew Wilcox (Oracle)" <[email protected]> Link: https://lore.kernel.org/r/[email protected] Tested-by: Mike Marshall <[email protected]> Signed-off-by: Christian Brauner <[email protected]>
1 parent 40eca02 commit 6420f17

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

fs/orangefs/inode.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,15 @@ struct orangefs_writepages {
7171
kgid_t gid;
7272
int maxpages;
7373
int npages;
74+
struct address_space *mapping;
7475
struct page **pages;
7576
struct bio_vec *bv;
7677
};
7778

7879
static int orangefs_writepages_work(struct orangefs_writepages *ow,
79-
struct writeback_control *wbc)
80+
struct writeback_control *wbc)
8081
{
81-
struct inode *inode = ow->pages[0]->mapping->host;
82+
struct inode *inode = ow->mapping->host;
8283
struct orangefs_write_range *wrp, wr;
8384
struct iov_iter iter;
8485
ssize_t ret;
@@ -107,8 +108,8 @@ static int orangefs_writepages_work(struct orangefs_writepages *ow,
107108
ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, ow->len,
108109
0, &wr, NULL, NULL);
109110
if (ret < 0) {
111+
mapping_set_error(ow->mapping, ret);
110112
for (i = 0; i < ow->npages; i++) {
111-
mapping_set_error(ow->pages[i]->mapping, ret);
112113
if (PagePrivate(ow->pages[i])) {
113114
wrp = (struct orangefs_write_range *)
114115
page_private(ow->pages[i]);
@@ -137,9 +138,8 @@ static int orangefs_writepages_work(struct orangefs_writepages *ow,
137138
}
138139

139140
static int orangefs_writepages_callback(struct folio *folio,
140-
struct writeback_control *wbc, void *data)
141+
struct writeback_control *wbc, struct orangefs_writepages *ow)
141142
{
142-
struct orangefs_writepages *ow = data;
143143
struct orangefs_write_range *wr = folio->private;
144144
int ret;
145145

@@ -197,7 +197,9 @@ static int orangefs_writepages(struct address_space *mapping,
197197
{
198198
struct orangefs_writepages *ow;
199199
struct blk_plug plug;
200-
int ret;
200+
int error;
201+
struct folio *folio = NULL;
202+
201203
ow = kzalloc(sizeof(struct orangefs_writepages), GFP_KERNEL);
202204
if (!ow)
203205
return -ENOMEM;
@@ -213,15 +215,17 @@ static int orangefs_writepages(struct address_space *mapping,
213215
kfree(ow);
214216
return -ENOMEM;
215217
}
218+
ow->mapping = mapping;
216219
blk_start_plug(&plug);
217-
ret = write_cache_pages(mapping, wbc, orangefs_writepages_callback, ow);
220+
while ((folio = writeback_iter(mapping, wbc, folio, &error)))
221+
error = orangefs_writepages_callback(folio, wbc, ow);
218222
if (ow->npages)
219-
ret = orangefs_writepages_work(ow, wbc);
223+
error = orangefs_writepages_work(ow, wbc);
220224
blk_finish_plug(&plug);
221225
kfree(ow->pages);
222226
kfree(ow->bv);
223227
kfree(ow);
224-
return ret;
228+
return error;
225229
}
226230

227231
static int orangefs_launder_folio(struct folio *);

0 commit comments

Comments
 (0)