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

Commit 6b56a898 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFS: Kill NFS_INO_NFS_INO_FLUSHING: it is a performance killer



filemap_datawrite() and friends already deal just fine with livelock.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent ca0daa27
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -359,14 +359,6 @@ static int nfs_write_begin(struct file *file, struct address_space *mapping,
		file, mapping->host->i_ino, len, (long long) pos);

start:
	/*
	 * Prevent starvation issues if someone is doing a consistency
	 * sync-to-disk
	 */
	ret = wait_on_bit_action(&NFS_I(mapping->host)->flags, NFS_INO_FLUSHING,
				 nfs_wait_bit_killable, TASK_KILLABLE);
	if (ret)
		return ret;
	/*
	 * Wait for O_DIRECT to complete
	 */
+0 −1
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@
			{ 1 << NFS_INO_ADVISE_RDPLUS, "ADVISE_RDPLUS" }, \
			{ 1 << NFS_INO_STALE, "STALE" }, \
			{ 1 << NFS_INO_INVALIDATING, "INVALIDATING" }, \
			{ 1 << NFS_INO_FLUSHING, "FLUSHING" }, \
			{ 1 << NFS_INO_FSCACHE, "FSCACHE" }, \
			{ 1 << NFS_INO_LAYOUTCOMMIT, "NEED_LAYOUTCOMMIT" }, \
			{ 1 << NFS_INO_LAYOUTCOMMITTING, "LAYOUTCOMMIT" })
+0 −11
Original line number Diff line number Diff line
@@ -657,16 +657,9 @@ static int nfs_writepages_callback(struct page *page, struct writeback_control *
int nfs_writepages(struct address_space *mapping, struct writeback_control *wbc)
{
	struct inode *inode = mapping->host;
	unsigned long *bitlock = &NFS_I(inode)->flags;
	struct nfs_pageio_descriptor pgio;
	int err;

	/* Stop dirtying of new pages while we sync */
	err = wait_on_bit_lock_action(bitlock, NFS_INO_FLUSHING,
			nfs_wait_bit_killable, TASK_KILLABLE);
	if (err)
		goto out_err;

	nfs_inc_stats(inode, NFSIOS_VFSWRITEPAGES);

	nfs_pageio_init_write(&pgio, inode, wb_priority(wbc), false,
@@ -674,10 +667,6 @@ int nfs_writepages(struct address_space *mapping, struct writeback_control *wbc)
	err = write_cache_pages(mapping, wbc, nfs_writepages_callback, &pgio);
	nfs_pageio_complete(&pgio);

	clear_bit_unlock(NFS_INO_FLUSHING, bitlock);
	smp_mb__after_atomic();
	wake_up_bit(bitlock, NFS_INO_FLUSHING);

	if (err < 0)
		goto out_err;
	err = pgio.pg_error;
+0 −1
Original line number Diff line number Diff line
@@ -205,7 +205,6 @@ struct nfs_inode {
#define NFS_INO_STALE		(1)		/* possible stale inode */
#define NFS_INO_ACL_LRU_SET	(2)		/* Inode is on the LRU list */
#define NFS_INO_INVALIDATING	(3)		/* inode is being invalidated */
#define NFS_INO_FLUSHING	(4)		/* inode is flushing out data */
#define NFS_INO_FSCACHE		(5)		/* inode can be cached by FS-Cache */
#define NFS_INO_FSCACHE_LOCK	(6)		/* FS-Cache cookie management lock */
#define NFS_INO_LAYOUTCOMMIT	(9)		/* layoutcommit required */