linux-fsdevel mailing list

FromSubjectsort iconDate
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 daytodaynext day
October 11, 2007October 12, 2007October 13, 2007