JFS: do not ignore return code from write_one_page()
authorDave Kleikamp <dave.kleikamp@oracle.com>
Wed, 5 Jul 2017 19:26:49 +0000 (15:26 -0400)
committerJeff Layton <jlayton@redhat.com>
Wed, 5 Jul 2017 22:44:22 +0000 (18:44 -0400)
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 <dave.kleikamp@oracle.com>
Cc: Jeff Layton <jlayton@redhat.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Matthew Wilcox <mawilcox@microsoft.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
fs/jfs/jfs_metapage.c
fs/jfs/jfs_metapage.h

index 744fa3c079e69823ec5ae526ab72ab93a80a4859..7cc1c85f4508fb9626bdfe94a66ca73773a46d82 100644 (file)
@@ -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 */
index a869fb4a20d66d160ea9e10468d081ec79495114..8b0ee514eb84933c6bb6b233449cfb54ec940954 100644 (file)
@@ -38,6 +38,7 @@ struct metapage {
 
        /* implementation */
        struct page *page;
+       struct super_block *sb;
        unsigned int logical_size;
 
        /* Journal management */