mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-18 10:34:24 +08:00
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 <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>
This commit is contained in:
parent
2b69c8280c
commit
11ab831908
@ -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 */
|
||||
|
@ -38,6 +38,7 @@ struct metapage {
|
||||
|
||||
/* implementation */
|
||||
struct page *page;
|
||||
struct super_block *sb;
|
||||
unsigned int logical_size;
|
||||
|
||||
/* Journal management */
|
||||
|
Loading…
Reference in New Issue
Block a user