NFS: Kill NFS_INO_NFS_INO_FLUSHING: it is a performance killer
authorTrond Myklebust <trond.myklebust@primarydata.com>
Wed, 1 Jun 2016 22:23:01 +0000 (18:23 -0400)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Wed, 22 Jun 2016 13:59:42 +0000 (09:59 -0400)
filemap_datawrite() and friends already deal just fine with livelock.

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/file.c
fs/nfs/nfstrace.h
fs/nfs/write.c
include/linux/nfs_fs.h

index 2d39d9f9da7df2e34e140e8d2cf32ebc506b0dae..29d7477a62e890dde65a26cafda648b2e54c5ce4 100644 (file)
@@ -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
         */
index 0b9e5cc9a74705f3cade3c431b479eaa6e01e08c..fe80a1c26340f3c24b4bbc06292e3e5e77af4b79 100644 (file)
@@ -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" })
index e1c74d3db64de48851c0d758ade6df2741da9d30..980d44f3a84cdd50dd5c50ba93ad60ded7879999 100644 (file)
@@ -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;
index d71278c3c5bdda030e3edbc03946a1b4282cd8ad..120dd04b553ca7462b76ed2a5bc71ae74cd84ef2 100644 (file)
@@ -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 */