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 744fa3c..7cc1c85 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 a869fb4..8b0ee51 100644 (file)
@@ -38,6 +38,7 @@ struct metapage {
 
        /* implementation */
        struct page *page;
+       struct super_block *sb;
        unsigned int logical_size;
 
        /* Journal management */