From: Dave Kleikamp <shaggy@austin.ibm.com>
To: blp@cs.stanford.edu
Cc: JFS Discussion <jfs-discussion@lists.sourceforge.net>,
linux-kernel <linux-kernel@vger.kernel.org>,
mc@cs.stanford.edu
Subject: Re: [CHECKER] writes not always synchronous on JFS with O_SYNC?
Date: Tue, 22 Mar 2005 13:41:11 -0600 [thread overview]
Message-ID: <1111520471.8082.9.camel@localhost> (raw)
In-Reply-To: <1111498992.8107.5.camel@localhost>
[-- Attachment #1: Type: text/plain, Size: 1296 bytes --]
On Tue, 2005-03-22 at 07:43 -0600, Dave Kleikamp wrote:
> On Mon, 2005-03-21 at 13:10 -0800, Ben Pfaff wrote:
> > Hi. We've been running some tests on JFS and other file systems
> > and believe we've found an issue whereby O_SYNC does not always
> > cause data to be committed synchronously. On Linux 2.6.11, we
> > found that the program appended below causes
> > /mnt/sbd0/0006/0010/0029/0033 to contain all zeros, despite the
> > use of O_SYNC on the write calls and the fsyncs on the
> > directories. It seems to be pretty sensitive to the existence of
> > the rmdir calls: if I omit one of them, the data does get
> > written.
The problem is in the journal-replay code and it is triggered by the
reuse of a directory inode by a regular file inode, so reproducing the
bug requires the journal containing both changes to the inode as a
directory and then as a file.
This patch to jfs_fsck fixes the problem. It wasn't really an issue
with O_SYNC at all, although I believe there are O_SYNC issues that need
to be resolved. The data itself should be sync'd correctly, as
generic_file_write checks for the O_SYNC flag. The missing piece in jfs
is that metadata changes to the inode may not always be making it to the
disk when they should.
--
David Kleikamp
IBM Linux Technology Center
[-- Attachment #2: fsck-logredo.patch --]
[-- Type: text/x-patch, Size: 1298 bytes --]
Index: jfsutils/libfs/log_work.c
===================================================================
RCS file: /cvsroot/jfs/jfsutils/libfs/log_work.c,v
retrieving revision 1.21
diff -u -p -r1.21 log_work.c
--- jfsutils/libfs/log_work.c 15 Dec 2004 15:53:45 -0000 1.21
+++ jfsutils/libfs/log_work.c 22 Mar 2005 19:23:17 -0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) International Business Machines Corp., 2000-2002
+ * Copyright (C) International Business Machines Corp., 2000-2005
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -2758,6 +2758,11 @@ int updatePage(struct lrd *ld, int32_t l
off += 1;
data += linesize;
seglen -= linesize;
+ /*
+ * i_data overlaps btroot.
+ * Strip of 32 bytes
+ */
+ seglen -= 32;
} else if (db->db_idata & mask_8) {
/* Only update ibase */
db->db_ibase |= mask_8;
@@ -2766,6 +2771,11 @@ int updatePage(struct lrd *ld, int32_t l
/* update both */
db->db_ibase |= mask_8;
db->db_idata |= mask_8;
+ /*
+ * i_data overlaps btroot.
+ * Strip of 32 bytes
+ */
+ seglen -= 32;
}
}
} else if (ino_rem == 1) { /* inline data */
next prev parent reply other threads:[~2005-03-22 19:42 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-03-21 21:10 [CHECKER] writes not always synchronous on JFS with O_SYNC? Ben Pfaff
2005-03-22 13:43 ` Dave Kleikamp
2005-03-22 19:41 ` Dave Kleikamp [this message]
2005-03-22 19:47 ` Ben Pfaff
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=1111520471.8082.9.camel@localhost \
--to=shaggy@austin.ibm.com \
--cc=blp@cs.stanford.edu \
--cc=jfs-discussion@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mc@cs.stanford.edu \
/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.