* [PATCH 0/2] Convert writepage_t to use a folio
@ 2023-01-26 20:12 Matthew Wilcox (Oracle)
2023-01-26 20:12 ` [PATCH 1/2] fs: Convert writepage_t callback to pass " Matthew Wilcox (Oracle)
2023-01-26 20:12 ` [PATCH 2/2] mpage: Convert __mpage_writepage() to use a folio more fully Matthew Wilcox (Oracle)
0 siblings, 2 replies; 7+ messages in thread
From: Matthew Wilcox (Oracle) @ 2023-01-26 20:12 UTC (permalink / raw)
To: Andrew Morton
Cc: Matthew Wilcox (Oracle), Christoph Hellwig, linux-fsdevel,
linux-mm
Against next-20230125. More folioisation. I split out the mpage
work from everything else because it completely dominated the patch,
but some implementations I just converted outright.
Matthew Wilcox (Oracle) (2):
fs: Convert writepage_t callback to pass a folio
mpage: Convert __mpage_writepage() to use a folio more fully
fs/cifs/file.c | 8 +++----
fs/ext4/inode.c | 4 ++--
fs/ext4/super.c | 6 ++---
fs/fuse/file.c | 18 +++++++--------
fs/iomap/buffered-io.c | 5 ++---
fs/mpage.c | 46 +++++++++++++++++++--------------------
fs/nfs/write.c | 7 +++---
fs/ntfs3/inode.c | 6 ++---
fs/orangefs/inode.c | 23 ++++++++++----------
include/linux/writeback.h | 2 +-
mm/page-writeback.c | 6 ++---
11 files changed, 64 insertions(+), 67 deletions(-)
--
2.35.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] fs: Convert writepage_t callback to pass a folio
2023-01-26 20:12 [PATCH 0/2] Convert writepage_t to use a folio Matthew Wilcox (Oracle)
@ 2023-01-26 20:12 ` Matthew Wilcox (Oracle)
2023-01-28 17:13 ` kernel test robot
2023-01-26 20:12 ` [PATCH 2/2] mpage: Convert __mpage_writepage() to use a folio more fully Matthew Wilcox (Oracle)
1 sibling, 1 reply; 7+ messages in thread
From: Matthew Wilcox (Oracle) @ 2023-01-26 20:12 UTC (permalink / raw)
To: Andrew Morton
Cc: Matthew Wilcox (Oracle), Christoph Hellwig, linux-fsdevel,
linux-mm
We always write back an entire folio, but that's currently passed as
the head page. Convert all filesystems that use write_cache_pages()
to expect a folio instead of a page.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
fs/cifs/file.c | 8 ++++----
fs/ext4/inode.c | 4 ++--
fs/ext4/super.c | 6 +++---
fs/fuse/file.c | 18 +++++++++---------
fs/iomap/buffered-io.c | 5 ++---
fs/mpage.c | 3 ++-
fs/nfs/write.c | 7 ++++---
fs/ntfs3/inode.c | 6 +++---
fs/orangefs/inode.c | 23 +++++++++++------------
include/linux/writeback.h | 2 +-
mm/page-writeback.c | 6 +++---
11 files changed, 44 insertions(+), 44 deletions(-)
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index bc4d9951c412..5568a5f4bc5a 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -2676,14 +2676,14 @@ wdata_send_pages(struct cifs_writedata *wdata, unsigned int nr_pages,
static int
cifs_writepage_locked(struct page *page, struct writeback_control *wbc);
-static int cifs_write_one_page(struct page *page, struct writeback_control *wbc,
- void *data)
+static int cifs_write_one_page(struct folio *folio,
+ struct writeback_control *wbc, void *data)
{
struct address_space *mapping = data;
int ret;
- ret = cifs_writepage_locked(page, wbc);
- unlock_page(page);
+ ret = cifs_writepage_locked(&folio->page, wbc);
+ folio_unlock(folio);
mapping_set_error(mapping, ret);
return ret;
}
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 977b65580ad5..b8b3e2e0d9fd 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -2710,10 +2710,10 @@ static int mpage_prepare_extent_to_map(struct mpage_da_data *mpd)
return err;
}
-static int ext4_writepage_cb(struct page *page, struct writeback_control *wbc,
+static int ext4_writepage_cb(struct folio *folio, struct writeback_control *wbc,
void *data)
{
- return ext4_writepage(page, wbc);
+ return ext4_writepage(&folio->page, wbc);
}
static int ext4_do_writepages(struct mpage_da_data *mpd)
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index b31db521d6bf..b8aaf55dff34 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -482,7 +482,7 @@ static void ext4_journal_commit_callback(journal_t *journal, transaction_t *txn)
*
* However, we may have to redirty a page (see below.)
*/
-static int ext4_journalled_writepage_callback(struct page *page,
+static int ext4_journalled_writepage_callback(struct folio *folio,
struct writeback_control *wbc,
void *data)
{
@@ -490,7 +490,7 @@ static int ext4_journalled_writepage_callback(struct page *page,
struct buffer_head *bh, *head;
struct journal_head *jh;
- bh = head = page_buffers(page);
+ bh = head = folio_buffers(folio);
do {
/*
* We have to redirty a page in these cases:
@@ -509,7 +509,7 @@ static int ext4_journalled_writepage_callback(struct page *page,
if (buffer_dirty(bh) ||
(jh && (jh->b_transaction != transaction ||
jh->b_next_transaction))) {
- redirty_page_for_writepage(wbc, page);
+ folio_redirty_for_writepage(wbc, folio);
goto out;
}
} while ((bh = bh->b_this_page) != head);
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 82710d103556..ff0b3ef774d4 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -2186,7 +2186,7 @@ static bool fuse_writepage_need_send(struct fuse_conn *fc, struct page *page,
return false;
}
-static int fuse_writepages_fill(struct page *page,
+static int fuse_writepages_fill(struct folio *folio,
struct writeback_control *wbc, void *_data)
{
struct fuse_fill_wb_data *data = _data;
@@ -2205,7 +2205,7 @@ static int fuse_writepages_fill(struct page *page,
goto out_unlock;
}
- if (wpa && fuse_writepage_need_send(fc, page, ap, data)) {
+ if (wpa && fuse_writepage_need_send(fc, &folio->page, ap, data)) {
fuse_writepages_send(data);
data->wpa = NULL;
}
@@ -2240,7 +2240,7 @@ static int fuse_writepages_fill(struct page *page,
data->max_pages = 1;
ap = &wpa->ia.ap;
- fuse_write_args_fill(&wpa->ia, data->ff, page_offset(page), 0);
+ fuse_write_args_fill(&wpa->ia, data->ff, folio_pos(folio), 0);
wpa->ia.write.in.write_flags |= FUSE_WRITE_CACHE;
wpa->next = NULL;
ap->args.in_pages = true;
@@ -2248,13 +2248,13 @@ static int fuse_writepages_fill(struct page *page,
ap->num_pages = 0;
wpa->inode = inode;
}
- set_page_writeback(page);
+ folio_start_writeback(folio);
- copy_highpage(tmp_page, page);
+ copy_highpage(tmp_page, &folio->page);
ap->pages[ap->num_pages] = tmp_page;
ap->descs[ap->num_pages].offset = 0;
ap->descs[ap->num_pages].length = PAGE_SIZE;
- data->orig_pages[ap->num_pages] = page;
+ data->orig_pages[ap->num_pages] = &folio->page;
inc_wb_stat(&inode_to_bdi(inode)->wb, WB_WRITEBACK);
inc_node_page_state(tmp_page, NR_WRITEBACK_TEMP);
@@ -2268,13 +2268,13 @@ static int fuse_writepages_fill(struct page *page,
spin_lock(&fi->lock);
ap->num_pages++;
spin_unlock(&fi->lock);
- } else if (fuse_writepage_add(wpa, page)) {
+ } else if (fuse_writepage_add(wpa, &folio->page)) {
data->wpa = wpa;
} else {
- end_page_writeback(page);
+ folio_end_writeback(folio);
}
out_unlock:
- unlock_page(page);
+ folio_unlock(folio);
return err;
}
diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
index d3c300563eb8..6f4c97a6d7e9 100644
--- a/fs/iomap/buffered-io.c
+++ b/fs/iomap/buffered-io.c
@@ -1714,10 +1714,9 @@ iomap_writepage_map(struct iomap_writepage_ctx *wpc,
* For unwritten space on the page, we need to start the conversion to
* regular allocated space.
*/
-static int
-iomap_do_writepage(struct page *page, struct writeback_control *wbc, void *data)
+static int iomap_do_writepage(struct folio *folio,
+ struct writeback_control *wbc, void *data)
{
- struct folio *folio = page_folio(page);
struct iomap_writepage_ctx *wpc = data;
struct inode *inode = folio->mapping->host;
u64 end_pos, isize;
diff --git a/fs/mpage.c b/fs/mpage.c
index b8e7975159bc..840f57ed2542 100644
--- a/fs/mpage.c
+++ b/fs/mpage.c
@@ -445,9 +445,10 @@ void clean_page_buffers(struct page *page)
clean_buffers(page, ~0U);
}
-static int __mpage_writepage(struct page *page, struct writeback_control *wbc,
+static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
void *data)
{
+ struct page *page = &folio->page;
struct mpage_data *mpd = data;
struct bio *bio = mpd->bio;
struct address_space *mapping = page->mapping;
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 1a80d548253a..ba3799097d1a 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -690,13 +690,14 @@ int nfs_writepage(struct page *page, struct writeback_control *wbc)
return ret;
}
-static int nfs_writepages_callback(struct page *page, struct writeback_control *wbc, void *data)
+static int nfs_writepages_callback(struct folio *folio,
+ struct writeback_control *wbc, void *data)
{
int ret;
- ret = nfs_do_writepage(page, wbc, data);
+ ret = nfs_do_writepage(&folio->page, wbc, data);
if (ret != AOP_WRITEPAGE_ACTIVATE)
- unlock_page(page);
+ folio_unlock(folio);
return ret;
}
diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c
index bc4c9e35a6fc..3d2e4c1270e4 100644
--- a/fs/ntfs3/inode.c
+++ b/fs/ntfs3/inode.c
@@ -844,7 +844,7 @@ int ntfs_set_size(struct inode *inode, u64 new_size)
return err;
}
-static int ntfs_resident_writepage(struct page *page,
+static int ntfs_resident_writepage(struct folio *folio,
struct writeback_control *wbc, void *data)
{
struct address_space *mapping = data;
@@ -852,11 +852,11 @@ static int ntfs_resident_writepage(struct page *page,
int ret;
ni_lock(ni);
- ret = attr_data_write_resident(ni, page);
+ ret = attr_data_write_resident(ni, &folio->page);
ni_unlock(ni);
if (ret != E_NTFS_NONRESIDENT)
- unlock_page(page);
+ folio_unlock(folio);
mapping_set_error(mapping, ret);
return ret;
}
diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c
index 11e21a0e65ce..c4c135f96aab 100644
--- a/fs/orangefs/inode.c
+++ b/fs/orangefs/inode.c
@@ -154,21 +154,20 @@ static int orangefs_writepages_work(struct orangefs_writepages *ow,
return ret;
}
-static int orangefs_writepages_callback(struct page *page,
- struct writeback_control *wbc, void *data)
+static int orangefs_writepages_callback(struct folio *folio,
+ struct writeback_control *wbc, void *data)
{
struct orangefs_writepages *ow = data;
- struct orangefs_write_range *wr;
+ struct orangefs_write_range *wr = folio->private;
int ret;
- if (!PagePrivate(page)) {
- unlock_page(page);
+ if (!wr) {
+ folio_unlock(folio);
/* It's not private so there's nothing to write, right? */
printk("writepages_callback not private!\n");
BUG();
return 0;
}
- wr = (struct orangefs_write_range *)page_private(page);
ret = -1;
if (ow->npages == 0) {
@@ -176,7 +175,7 @@ static int orangefs_writepages_callback(struct page *page,
ow->len = wr->len;
ow->uid = wr->uid;
ow->gid = wr->gid;
- ow->pages[ow->npages++] = page;
+ ow->pages[ow->npages++] = &folio->page;
ret = 0;
goto done;
}
@@ -188,7 +187,7 @@ static int orangefs_writepages_callback(struct page *page,
}
if (ow->off + ow->len == wr->pos) {
ow->len += wr->len;
- ow->pages[ow->npages++] = page;
+ ow->pages[ow->npages++] = &folio->page;
ret = 0;
goto done;
}
@@ -198,10 +197,10 @@ static int orangefs_writepages_callback(struct page *page,
orangefs_writepages_work(ow, wbc);
ow->npages = 0;
}
- ret = orangefs_writepage_locked(page, wbc);
- mapping_set_error(page->mapping, ret);
- unlock_page(page);
- end_page_writeback(page);
+ ret = orangefs_writepage_locked(&folio->page, wbc);
+ mapping_set_error(folio->mapping, ret);
+ folio_unlock(folio);
+ folio_end_writeback(folio);
} else {
if (ow->npages == ow->maxpages) {
orangefs_writepages_work(ow, wbc);
diff --git a/include/linux/writeback.h b/include/linux/writeback.h
index 3f1491b07474..46020373e155 100644
--- a/include/linux/writeback.h
+++ b/include/linux/writeback.h
@@ -366,7 +366,7 @@ int balance_dirty_pages_ratelimited_flags(struct address_space *mapping,
bool wb_over_bg_thresh(struct bdi_writeback *wb);
-typedef int (*writepage_t)(struct page *page, struct writeback_control *wbc,
+typedef int (*writepage_t)(struct folio *folio, struct writeback_control *wbc,
void *data);
void tag_pages_for_writeback(struct address_space *mapping,
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index 92b90d2ab513..516b1aa247e8 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -2470,7 +2470,7 @@ int write_cache_pages(struct address_space *mapping,
goto continue_unlock;
trace_wbc_writepage(wbc, inode_to_bdi(mapping->host));
- error = writepage(&folio->page, wbc, data);
+ error = writepage(folio, wbc, data);
if (unlikely(error)) {
/*
* Handle errors according to the type of
@@ -2528,11 +2528,11 @@ int write_cache_pages(struct address_space *mapping,
}
EXPORT_SYMBOL(write_cache_pages);
-static int writepage_cb(struct page *page, struct writeback_control *wbc,
+static int writepage_cb(struct folio *folio, struct writeback_control *wbc,
void *data)
{
struct address_space *mapping = data;
- int ret = mapping->a_ops->writepage(page, wbc);
+ int ret = mapping->a_ops->writepage(&folio->page, wbc);
mapping_set_error(mapping, ret);
return ret;
}
--
2.35.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] mpage: Convert __mpage_writepage() to use a folio more fully
2023-01-26 20:12 [PATCH 0/2] Convert writepage_t to use a folio Matthew Wilcox (Oracle)
2023-01-26 20:12 ` [PATCH 1/2] fs: Convert writepage_t callback to pass " Matthew Wilcox (Oracle)
@ 2023-01-26 20:12 ` Matthew Wilcox (Oracle)
2023-01-26 22:59 ` Andrew Morton
2023-01-30 11:04 ` Alexander Egorenkov
1 sibling, 2 replies; 7+ messages in thread
From: Matthew Wilcox (Oracle) @ 2023-01-26 20:12 UTC (permalink / raw)
To: Andrew Morton
Cc: Matthew Wilcox (Oracle), Christoph Hellwig, linux-fsdevel,
linux-mm
This is just a conversion to the folio API. While there are some nods
towards supporting multi-page folios in here, the blocks array is
still sized for one page's worth of blocks, and there are other
assumptions such as the blocks_per_page variable.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
fs/mpage.c | 45 +++++++++++++++++++++------------------------
1 file changed, 21 insertions(+), 24 deletions(-)
diff --git a/fs/mpage.c b/fs/mpage.c
index 840f57ed2542..2efa393f0db7 100644
--- a/fs/mpage.c
+++ b/fs/mpage.c
@@ -448,13 +448,11 @@ void clean_page_buffers(struct page *page)
static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
void *data)
{
- struct page *page = &folio->page;
struct mpage_data *mpd = data;
struct bio *bio = mpd->bio;
- struct address_space *mapping = page->mapping;
- struct inode *inode = page->mapping->host;
+ struct address_space *mapping = folio->mapping;
+ struct inode *inode = mapping->host;
const unsigned blkbits = inode->i_blkbits;
- unsigned long end_index;
const unsigned blocks_per_page = PAGE_SIZE >> blkbits;
sector_t last_block;
sector_t block_in_file;
@@ -465,13 +463,13 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
int boundary = 0;
sector_t boundary_block = 0;
struct block_device *boundary_bdev = NULL;
- int length;
+ size_t length;
struct buffer_head map_bh;
loff_t i_size = i_size_read(inode);
int ret = 0;
+ struct buffer_head *head = folio_buffers(folio);
- if (page_has_buffers(page)) {
- struct buffer_head *head = page_buffers(page);
+ if (head) {
struct buffer_head *bh = head;
/* If they're all mapped and dirty, do it */
@@ -523,8 +521,8 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
/*
* The page has no buffers: map it to disk
*/
- BUG_ON(!PageUptodate(page));
- block_in_file = (sector_t)page->index << (PAGE_SHIFT - blkbits);
+ BUG_ON(!folio_test_uptodate(folio));
+ block_in_file = (sector_t)folio->index << (PAGE_SHIFT - blkbits);
/*
* Whole page beyond EOF? Skip allocating blocks to avoid leaking
* space.
@@ -532,7 +530,7 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
if (block_in_file >= (i_size + (1 << blkbits) - 1) >> blkbits)
goto page_is_mapped;
last_block = (i_size - 1) >> blkbits;
- map_bh.b_page = page;
+ map_bh.b_folio = folio;
for (page_block = 0; page_block < blocks_per_page; ) {
map_bh.b_state = 0;
@@ -561,8 +559,8 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
first_unmapped = page_block;
page_is_mapped:
- end_index = i_size >> PAGE_SHIFT;
- if (page->index >= end_index) {
+ length = folio_size(folio);
+ if (folio_pos(folio) + length > i_size) {
/*
* The page straddles i_size. It must be zeroed out on each
* and every writepage invocation because it may be mmapped.
@@ -571,11 +569,10 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
* is zeroed when mapped, and writes to that region are not
* written out to the file."
*/
- unsigned offset = i_size & (PAGE_SIZE - 1);
-
- if (page->index > end_index || !offset)
+ length = i_size - folio_pos(folio);
+ if (WARN_ON_ONCE(folio_pos(folio) >= i_size))
goto confused;
- zero_user_segment(page, offset, PAGE_SIZE);
+ folio_zero_segment(folio, length, folio_size(folio));
}
/*
@@ -588,7 +585,7 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
if (bio == NULL) {
if (first_unmapped == blocks_per_page) {
if (!bdev_write_page(bdev, blocks[0] << (blkbits - 9),
- page, wbc))
+ &folio->page, wbc))
goto out;
}
bio = bio_alloc(bdev, BIO_MAX_VECS,
@@ -603,18 +600,18 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
* the confused fail path above (OOM) will be very confused when
* it finds all bh marked clean (i.e. it will not write anything)
*/
- wbc_account_cgroup_owner(wbc, page, PAGE_SIZE);
+ wbc_account_cgroup_owner(wbc, &folio->page, folio_size(folio));
length = first_unmapped << blkbits;
- if (bio_add_page(bio, page, length, 0) < length) {
+ if (!bio_add_folio(bio, folio, length, 0)) {
bio = mpage_bio_submit(bio);
goto alloc_new;
}
- clean_buffers(page, first_unmapped);
+ clean_buffers(&folio->page, first_unmapped);
- BUG_ON(PageWriteback(page));
- set_page_writeback(page);
- unlock_page(page);
+ BUG_ON(folio_test_writeback(folio));
+ folio_start_writeback(folio);
+ folio_unlock(folio);
if (boundary || (first_unmapped != blocks_per_page)) {
bio = mpage_bio_submit(bio);
if (boundary_block) {
@@ -633,7 +630,7 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
/*
* The caller has a ref on the inode, so *mapping is stable
*/
- ret = block_write_full_page(page, mpd->get_block, wbc);
+ ret = block_write_full_page(&folio->page, mpd->get_block, wbc);
mapping_set_error(mapping, ret);
out:
mpd->bio = bio;
--
2.35.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] mpage: Convert __mpage_writepage() to use a folio more fully
2023-01-26 20:12 ` [PATCH 2/2] mpage: Convert __mpage_writepage() to use a folio more fully Matthew Wilcox (Oracle)
@ 2023-01-26 22:59 ` Andrew Morton
2023-01-30 11:04 ` Alexander Egorenkov
1 sibling, 0 replies; 7+ messages in thread
From: Andrew Morton @ 2023-01-26 22:59 UTC (permalink / raw)
To: Matthew Wilcox (Oracle); +Cc: Christoph Hellwig, linux-fsdevel, linux-mm
On Thu, 26 Jan 2023 20:12:55 +0000 "Matthew Wilcox (Oracle)" <willy@infradead.org> wrote:
> This is just a conversion to the folio API. While there are some nods
> towards supporting multi-page folios in here, the blocks array is
> still sized for one page's worth of blocks, and there are other
> assumptions such as the blocks_per_page variable.
>
> ...
>
> @@ -588,7 +585,7 @@ static int __mpage_writepage(struct folio *folio, struct writeback_control *wbc,
> if (bio == NULL) {
> if (first_unmapped == blocks_per_page) {
> if (!bdev_write_page(bdev, blocks[0] << (blkbits - 9),
> - page, wbc))
> + &folio->page, wbc))
> goto out;
> }
> bio = bio_alloc(bdev, BIO_MAX_VECS,
>
hch removed this code in
https://lkml.kernel.org/r/20230125133436.447864-2-hch@lst.de, so I'll
drop this hunk.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] fs: Convert writepage_t callback to pass a folio
2023-01-26 20:12 ` [PATCH 1/2] fs: Convert writepage_t callback to pass " Matthew Wilcox (Oracle)
@ 2023-01-28 17:13 ` kernel test robot
2023-01-29 21:33 ` Andrew Morton
0 siblings, 1 reply; 7+ messages in thread
From: kernel test robot @ 2023-01-28 17:13 UTC (permalink / raw)
To: Matthew Wilcox (Oracle), Andrew Morton
Cc: oe-kbuild-all, Linux Memory Management List,
Matthew Wilcox (Oracle), Christoph Hellwig, linux-fsdevel
Hi Matthew,
I love your patch! Yet something to improve:
[auto build test ERROR on next-20230125]
[cannot apply to tytso-ext4/dev akpm-mm/mm-everything cifs/for-next mszeredi-fuse/for-next xfs-linux/for-next trondmy-nfs/linux-next hubcap/for-next linus/master v6.2-rc5 v6.2-rc4 v6.2-rc3 v6.2-rc5]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Matthew-Wilcox-Oracle/fs-Convert-writepage_t-callback-to-pass-a-folio/20230128-112951
patch link: https://lore.kernel.org/r/20230126201255.1681189-2-willy%40infradead.org
patch subject: [PATCH 1/2] fs: Convert writepage_t callback to pass a folio
config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20230129/202301290130.frg9YGk5-lkp@intel.com/config)
compiler: s390-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/19e834de445f5d3a390fff94320e71e8077ce632
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Matthew-Wilcox-Oracle/fs-Convert-writepage_t-callback-to-pass-a-folio/20230128-112951
git checkout 19e834de445f5d3a390fff94320e71e8077ce632
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=s390 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=s390 SHELL=/bin/bash fs/gfs2/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
fs/gfs2/log.c: In function 'gfs2_ail1_start_one':
>> fs/gfs2/log.c:143:55: error: passing argument 3 of 'write_cache_pages' from incompatible pointer type [-Werror=incompatible-pointer-types]
143 | ret = write_cache_pages(mapping, wbc, __gfs2_writepage, mapping);
| ^~~~~~~~~~~~~~~~
| |
| int (*)(struct page *, struct writeback_control *, void *)
In file included from fs/gfs2/log.c:20:
include/linux/writeback.h:375:66: note: expected 'writepage_t' {aka 'int (*)(struct folio *, struct writeback_control *, void *)'} but argument is of type 'int (*)(struct page *, struct writeback_control *, void *)'
375 | struct writeback_control *wbc, writepage_t writepage,
| ~~~~~~~~~~~~^~~~~~~~~
cc1: some warnings being treated as errors
vim +/write_cache_pages +143 fs/gfs2/log.c
95ecbd0f162fc0 Andreas Gruenbacher 2023-01-19 91
ddacfaf76dd620 Steven Whitehouse 2006-10-03 92 /**
c551f66c5dfefd Lee Jones 2021-03-30 93 * gfs2_ail1_start_one - Start I/O on a transaction
c551f66c5dfefd Lee Jones 2021-03-30 94 * @sdp: The superblock
4667a0ec328678 Steven Whitehouse 2011-04-18 95 * @wbc: The writeback control structure
c551f66c5dfefd Lee Jones 2021-03-30 96 * @tr: The transaction to start I/O on
c551f66c5dfefd Lee Jones 2021-03-30 97 * @plug: The block plug currently active
ddacfaf76dd620 Steven Whitehouse 2006-10-03 98 */
ddacfaf76dd620 Steven Whitehouse 2006-10-03 99
4f1de018215fb5 Steven Whitehouse 2011-04-26 100 static int gfs2_ail1_start_one(struct gfs2_sbd *sdp,
4667a0ec328678 Steven Whitehouse 2011-04-18 101 struct writeback_control *wbc,
17d77684088510 Bob Peterson 2021-02-18 102 struct gfs2_trans *tr, struct blk_plug *plug)
d6a079e82efd5f Dave Chinner 2011-03-11 103 __releases(&sdp->sd_ail_lock)
d6a079e82efd5f Dave Chinner 2011-03-11 104 __acquires(&sdp->sd_ail_lock)
ddacfaf76dd620 Steven Whitehouse 2006-10-03 105 {
5ac048bb7ea6e8 Steven Whitehouse 2011-03-30 106 struct gfs2_glock *gl = NULL;
4667a0ec328678 Steven Whitehouse 2011-04-18 107 struct address_space *mapping;
ddacfaf76dd620 Steven Whitehouse 2006-10-03 108 struct gfs2_bufdata *bd, *s;
ddacfaf76dd620 Steven Whitehouse 2006-10-03 109 struct buffer_head *bh;
b1676cbb11153b Bob Peterson 2019-11-13 110 int ret = 0;
ddacfaf76dd620 Steven Whitehouse 2006-10-03 111
16ca9412d80181 Benjamin Marzinski 2013-04-05 112 list_for_each_entry_safe_reverse(bd, s, &tr->tr_ail1_list, bd_ail_st_list) {
ddacfaf76dd620 Steven Whitehouse 2006-10-03 113 bh = bd->bd_bh;
ddacfaf76dd620 Steven Whitehouse 2006-10-03 114
16ca9412d80181 Benjamin Marzinski 2013-04-05 115 gfs2_assert(sdp, bd->bd_tr == tr);
ddacfaf76dd620 Steven Whitehouse 2006-10-03 116
ddacfaf76dd620 Steven Whitehouse 2006-10-03 117 if (!buffer_busy(bh)) {
30fe70a85a909a Bob Peterson 2019-11-13 118 if (buffer_uptodate(bh)) {
30fe70a85a909a Bob Peterson 2019-11-13 119 list_move(&bd->bd_ail_st_list,
30fe70a85a909a Bob Peterson 2019-11-13 120 &tr->tr_ail2_list);
30fe70a85a909a Bob Peterson 2019-11-13 121 continue;
30fe70a85a909a Bob Peterson 2019-11-13 122 }
036330c914365f Bob Peterson 2019-04-10 123 if (!cmpxchg(&sdp->sd_log_error, 0, -EIO)) {
ddacfaf76dd620 Steven Whitehouse 2006-10-03 124 gfs2_io_error_bh(sdp, bh);
69511080bd6efd Bob Peterson 2019-02-12 125 gfs2_withdraw_delayed(sdp);
9e1a9ecd13b9bb Andreas Gruenbacher 2018-06-07 126 }
ddacfaf76dd620 Steven Whitehouse 2006-10-03 127 }
ddacfaf76dd620 Steven Whitehouse 2006-10-03 128
30fe70a85a909a Bob Peterson 2019-11-13 129 if (gfs2_withdrawn(sdp)) {
30fe70a85a909a Bob Peterson 2019-11-13 130 gfs2_remove_from_ail(bd);
30fe70a85a909a Bob Peterson 2019-11-13 131 continue;
30fe70a85a909a Bob Peterson 2019-11-13 132 }
ddacfaf76dd620 Steven Whitehouse 2006-10-03 133 if (!buffer_dirty(bh))
ddacfaf76dd620 Steven Whitehouse 2006-10-03 134 continue;
5ac048bb7ea6e8 Steven Whitehouse 2011-03-30 135 if (gl == bd->bd_gl)
5ac048bb7ea6e8 Steven Whitehouse 2011-03-30 136 continue;
5ac048bb7ea6e8 Steven Whitehouse 2011-03-30 137 gl = bd->bd_gl;
16ca9412d80181 Benjamin Marzinski 2013-04-05 138 list_move(&bd->bd_ail_st_list, &tr->tr_ail1_list);
11551cf15ecc17 Matthew Wilcox (Oracle 2022-12-15 139) mapping = bh->b_folio->mapping;
4f1de018215fb5 Steven Whitehouse 2011-04-26 140 if (!mapping)
4f1de018215fb5 Steven Whitehouse 2011-04-26 141 continue;
d6a079e82efd5f Dave Chinner 2011-03-11 142 spin_unlock(&sdp->sd_ail_lock);
95ecbd0f162fc0 Andreas Gruenbacher 2023-01-19 @143 ret = write_cache_pages(mapping, wbc, __gfs2_writepage, mapping);
17d77684088510 Bob Peterson 2021-02-18 144 if (need_resched()) {
17d77684088510 Bob Peterson 2021-02-18 145 blk_finish_plug(plug);
17d77684088510 Bob Peterson 2021-02-18 146 cond_resched();
17d77684088510 Bob Peterson 2021-02-18 147 blk_start_plug(plug);
17d77684088510 Bob Peterson 2021-02-18 148 }
d6a079e82efd5f Dave Chinner 2011-03-11 149 spin_lock(&sdp->sd_ail_lock);
4e79e3f08e576a Bob Peterson 2020-11-12 150 if (ret == -ENODATA) /* if a jdata write into a new hole */
4e79e3f08e576a Bob Peterson 2020-11-12 151 ret = 0; /* ignore it */
b1676cbb11153b Bob Peterson 2019-11-13 152 if (ret || wbc->nr_to_write <= 0)
4667a0ec328678 Steven Whitehouse 2011-04-18 153 break;
b1676cbb11153b Bob Peterson 2019-11-13 154 return -EBUSY;
4667a0ec328678 Steven Whitehouse 2011-04-18 155 }
4f1de018215fb5 Steven Whitehouse 2011-04-26 156
b1676cbb11153b Bob Peterson 2019-11-13 157 return ret;
4667a0ec328678 Steven Whitehouse 2011-04-18 158 }
ddacfaf76dd620 Steven Whitehouse 2006-10-03 159
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] fs: Convert writepage_t callback to pass a folio
2023-01-28 17:13 ` kernel test robot
@ 2023-01-29 21:33 ` Andrew Morton
0 siblings, 0 replies; 7+ messages in thread
From: Andrew Morton @ 2023-01-29 21:33 UTC (permalink / raw)
To: kernel test robot
Cc: Matthew Wilcox (Oracle), oe-kbuild-all,
Linux Memory Management List, Christoph Hellwig, linux-fsdevel
On Sun, 29 Jan 2023 01:13:56 +0800 kernel test robot <lkp@intel.com> wrote:
> Hi Matthew,
>
> I love your patch! Yet something to improve:
>
> [auto build test ERROR on next-20230125]
> [cannot apply to tytso-ext4/dev akpm-mm/mm-everything cifs/for-next mszeredi-fuse/for-next xfs-linux/for-next trondmy-nfs/linux-next hubcap/for-next linus/master v6.2-rc5 v6.2-rc4 v6.2-rc3 v6.2-rc5]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Matthew-Wilcox-Oracle/fs-Convert-writepage_t-callback-to-pass-a-folio/20230128-112951
> patch link: https://lore.kernel.org/r/20230126201255.1681189-2-willy%40infradead.org
> patch subject: [PATCH 1/2] fs: Convert writepage_t callback to pass a folio
> config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20230129/202301290130.frg9YGk5-lkp@intel.com/config)
> compiler: s390-linux-gcc (GCC) 12.1.0
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # https://github.com/intel-lab-lkp/linux/commit/19e834de445f5d3a390fff94320e71e8077ce632
> git remote add linux-review https://github.com/intel-lab-lkp/linux
> git fetch --no-tags linux-review Matthew-Wilcox-Oracle/fs-Convert-writepage_t-callback-to-pass-a-folio/20230128-112951
> git checkout 19e834de445f5d3a390fff94320e71e8077ce632
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=s390 olddefconfig
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=s390 SHELL=/bin/bash fs/gfs2/
>
> If you fix the issue, kindly add following tag where applicable
> | Reported-by: kernel test robot <lkp@intel.com>
>
> All errors (new ones prefixed by >>):
>
> fs/gfs2/log.c: In function 'gfs2_ail1_start_one':
> >> fs/gfs2/log.c:143:55: error: passing argument 3 of 'write_cache_pages' from incompatible pointer type [-Werror=incompatible-pointer-types]
> 143 | ret = write_cache_pages(mapping, wbc, __gfs2_writepage, mapping);
> | ^~~~~~~~~~~~~~~~
Thanks. This is due to a conflict with a recent upstream merge from
the GFS tree. Stephen addressed this in linux-next:
https://lkml.kernel.org/r/20230127173638.1efbe423@canb.auug.org.au
a) I could rebase mm.git onto -rc5 or later.
b) Or I could disable Matthew's patches until late merge window,
after I resync with mainline for stragglers such as this.
c) Or I could do nothing - things will get sorted out once Matthew's
commits hit mainline during the regular merge.
Perhaps a)? People don't want to have to deal with conflicts when
merging current mm.git onto current mainline.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] mpage: Convert __mpage_writepage() to use a folio more fully
2023-01-26 20:12 ` [PATCH 2/2] mpage: Convert __mpage_writepage() to use a folio more fully Matthew Wilcox (Oracle)
2023-01-26 22:59 ` Andrew Morton
@ 2023-01-30 11:04 ` Alexander Egorenkov
1 sibling, 0 replies; 7+ messages in thread
From: Alexander Egorenkov @ 2023-01-30 11:04 UTC (permalink / raw)
To: willy; +Cc: akpm, hch, linux-fsdevel, linux-mm
Hi,
after this change we see a WARNING on s390 linux-next with LTP tests (writev03).
RELEASE: 6.2.0-20230129.rc5.git1.e2f86c02fdc9.300.fc37.s390x+next
[ 5577.900868] BTRFS: device fsid 4127fc5b-a6b3-44ff-927d-7bfc5163686e devid 1 transid 6 /dev/loop0 scanned by mkfs.btrfs (2502327)
[ 5577.901186] BTRFS info (device loop0): using crc32c (crc32c-vx) checksum algorithm
[ 5577.901192] BTRFS info (device loop0): using free space tree
[ 5577.901847] BTRFS info (device loop0): enabling ssd optimizations
[ 5577.901850] BTRFS info (device loop0): auto enabling async discard
[ 5577.901895] BTRFS info (device loop0): checking UUID tree
[ 5620.655695] ------------[ cut here ]------------
[ 5620.655702] WARNING: CPU: 6 PID: 2404385 at fs/mpage.c:570 __mpage_writepage+0x79c/0x7b0
[ 5620.655711] Modules linked in: xt_state(E) quota_v2(E) quota_tree(E) tun(E) nls_utf8(E) overlay(E) nls_iso8859_1(E) nls_cp437(E) ntfs(E) exfat(E) vfat(E) fat(E) loop(E) sctp(E) ip6_udp_tunnel(E) udp_tunnel(E) kunit(E) af_packet_diag(E) unix_diag(E) mptcp_diag(E) xfrm_user(E) xfrm_algo(E) crypto_user(E) tcp_diag(E) inet_diag(E) netlink_diag(E) algif_hash(E) af_alg(E) dm_service_time(E) nft_fib_inet(E) nft_fib_ipv4(E) nft_fib_ipv6(E) nft_fib(E) nft_reject_inet(E) nf_reject_ipv4(E) nf_reject_ipv6(E) nft_reject(E) nft_ct(E) nft_chain_nat(E) nf_nat(E) nf_conntrack(E) nf_defrag_ipv6(E) nf_defrag_ipv4(E) ip_set(E) nf_tables(E) nfnetlink(E) sunrpc(E) zfcp(E) scsi_transport_fc(E) s390_trng(E) vfio_ccw(E) mdev(E) vfio_iommu_type1(E) vfio(E) sch_fq_codel(E) ip6_tables(E) ip_tables(E) x_tables(E) configfs(E) ghash_s390(E) prng(E) chacha_s390(E) libchacha(E) aes_s390(E) des_s390(E) libdes(E) sha3_512_s390(E) sha3_256_s390(E) sha512_s390(E) sha256_s390(E) sha1_s390(E) sha_common(E) scsi_dh_rdac(E) scsi_dh_emc(E) scsi_dh_alua(E)
[ 5620.655763] pkey(E) zcrypt(E) rng_core(E) dm_multipath(E) autofs4(E)
[ 5620.655778] Unloaded tainted modules: init_module(OE):3 finit_module(OE):3 dummy_del_mod_dep(OE):1 dummy_del_mod(OE):2 test_unwind(E):1 test_modules(E):1 test_kprobes_s390(E):1 test_kprobes(E):1 klp_tc_17_livepatch(OEK):1 klp_tc_16_livepatch(OEK):1 klp_tc_15_livepatch(OEK):1 klp_tc_14_livepatch(OEK):1 klp_tc_13_livepatch(OEK):1 klp_tc_12_livepatch(OEK):1 klp_tc_11_livepatch(OEK):1 klp_test_support_mod(OE):8 klp_tc_10_livepatch(OEK):1 klp_tc_8_5_livepatch(OEK):1 klp_tc_8_4_livepatch(OEK):1 klp_tc_8_3_livepatch(OEK):1 klp_tc_8_2_livepatch(OEK):1 klp_tc_8_1_livepatch(OEK):1 klp_tc_6_livepatch(OEK):1 klp_tc_5_1_livepatch(OEK):1 klp_tc_5_2_livepatch(OEK):1 klp_tc_5_3_livepatch(OEK):1 klp_tc_5_4_livepatch(OEK):1 klp_tc_5_5_livepatch(OEK):1 klp_tc_5_6_livepatch(OEK):1 klp_tc_5_7_livepatch(OEK):1 klp_tc_5_8_livepatch(OEK):1 klp_tc_5_9_livepatch(OEK):1 klp_tc_5_10_livepatch(OEK):1 klp_tc_5_11_livepatch(OEK):1 klp_tc_5_12_livepatch(OEK):1 klp_tc_5_13_livepatch(OEK):1 klp_tc_5_14_livepatch(OEK):1 klp_tc_5_15_livepatch(OEK):1
[ 5620.655806] klp_tc_3_livepatch(OEK):1 [last unloaded: init_module(OE)]
[ 5620.655815] CPU: 6 PID: 2404385 Comm: kworker/u128:8 Tainted: G OE K N 6.2.0-20230129.rc5.git1.e2f86c02fdc9.300.fc37.s390x+next #1
[ 5620.655818] Hardware name: IBM 3931 A01 704 (z/VM 7.3.0)
[ 5620.655820] Workqueue: writeback wb_workfn (flush-7:0)
[ 5620.655861] Krnl PSW : 0704c00180000000 0000000077704118 (__mpage_writepage+0x7a0/0x7b0)
[ 5620.655866] R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:0 PM:0 RI:0 EA:3
[ 5620.655869] Krnl GPRS: 0000000000000000 0000000000001000 0000000000000000 0000000000000000
[ 5620.655872] 0000038000000001 00000001ce688000 0000000000000000 0000037200000009
[ 5620.655874] 00000380004cb970 0000000000000000 0000038000000001 0000037203a01d80
[ 5620.655877] 00000000855f2100 0000000000000000 0000000000000000 00000380004cb660
[ 5620.655885] Krnl Code: 000000007770410c: a7181000 lhi %r1,4096
0000000077704110: a7f4fe34 brc 15,0000000077703d78
#0000000077704114: af000000 mc 0,0
>0000000077704118: a7f4fccc brc 15,0000000077703ab0
000000007770411c: af000000 mc 0,0
0000000077704120: d70010001000 xc 0(1,%r1),0(%r1)
0000000077704126: 0707 bcr 0,%r7
0000000077704128: c00400497b2c brcl 0,0000000078033780
[ 5620.655905] Call Trace:
[ 5620.655907] [<0000000077704118>] __mpage_writepage+0x7a0/0x7b0
[ 5620.655911] [<00000000775c9df0>] write_cache_pages+0x1b0/0x418
[ 5620.655916] [<0000000077703824>] mpage_writepages+0x64/0xb0
[ 5620.655918] [<00000000775cb416>] do_writepages+0x66/0x1d0
[ 5620.655921] [<00000000776ee14c>] __writeback_single_inode+0x4c/0x410
[ 5620.655925] [<00000000776eea2a>] writeback_sb_inodes+0x232/0x5a0
[ 5620.655928] [<00000000776eedf2>] __writeback_inodes_wb+0x5a/0x138
[ 5620.655931] [<00000000776ef140>] wb_writeback+0x270/0x3a0
[ 5620.655934] [<00000000776f04e0>] wb_workfn+0x370/0x5b8
[ 5620.655936] [<00000000773daab8>] process_one_work+0x200/0x458
[ 5620.655940] [<00000000773db246>] worker_thread+0x66/0x490
[ 5620.655942] [<00000000773e4098>] kthread+0x108/0x110
[ 5620.655944] [<000000007736736c>] __ret_from_fork+0x3c/0x58
[ 5620.655947] [<0000000077fecb6a>] ret_from_fork+0xa/0x40
[ 5620.655952] Last Breaking-Event-Address:
[ 5620.655953] [<0000000077703d2e>] __mpage_writepage+0x3b6/0x7b0
[ 5620.655956] Kernel panic - not syncing: kernel: panic_on_warn set ...
[ 5620.655958] CPU: 6 PID: 2404385 Comm: kworker/u128:8 Tainted: G OE K N 6.2.0-20230129.rc5.git1.e2f86c02fdc9.300.fc37.s390x+next #1
[ 5620.655961] Hardware name: IBM 3931 A01 704 (z/VM 7.3.0)
[ 5620.655962] Workqueue: writeback wb_workfn (flush-7:0)
[ 5620.655965] Call Trace:
[ 5620.655966] [<0000000077fdd01a>] dump_stack_lvl+0x62/0x80
[ 5620.655970] [<0000000077fcb658>] panic+0x118/0x300
[ 5620.655973] [<00000000773b5d80>] check_panic_on_warn+0x70/0x88
[ 5620.655977] [<00000000773b6028>] __warn+0x108/0x150
[ 5620.655979] [<0000000077fa06da>] report_bug+0xba/0x140
[ 5620.655983] [<00000000773651a4>] monitor_event_exception+0x44/0x80
[ 5620.655985] [<0000000077fdd218>] __do_pgm_check+0xf0/0x1b0
[ 5620.655988] [<0000000077feccbc>] pgm_check_handler+0x11c/0x170
[ 5620.655991] [<0000000077704118>] __mpage_writepage+0x7a0/0x7b0
[ 5620.655993] [<00000000775c9df0>] write_cache_pages+0x1b0/0x418
[ 5620.655995] [<0000000077703824>] mpage_writepages+0x64/0xb0
[ 5620.655998] [<00000000775cb416>] do_writepages+0x66/0x1d0
[ 5620.656000] [<00000000776ee14c>] __writeback_single_inode+0x4c/0x410
[ 5620.656003] [<00000000776eea2a>] writeback_sb_inodes+0x232/0x5a0
[ 5620.656006] [<00000000776eedf2>] __writeback_inodes_wb+0x5a/0x138
[ 5620.656010] [<00000000776ef140>] wb_writeback+0x270/0x3a0
[ 5620.656012] [<00000000776f04e0>] wb_workfn+0x370/0x5b8
[ 5620.656014] [<00000000773daab8>] process_one_work+0x200/0x458
[ 5620.656016] [<00000000773db246>] worker_thread+0x66/0x490
[ 5620.656019] [<00000000773e4098>] kthread+0x108/0x110
[ 5620.656020] [<000000007736736c>] __ret_from_fork+0x3c/0x58
[ 5620.656023] [<0000000077fecb6a>] ret_from_fork+0xa/0x40
crash> q
Regards
Alex
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-01-30 11:05 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-26 20:12 [PATCH 0/2] Convert writepage_t to use a folio Matthew Wilcox (Oracle)
2023-01-26 20:12 ` [PATCH 1/2] fs: Convert writepage_t callback to pass " Matthew Wilcox (Oracle)
2023-01-28 17:13 ` kernel test robot
2023-01-29 21:33 ` Andrew Morton
2023-01-26 20:12 ` [PATCH 2/2] mpage: Convert __mpage_writepage() to use a folio more fully Matthew Wilcox (Oracle)
2023-01-26 22:59 ` Andrew Morton
2023-01-30 11:04 ` Alexander Egorenkov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).