| From | Subject | Date |
|---|---|---|
| Chris Mason | Correct behavior on O_DIRECT sparse file writes
Hello everyone,
The test below creates a sparse file and then fills a hole with
O_DIRECT. As far as I can tell from reading generic_osync_inode, the
filesystem metadata is only forced to disk if i_size changes during the
file write. I've tested ext3, xfs and reiserfs and they all skip the
commit when filling holes.
I would argue that filling holes via O_DIRECT is supposed to commit the
metadata required to find those file blocks later. At least on ext3,
O_SYNC does force a commit on fill hole...
| Oct 12, 4:39 pm 2007 |
| Andrew Morton | Re: Correct behavior on O_DIRECT sparse file writes
On Fri, 12 Oct 2007 16:39:27 -0400
I don't think it's a bug. Sure, O_DIRECT is synchronous, but that's
because it is, err, direct. Not because it provides extra data-integrity
-
| Oct 12, 5:02 pm 2007 |
| David Howells | [PATCH 00/31] Remove iget() and read_inode() [try #4]
Hi Linus,
Here's a set of patches that remove all calls to iget() and all read_inode()
functions. They should be removed for two reasons: firstly they don't lend
themselves to good error handling, and secondly their presence is a temptation
for code outside a filesystem to call iget() to access inodes within that
filesystem.
There are a few benefits to this:
(1) Error handling gets simpler as you can return an error code rather than
having to call is_bad_inode().
(2) You can now...
| Oct 12, 5:07 am 2007 |
| David Howells | Oct 12, 6:58 am 2007 | |
| David Howells | [PATCH 31/31] IGET: Remove iget() and the read_inode() super...
Remove the old iget() call and the read_inode() superblock operation it uses
as these are really obsolete, and the use of read_inode() does not produce
proper error handling (no distinction between ENOMEM and EIO when marking
an inode bad).
Furthermore, this removes the temptation to use iget() to find an inode by
number in a filesystem from code outside that filesystem.
iget_locked() should be used instead. A new function is added in an earlier
patch (iget_failed) that is to be called to mark a...
| Oct 12, 5:09 am 2007 |
| David Howells | [PATCH 30/31] IGET: Stop HPPFS from using iget() and read_in...
Stop the HPPFS filesystem from using iget() and read_inode(). Provide an
hppfs_iget(), and call that instead of iget(). hppfs_iget() then uses
iget_locked() directly and returns a proper error code instead of an inode in
the event of an error.
hppfs_fill_sb_common() returns any error incurred when getting the root inode
instead of EINVAL.
Note that the contents of hppfs_kern.c need to be examined:
(*) The HPPFS inode retains a pointer to the proc dentry it is shadowing, but
whilst it d...
| Oct 12, 5:09 am 2007 |
| David Howells | [PATCH 28/31] IGET: Stop OPENPROMFS from using iget() and re...
Stop the OPENPROMFS filesystem from using iget() and read_inode(). Replace
openpromfs_read_inode() with openpromfs_iget(), and call that instead of
iget(). openpromfs_iget() then uses iget_locked() directly and returns a
proper error code instead of an inode in the event of an error.
openpromfs_fill_super() returns any error incurred when getting the root inode
instead of ENOMEM (not that it currently incurs any other error).
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/o...
| Oct 12, 5:09 am 2007 |
| David Howells | [PATCH 29/31] IGET: Stop HOSTFS from using iget() and read_i...
Stop the HOSTFS filesystem from using iget() and read_inode(). Provide
hostfs_iget(), and call that instead of iget(). hostfs_iget() then uses
iget_locked() directly and returns a proper error code instead of an inode in
the event of an error.
hostfs_fill_sb_common() returns any error incurred when getting the root inode
instead of EINVAL.
Note that the contents of hostfs_kern.c need to be examined:
(*) hostfs_iget() should perhaps subsume init_inode() and hostfs_read_inode().
(*) It wou...
| Oct 12, 5:09 am 2007 |
| David Howells | [PATCH 27/31] IGET: Stop UFS from using iget() and read_inod...
Stop the UFS filesystem from using iget() and read_inode(). Replace
ufs_read_inode() with ufs_iget(), and call that instead of iget().
ufs_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
ufs_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/ufs/inode.c | 34 ++++++++++++++++++++--------------
fs/ufs/namei.c ...
| Oct 12, 5:09 am 2007 |
| David Howells | [PATCH 21/31] IGET: Stop JFS from using iget() and read_inod...
Stop the JFS filesystem from using iget() and read_inode(). Replace
jfs_read_inode() with jfs_iget(), and call that instead of iget().
jfs_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
jfs_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
---
fs/jfs/inode.c | 20 ++...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 26/31] IGET: Stop the SYSV filesystem from using iget...
Stop the SYSV filesystem from using iget() and read_inode(). Replace
sysv_read_inode() with sysv_iget(), and call that instead of iget().
sysv_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/sysv/inode.c | 25 ++++++++++++++++---------
fs/sysv/namei.c | 6 +++---
fs/sysv/super.c | 4 ++--
fs/sysv/sysv.h | 1 +
4 files changed, 22 insertions(+), 14 ...
| Oct 12, 5:09 am 2007 |
| David Howells | [PATCH 24/31] IGET: Stop QNX4 from using iget() and read_ino...
Stop the QNX4 filesystem from using iget() and read_inode(). Replace
qnx4_read_inode() with qnx4_iget(), and call that instead of iget().
qnx4_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
qnx4_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/qnx4/inode.c | 45 ++++++++++++++++++++++++++++++---------------
fs/...
| Oct 12, 5:09 am 2007 |
| David Howells | [PATCH 23/31] IGET: Stop PROCFS from using iget() and read_i...
Stop the PROCFS filesystem from using iget() and read_inode(). Merge
procfs_read_inode() into procfs_get_inode(), and have that call iget_locked()
instead of iget().
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/proc/inode.c | 60 ++++++++++++++++++++++++++-----------------------------
1 files changed, 28 insertions(+), 32 deletions(-)
diff --git a/fs/proc/inode.c b/fs/proc/inode.c
index 0e4d37c..7a563c5 100644
--- a/fs/proc/inode.c
+++ b/fs/proc/inode.c
@@ -78,11 +78,...
| Oct 12, 5:09 am 2007 |
| David Howells | [PATCH 25/31] IGET: Stop ROMFS from using iget() and read_in...
Stop the ROMFS filesystem from using iget() and read_inode(). Replace
romfs_read_inode() with romfs_iget(), and call that instead of iget().
romfs_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
romfs_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/romfs/inode.c | 45 +++++++++++++++++++++++++++++++--------------
1 fil...
| Oct 12, 5:09 am 2007 |
| David Howells | [PATCH 20/31] IGET: Stop JFFS2 from using iget() and read_in...
Stop the JFFS2 filesystem from using iget() and read_inode(). Replace
jffs2_read_inode() with jffs2_iget(), and call that instead of iget().
jffs2_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
jffs2_do_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/jffs2/dir.c | 6 +++--
fs/jffs2/fs.c | 56 ++++++++++++...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 22/31] IGET: Stop the MINIX filesystem from using ige...
Stop the MINIX filesystem from using iget() and read_inode(). Replace
minix_read_inode() with minix_iget(), and call that instead of iget().
minix_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
minix_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/minix/inode.c | 43 +++++++++++++++++++++++++++++--------------
fs/mini...
| Oct 12, 5:09 am 2007 |
| David Howells | [PATCH 19/31] IGET: Stop ISOFS from using read_inode() [try ...
Stop the ISOFS filesystem from using read_inode(). Make isofs_read_inode()
return an error code, and make isofs_iget() pass it on.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/isofs/inode.c | 25 +++++++++++++++++--------
1 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
index 043b470..28d990b 100644
--- a/fs/isofs/inode.c
+++ b/fs/isofs/inode.c
@@ -54,7 +54,7 @@ static void isofs_put_super(struct super_block *sb)
ret...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 18/31] IGET: Stop HFSPLUS from using iget() and read_...
Stop the HFSPLUS filesystem from using iget() and read_inode(). Replace
hfsplus_read_inode() with hfsplus_iget(), and call that instead of iget().
hfsplus_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
hfsplus_fill_super() returns any error incurred when getting the root inode.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/hfsplus/btree.c | 6 ++++--
fs/hfsplus/dir.c | 6 +++---
fs/hfs...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 15/31] IGET: Stop FAT from using iget() and read_inod...
Stop the FAT filesystem from using iget() and read_inode(). Replace
the call to iget() with a call to ilookup().
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/fat/inode.c | 6 ++----
1 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/fs/fat/inode.c b/fs/fat/inode.c
index 960ed3d..9ae2e9f 100644
--- a/fs/fat/inode.c
+++ b/fs/fat/inode.c
@@ -629,8 +629,6 @@ static const struct super_operations fat_sops = {
.clear_inode = fat_clear_inode,
.remount_fs = fa...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 16/31] IGET: Stop FreeVXFS from using iget() and read...
Stop the FreeVXFS filesystem from using iget() and read_inode(). Replace
vxfs_read_inode() with vxfs_iget(), and call that instead of iget().
vxfs_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
vxfs_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/freevxfs/vxfs_extern.h | 2 +-
fs/freevxfs/vxfs_inode.c | 45 +++++++...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 14/31] IGET: Stop EXT4 from using iget() and read_ino...
Stop the EXT4 filesystem from using iget() and read_inode(). Replace
ext4_read_inode() with ext4_iget(), and call that instead of iget().
ext4_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
ext4_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: "Theodore Ts'o" <tytso@mit.edu>
Acked-by: Jan Kara <jack@suse.cz>
...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 13/31] IGET: Stop EXT3 from using iget() and read_ino...
Stop the EXT3 filesystem from using iget() and read_inode(). Replace
ext3_read_inode() with ext3_iget(), and call that instead of iget().
ext3_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
ext3_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: "Theodore Ts'o" <tytso@mit.edu>
Acked-by: Jan Kara <jack@suse.cz>
...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 12/31] IGET: Stop EXT2 from using iget() and read_ino...
Stop the EXT2 filesystem from using iget() and read_inode(). Replace
ext2_read_inode() with ext2_iget(), and call that instead of iget().
ext2_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
ext2_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: "Theodore Ts'o" <tytso@mit.edu>
---
fs/ext2/ext2.h | 2 +-
fs/ex...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 17/31] IGET: Stop FUSE from using iget() and read_ino...
Stop the FUSE filesystem from using read_inode(), which it doesn't use anyway.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/fuse/inode.c | 6 ------
1 files changed, 0 insertions(+), 6 deletions(-)
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
index 5448f62..2986654 100644
--- a/fs/fuse/inode.c
+++ b/fs/fuse/inode.c
@@ -73,11 +73,6 @@ static void fuse_destroy_inode(struct inode *inode)
kmem_cache_free(fuse_inode_cachep, inode);
}
-static void fuse_read_inode(s...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 11/31] IGET: Stop EFS from using iget() and read_inod...
Stop the EFS filesystem from using iget() and read_inode(). Replace
efs_read_inode() with efs_iget(), and call that instead of iget().
efs_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
efs_fill_super() returns any error incurred when getting the root inode
instead of EACCES.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/efs/inode.c | 25 +++++++++++++++++--------
fs/efs/namei.c | 23...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 10/31] IGET: Stop CIFS from using iget() and read_ino...
Stop the CIFS filesystem from using iget() and read_inode(). Replace
cifs_read_inode() with cifs_iget(), and call that instead of iget().
cifs_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
cifs_read_super() now returns any error incurred when getting the root inode
instead of ENOMEM.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/cifs/cifsfs.c | 8 ++++----
fs/cifs/cifsfs.h | 1 +
fs/cifs/inode.c...
| Oct 12, 5:08 am 2007 |
| David Howells | [PATCH 07/31] IGET: Stop autofs from using iget() and read_i...
Stop the autofs filesystem from using iget() and read_inode(). Replace
autofs_read_inode() with autofs_iget(), and call that instead of iget().
autofs_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/autofs/autofs_i.h | 1 +
fs/autofs/inode.c | 27 ++++++++++++++++++---------
fs/autofs/root.c | 22 ++++++++++++++++++----
3 files changed, 37 inserti...
| Oct 12, 5:07 am 2007 |
| David Howells | [PATCH 06/31] IGET: Stop AFFS from using iget() and read_ino...
Stop the AFFS filesystem from using iget() and read_inode(). Replace
affs_read_inode() with affs_iget(), and call that instead of iget().
affs_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
affs_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/affs/affs.h | 2 +-
fs/affs/amigaffs.c | 6 ++++--
fs/affs/inode.c ...
| Oct 12, 5:07 am 2007 |
| David Howells | [PATCH 08/31] IGET: Stop BEFS from using iget() and read_ino...
Stop the BEFS filesystem from using iget() and read_inode(). Replace
befs_read_inode() with befs_iget(), and call that instead of iget().
befs_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
befs_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Will Dyson <will_dyson@pobox.com>
---
fs/befs/linuxvfs.c | 39 +++++...
| Oct 12, 5:07 am 2007 |
| David Howells | [PATCH 09/31] IGET: Stop BFS from using iget() and read_inod...
Stop the BFS filesystem from using iget() and read_inode(). Replace
bfs_read_inode() with bfs_iget(), and call that instead of iget().
bfs_iget() then uses iget_locked() directly and returns a proper error code
instead of an inode in the event of an error.
bfs_fill_super() returns any error incurred when getting the root inode
instead of EINVAL.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/bfs/bfs.h | 2 ++
fs/bfs/dir.c | 6 +++---
fs/bfs/inode.c | 32 +++++++...
| Oct 12, 5:07 am 2007 |
| David Howells | [PATCH 05/31] IGET: Use iget_failed() in GFS2 [try #4]
Use iget_failed() in GFS2 to kill a failed inode.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/gfs2/inode.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
index 34f7bcd..498844f 100644
--- a/fs/gfs2/inode.c
+++ b/fs/gfs2/inode.c
@@ -185,7 +185,7 @@ fail_put:
ip->i_gl->gl_object = NULL;
gfs2_glock_put(ip->i_gl);
fail:
- iput(inode);
+ iget_failed(inode);
return ERR_PTR(error);
}
-
| Oct 12, 5:07 am 2007 |
| David Howells | [PATCH 04/31] IGET: Use iget_failed() in AFS [try #4]
Use iget_failed() in AFS to kill a failed inode.
Signed-off-by: David Howells <dhowells@redhat.com>
---
fs/afs/inode.c | 5 +----
1 files changed, 1 insertions(+), 4 deletions(-)
diff --git a/fs/afs/inode.c b/fs/afs/inode.c
index d196840..ca9b02f 100644
--- a/fs/afs/inode.c
+++ b/fs/afs/inode.c
@@ -196,10 +196,7 @@ struct inode *afs_iget(struct super_block *sb, struct key *key,
/* failure */
bad_inode:
- make_bad_inode(inode);
- unlock_new_inode(inode);
- iput(inode);
-
...
| Oct 12, 5:07 am 2007 |
| David Howells | [PATCH 03/31] IGET: Introduce a function to register iget fa...
Introduce a function to register failure in an inode construction path. This
includes marking the inode under construction as bad, unlocking it and
releasing it.
Signed-off-by: David Howells <dhowells@redhat.com>
---
Documentation/filesystems/porting | 18 +++++++++++++-----
fs/bad_inode.c | 14 ++++++++++++++
include/linux/fs.h | 1 +
3 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/Documentation/filesystems/porting b/Documentati...
| Oct 12, 5:07 am 2007 |
| David Howells | [PATCH 02/31] Convert ERR_PTR(PTR_ERR(p)) instances to ERR_C...
Convert instances of ERR_PTR(PTR_ERR(p)) to ERR_CAST(p) using:
perl -spi -e 's/ERR_PTR[(]PTR_ERR[(](.*)[)][)]/ERR_CAST(\1)/' `grep -rl 'ERR_PTR[(]*PTR_ERR' fs crypto net security`
Signed-off-by: David Howells <dhowells@redhat.com>
---
crypto/cbc.c | 2 +-
crypto/cryptd.c | 4 ++--
crypto/ecb.c | 2 +-
crypto/hmac.c | 2 +-
crypto/lrw.c | 2 +-
crypto/pcbc.c ...
| Oct 12, 5:07 am 2007 |
| David Howells | [PATCH 01/31] Add an ERR_CAST() macro to complement ERR_PTR ...
Add an ERR_CAST() macro to complement ERR_PTR and co. for the purposes of
casting an error entyped as one pointer type to an error of another pointer
type whilst making it explicit as to what is going on.
This provides a replacement for the ERR_PTR(PTR_ERR(p)) construct.
Signed-off-by: David Howells <dhowells@redhat.com>
---
include/linux/err.h | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/include/linux/err.h b/include/linux/err.h
index 1ab1d44.....
| Oct 12, 5:07 am 2007 |
| Andrew Clayton | Re: XFS regression?
What kernel is that against?. I got rejects with 2.6.23
However I tried a 2.6.18 on the file server and ran my test, it didn't
show the problem. I then made a 2.6.23 but with the patch from my git
bisect reverted.
Doing the test with that kernel, while writing a 1GB file I saw only
one > 1 second latency (1.2) and only a few ~ 0.5 second latencies.
However over the longer term I'm still seeing latencies > 1 second.
Just leaving my strace test running (no dd) on the raid filesystem I ...
| Oct 12, 7:36 am 2007 |
| Andrew Clayton | Re: XFS regression?
On Fri, 12 Oct 2007 12:36:01 +0100, Andrew Clayton wrote:
Ignore the numbers below. under normal conditions the raid array and
single drive show basically the same numbers. The raid array numbers
While we're talking number's...
raid array, strace over NFS
open("test", O_WRONLY|O_CREAT|O_EXCL|O_TRUNC, 0600) = 3 <0.018330>
open("test", O_WRONLY|O_CREAT|O_EXCL|O_TRUNC, 0600) = 3 <0.026398>
open("test", O_WRONLY|O_CREAT|O_EXCL|O_TRUNC, 0600) = 3 <8.927449>
open("test", O_WRON...
| Oct 12, 9:28 am 2007 |
| Pekka Enberg | Re: msync(2) bug(?), returns AOP_WRITEPAGE_ACTIVATE to userl...
Hi Hugh,
Doesn't msync(2) get to it via mm/page-writeback.c:write_cache_pages()
without unionfs even?
Pekka
-
| Oct 12, 5:45 pm 2007 |
| previous day | today | next day |
|---|---|---|
| October 11, 2007 | October 12, 2007 | October 13, 2007 |
| Greg Kroah-Hartman | [PATCH 001/196] Chinese: Add the known_regression URI to the HOWTO |
| Andrew Morton | 2.6.25-mm1 |
| david | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
git: | |
| Jarek Poplawski | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 15/37] dccp: Set per-connection CCIDs via socket options |
| David Miller | [GIT]: Networking |
| Natalie Protasevich | [BUG] New Kernel Bugs |
