Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33198c16 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull Writeback error handling fixes from Jeff Layton:
 "The main rationale for all of these changes is to tighten up writeback
  error reporting to userland. There are many ways now that writeback
  errors can be lost, such that fsync/fdatasync/msync return 0 when
  writeback actually failed.

  This pile contains a small set of cleanups and writeback error
  handling fixes that I was able to break off from the main pile (#2).

  Two of the patches in this pile are trivial. The exceptions are the
  patch to fix up error handling in write_one_page, and the patch to
  make JFS pay attention to write_one_page errors"

* tag 'for-linus-v4.13-1' of git://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux:
  fs: remove call_fsync helper function
  mm: clean up error handling in write_one_page
  JFS: do not ignore return code from write_one_page()
  mm: drop "wait" parameter from write_one_page()
parents 3ea4fcc5 0f41074a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ static int exofs_commit_chunk(struct page *page, loff_t pos, unsigned len)
	set_page_dirty(page);

	if (IS_DIRSYNC(dir))
		err = write_one_page(page, 1);
		err = write_one_page(page);
	else
		unlock_page(page);

+1 −1
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ static int ext2_commit_chunk(struct page *page, loff_t pos, unsigned len)
	}

	if (IS_DIRSYNC(dir)) {
		err = write_one_page(page, 1);
		err = write_one_page(page);
		if (!err)
			err = sync_inode_metadata(dir, 1);
	} else {
+5 −2
Original line number Diff line number Diff line
@@ -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, 1);
	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, 1);
			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 */
+1 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ struct metapage {

	/* implementation */
	struct page *page;
	struct super_block *sb;
	unsigned int logical_size;

	/* Journal management */
+1 −1
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ static int dir_commit_chunk(struct page *page, loff_t pos, unsigned len)
		mark_inode_dirty(dir);
	}
	if (IS_DIRSYNC(dir))
		err = write_one_page(page, 1);
		err = write_one_page(page);
	else
		unlock_page(page);
	return err;
Loading