Re: ltp directio test causes oops on 2.4.20pre5aa2

From: Andrea Arcangeli (andrea@suse.de)
Date: Tue Sep 10 2002 - 01:45:36 EST


while merging the new nfs stuff with nfs-o_direct this bit was left out:

> diff -u --recursive --new-file linux-2.4.18-pathconf/mm/filemap.c linux-2.4.18-odirect/mm/filemap.c
> --- linux-2.4.18-pathconf/mm/filemap.c Wed Feb 20 17:14:28 2002
> +++ linux-2.4.18-odirect/mm/filemap.c Wed Feb 20 17:17:19 2002
> @@ -1515,7 +1515,7 @@
594a592,606
> --- 2.4.19pre3aa1/fs/reiserfs/inode.c.~1~ Tue Mar 12 00:07:18 2002
> +++ 2.4.19pre3aa1/fs/reiserfs/inode.c Tue Mar 12 01:24:21 2002
> @@ -2161,10 +2161,11 @@
> }
> }
>
> -static int reiserfs_direct_io(int rw, struct inode *inode,
> +static int reiserfs_direct_io(int rw, struct file * filp,
> struct kiobuf *iobuf, unsigned long blocknr,
> int blocksize)
> {
> + struct inode * inode = filp->f_dentry->d_inode->i_mapping->host;
> return generic_direct_IO(rw, inode, iobuf, blocknr, blocksize,
> reiserfs_get_block_direct_io) ;
> }

Trond could you include the reiserfs part in your nfs-o_direct too?
(ext3 has o_direct in -aa only so you don't need it) I'll keep them in
separate files so they won't be forgotten again. In the meantime you
can test with this incremental fix:

--- 2.4.19pre3aa1/fs/reiserfs/inode.c.~1~ Tue Mar 12 00:07:18 2002
+++ 2.4.19pre3aa1/fs/reiserfs/inode.c Tue Mar 12 01:24:21 2002
@@ -2161,10 +2161,11 @@
         }
 }
 
-static int reiserfs_direct_io(int rw, struct inode *inode,
+static int reiserfs_direct_io(int rw, struct file * filp,
                               struct kiobuf *iobuf, unsigned long blocknr,
                               int blocksize)
 {
+ struct inode * inode = filp->f_dentry->d_inode->i_mapping->host;
     return generic_direct_IO(rw, inode, iobuf, blocknr, blocksize,
                              reiserfs_get_block_direct_io) ;
 }
--- 2.4.20pre5aa2/fs/ext3/inode.c.~1~ Mon Sep 9 02:38:08 2002
+++ 2.4.20pre5aa2/fs/ext3/inode.c Tue Sep 10 05:22:18 2002
@@ -1385,9 +1385,10 @@ static int ext3_releasepage(struct page
 }
 
 static int
-ext3_direct_IO(int rw, struct inode *inode, struct kiobuf *iobuf,
+ext3_direct_IO(int rw, struct file * filp, struct kiobuf *iobuf,
                 unsigned long blocknr, int blocksize)
 {
+ struct inode * inode = filp->f_dentry->d_inode->i_mapping->host;
         struct ext3_inode_info *ei = EXT3_I(inode);
         handle_t *handle = NULL;
         int ret;

thanks for the as usual accurate report,

Andrea

PS. Later I'll make sure the new sched can't introduce starvation, then
    I'll upload a new -aa with these few bits.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Sep 15 2002 - 22:00:20 EST