public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ensure file size is logged on synchronous writes
@ 2007-09-03  3:07 Lachlan McIlroy
  2007-09-10 15:07 ` Christoph Hellwig
  0 siblings, 1 reply; 2+ messages in thread
From: Lachlan McIlroy @ 2007-09-03  3:07 UTC (permalink / raw)
  To: xfs-dev; +Cc: xfs-oss

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

Synchronous writes currently log inode changes before syncing
pages to disk.  Since the file size is updated on I/O completion
we wont be writing out the updated file size and if we crash the
file will have the wrong size.  This change moves the logging
after the syncing of the pages to ensure we log the correct file
size.

Lachlan

[-- Attachment #2: xfs_write.diff --]
[-- Type: text/x-patch, Size: 815 bytes --]

--- fs/xfs/linux-2.6/xfs_lrw.c_1.266	2007-08-30 17:38:53.000000000 +1000
+++ fs/xfs/linux-2.6/xfs_lrw.c	2007-08-31 15:38:49.000000000 +1000
@@ -895,20 +895,19 @@ retry:
 
 	/* Handle various SYNC-type writes */
 	if ((file->f_flags & O_SYNC) || IS_SYNC(inode)) {
-		error = xfs_write_sync_logforce(mp, xip);
-		if (error)
-			goto out_unlock_internal;
-
+		int error2;
 		xfs_rwunlock(xip, locktype);
 		if (need_i_mutex)
 			mutex_unlock(&inode->i_mutex);
-
-		error = sync_page_range(inode, mapping, pos, ret);
+		error2 = sync_page_range(inode, mapping, pos, ret);
 		if (!error)
-			error = -ret;
+			error = error2;
 		if (need_i_mutex)
 			mutex_lock(&inode->i_mutex);
 		xfs_rwlock(xip, locktype);
+		error2 = xfs_write_sync_logforce(mp, xip);
+		if (!error)
+			error = error2;
 	}
 
  out_unlock_internal:

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] ensure file size is logged on synchronous writes
  2007-09-03  3:07 [PATCH] ensure file size is logged on synchronous writes Lachlan McIlroy
@ 2007-09-10 15:07 ` Christoph Hellwig
  0 siblings, 0 replies; 2+ messages in thread
From: Christoph Hellwig @ 2007-09-10 15:07 UTC (permalink / raw)
  To: Lachlan McIlroy; +Cc: xfs-dev, xfs-oss

On Mon, Sep 03, 2007 at 01:07:12PM +1000, Lachlan McIlroy wrote:
> Synchronous writes currently log inode changes before syncing
> pages to disk.  Since the file size is updated on I/O completion
> we wont be writing out the updated file size and if we crash the
> file will have the wrong size.  This change moves the logging
> after the syncing of the pages to ensure we log the correct file
> size.

Looks good to me.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-09-10 15:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-03  3:07 [PATCH] ensure file size is logged on synchronous writes Lachlan McIlroy
2007-09-10 15:07 ` Christoph Hellwig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox