From 11ab83190828cb7b2cbb26467f2eecf74f0214c3 Mon Sep 17 00:00:00 2001 From: Dave Kleikamp Date: Wed, 5 Jul 2017 15:26:49 -0400 Subject: JFS: do not ignore return code from write_one_page() There are a couple places where jfs calls write_one_page() where clean recovery is not possible. In these cases, the file system should be marked dirty. To do this, it is now necessary to store the superblock in the metapage structure. Link: http://lkml.kernel.org/r/db45ab67-55c7-08ff-6776-f76b3bf5cbf5@oracle.com Signed-off-by: Dave Kleikamp Cc: Jeff Layton Cc: Ross Zwisler Cc: Jan Kara Cc: Matthew Wilcox Cc: Christoph Hellwig Cc: Stephen Rothwell Signed-off-by: Andrew Morton Signed-off-by: Jeff Layton --- fs/jfs/jfs_metapage.c | 7 +++++-- fs/jfs/jfs_metapage.h | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'fs/jfs') diff --git a/fs/jfs/jfs_metapage.c b/fs/jfs/jfs_metapage.c index 744fa3c..7cc1c85 100644 --- a/fs/jfs/jfs_metapage.c +++ b/fs/jfs/jfs_metapage.c @@ -664,6 +664,7 @@ struct metapage *__get_metapage(struct inode *inode, unsigned long lblock, INCREMENT(mpStat.pagealloc); mp = alloc_metapage(GFP_NOFS); mp->page = page; + mp->sb = inode->i_sb; mp->flag = 0; mp->xflag = COMMIT_PAGE; mp->count = 1; @@ -711,7 +712,8 @@ void force_metapage(struct metapage *mp) get_page(page); lock_page(page); set_page_dirty(page); - write_one_page(page); + if (write_one_page(page)) + jfs_error(mp->sb, "write_one_page() failed\n"); clear_bit(META_forcewrite, &mp->flag); put_page(page); } @@ -756,7 +758,8 @@ void release_metapage(struct metapage * mp) set_page_dirty(page); if (test_bit(META_sync, &mp->flag)) { clear_bit(META_sync, &mp->flag); - write_one_page(page); + if (write_one_page(page)) + jfs_error(mp->sb, "write_one_page() failed\n"); lock_page(page); /* write_one_page unlocks the page */ } } else if (mp->lsn) /* discard_metapage doesn't remove it */ diff --git a/fs/jfs/jfs_metapage.h b/fs/jfs/jfs_metapage.h index a869fb4..8b0ee51 100644 --- a/fs/jfs/jfs_metapage.h +++ b/fs/jfs/jfs_metapage.h @@ -38,6 +38,7 @@ struct metapage { /* implementation */ struct page *page; + struct super_block *sb; unsigned int logical_size; /* Journal management */ -- cgit v1.1