All of lore.kernel.org
 help / color / mirror / Atom feed
From: Trond Myklebust <trond.myklebust@fys.uio.no>
To: Aaron Straus <aaron-bYFJunmd+ZV8UrSeD/g0lQ@public.gmane.org>
Cc: Hans-Peter Jansen <hpj-2x7n3sizJbFeoWH0uzbU5w@public.gmane.org>,
	linux-kernel@vger.kernel.org,
	Chuck Lever <chuck.lever@oracle.com>, Neil Brown <neilb@suse.de>,
	Linux NFS Mailing List <linux-nfs@vger.kernel.org>
Subject: Re: [NFS] blocks of zeros (NULLs) in NFS files in kernels >= 2.6.20
Date: Mon, 22 Sep 2008 13:29:01 -0400	[thread overview]
Message-ID: <1222104541.7615.23.camel@localhost> (raw)
In-Reply-To: <20080922170414.GC12483-bYFJunmd+ZV8UrSeD/g0lQ@public.gmane.org>

[-- Attachment #1: Type: text/plain, Size: 1122 bytes --]

On Mon, 2008-09-22 at 10:04 -0700, Aaron Straus wrote:
> Here is the crux.  It was possible previously but unlikely e.g. our app
> never saw this behavior.  The new writeout semantics causes visible
> holes in files often.
> 
> Anyway, I agree the new writeout semantics are allowed and possibly
> saner than the previous writeout path.  The problem is that it is
> __annoying__ for this use case (log files).

There is always the option of using syslog.

> I'm not sure if there is an easy solution.  We want the VM to writeout
> the address space in order.   Maybe we can start the scan for dirty
> pages at the last page we wrote out i.e. page 0 in the example above?

You can never guarantee that in a multi-threaded environment.

Two threads may, for instance, force 2 competing fsync() calls: that
again may cause out-of-order writes.
...and even if the client doesn't reorder the writes, the _server_ may
do it, since multiple nfsd threads may race when processing writes to
the same file.

Anyway, the patch to force a single threaded nfs client to write out the
data in order is trivial. See attachment...

Trond

[-- Attachment #2: linux-2.6.27-ordered_writes.dif --]
[-- Type: message/rfc822, Size: 749 bytes --]

From: Trond Myklebust <Trond.Myklebust@netapp.com>
Subject: No Subject
Date: 
Message-ID: <1222104509.7615.22.camel@localhost>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
---

 fs/nfs/write.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 3229e21..eb6b211 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -1428,7 +1428,8 @@ static int nfs_write_mapping(struct address_space *mapping, int how)
 		.sync_mode = WB_SYNC_NONE,
 		.nr_to_write = LONG_MAX,
 		.for_writepages = 1,
-		.range_cyclic = 1,
+		.range_start = 0,
+		.range_end = LLONG_MAX,
 	};
 	int ret;
 

WARNING: multiple messages have this Message-ID (diff)
From: Trond Myklebust <trond.myklebust@fys.uio.no>
To: Aaron Straus <aaron@merfinllc.com>
Cc: Hans-Peter Jansen <hpj@urpla.net>,
	linux-kernel@vger.kernel.org,
	Chuck Lever <chuck.lever@oracle.com>, Neil Brown <neilb@suse.de>,
	Linux NFS Mailing List <linux-nfs@vger.kernel.org>
Subject: Re: [NFS] blocks of zeros (NULLs) in NFS files in kernels >= 2.6.20
Date: Mon, 22 Sep 2008 13:29:01 -0400	[thread overview]
Message-ID: <1222104541.7615.23.camel@localhost> (raw)
In-Reply-To: <20080922170414.GC12483@merfinllc.com>

[-- Attachment #1: Type: text/plain, Size: 1122 bytes --]

On Mon, 2008-09-22 at 10:04 -0700, Aaron Straus wrote:
> Here is the crux.  It was possible previously but unlikely e.g. our app
> never saw this behavior.  The new writeout semantics causes visible
> holes in files often.
> 
> Anyway, I agree the new writeout semantics are allowed and possibly
> saner than the previous writeout path.  The problem is that it is
> __annoying__ for this use case (log files).

There is always the option of using syslog.

> I'm not sure if there is an easy solution.  We want the VM to writeout
> the address space in order.   Maybe we can start the scan for dirty
> pages at the last page we wrote out i.e. page 0 in the example above?

You can never guarantee that in a multi-threaded environment.

Two threads may, for instance, force 2 competing fsync() calls: that
again may cause out-of-order writes.
...and even if the client doesn't reorder the writes, the _server_ may
do it, since multiple nfsd threads may race when processing writes to
the same file.

Anyway, the patch to force a single threaded nfs client to write out the
data in order is trivial. See attachment...

Trond

[-- Attachment #2: linux-2.6.27-ordered_writes.dif --]
[-- Type: message/rfc822, Size: 749 bytes --]

From: Trond Myklebust <Trond.Myklebust@netapp.com>
Subject: No Subject
Date: 
Message-ID: <1222104509.7615.22.camel@localhost>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
---

 fs/nfs/write.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 3229e21..eb6b211 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -1428,7 +1428,8 @@ static int nfs_write_mapping(struct address_space *mapping, int how)
 		.sync_mode = WB_SYNC_NONE,
 		.nr_to_write = LONG_MAX,
 		.for_writepages = 1,
-		.range_cyclic = 1,
+		.range_start = 0,
+		.range_end = LLONG_MAX,
 	};
 	int ret;
 

  parent reply	other threads:[~2008-09-22 17:29 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-05 19:19 [NFS] blocks of zeros (NULLs) in NFS files in kernels >= 2.6.20 Aaron Straus
2008-09-05 19:19 ` Aaron Straus
     [not found] ` <20080905191939.GG22796-bYFJunmd+ZV8UrSeD/g0lQ@public.gmane.org>
2008-09-05 19:56   ` [NFS] " Chuck Lever
2008-09-05 19:56     ` Chuck Lever
2008-09-05 20:04     ` Aaron Straus
2008-09-05 20:36       ` Bernd Eckenfels
     [not found]       ` <20080905200455.GH22796-bYFJunmd+ZV8UrSeD/g0lQ@public.gmane.org>
2008-09-05 20:36         ` Chuck Lever
2008-09-05 20:36           ` Chuck Lever
2008-09-05 22:14           ` Aaron Straus
2008-09-05 22:14             ` Aaron Straus
2008-09-06  0:03     ` Aaron Straus
2008-09-06  0:03       ` Aaron Straus
2008-09-08 19:02     ` Aaron Straus
2008-09-08 19:02       ` Aaron Straus
     [not found]       ` <20080908190212.GF28123-bYFJunmd+ZV8UrSeD/g0lQ@public.gmane.org>
2008-09-08 21:15         ` Chuck Lever
2008-09-08 21:15           ` Chuck Lever
     [not found]           ` <76bd70e30809081415h6b55a8dfl8171634c576ac946-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-09-08 22:02             ` Aaron Straus
2008-09-08 22:02               ` Aaron Straus
2008-09-09 19:46             ` Aaron Straus
2008-09-09 19:46               ` Aaron Straus
     [not found]               ` <20080909194644.GI5290-bYFJunmd+ZV8UrSeD/g0lQ@public.gmane.org>
2008-09-11 16:55                 ` Chuck Lever
2008-09-11 16:55                   ` Chuck Lever
2008-09-11 17:19                   ` Aaron Straus
2008-09-11 17:19                     ` Aaron Straus
     [not found]                     ` <20080911171908.GE12037-bYFJunmd+ZV8UrSeD/g0lQ@public.gmane.org>
2008-09-11 17:48                       ` Chuck Lever
2008-09-11 17:48                         ` Chuck Lever
2008-09-11 18:49                         ` Aaron Straus
2008-09-11 18:49                           ` Aaron Straus
     [not found]                           ` <20080911184951.GB19054-bYFJunmd+ZV8UrSeD/g0lQ@public.gmane.org>
2008-09-22 16:05                             ` Hans-Peter Jansen
2008-09-22 16:05                               ` Hans-Peter Jansen
     [not found]                               ` <200809221805.48463.hpj-2x7n3sizJbFeoWH0uzbU5w@public.gmane.org>
2008-09-22 16:35                                 ` Trond Myklebust
2008-09-22 16:35                                   ` Trond Myklebust
2008-09-22 17:04                                   ` Aaron Straus
2008-09-22 17:04                                     ` Aaron Straus
     [not found]                                     ` <20080922170414.GC12483-bYFJunmd+ZV8UrSeD/g0lQ@public.gmane.org>
2008-09-22 17:26                                       ` Chuck Lever
2008-09-22 17:26                                         ` Chuck Lever
     [not found]                                         ` <76bd70e30809221026g7bde774pbffa35881682ea4b-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-09-22 17:37                                           ` Aaron Straus
2008-09-22 17:37                                             ` Aaron Straus
2008-09-22 17:29                                       ` Trond Myklebust [this message]
2008-09-22 17:29                                         ` Trond Myklebust
2008-09-22 17:45                                         ` Aaron Straus
2008-09-22 17:45                                           ` Aaron Straus
     [not found]                                           ` <20080922174525.GF12483-bYFJunmd+ZV8UrSeD/g0lQ@public.gmane.org>
2008-09-22 18:43                                             ` Aaron Straus
2008-09-22 18:43                                               ` Aaron Straus
2008-09-22 18:45                                             ` Hans-Peter Jansen
2008-09-22 18:45                                               ` Hans-Peter Jansen
2008-09-22 18:45                                   ` Hans-Peter Jansen
2008-09-22 18:45                                     ` Hans-Peter Jansen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1222104541.7615.23.camel@localhost \
    --to=trond.myklebust@fys.uio.no \
    --cc=aaron-bYFJunmd+ZV8UrSeD/g0lQ@public.gmane.org \
    --cc=chuck.lever@oracle.com \
    --cc=hpj-2x7n3sizJbFeoWH0uzbU5w@public.gmane.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=neilb@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.