[FIX] Re: [Oops] proftpd/sys_sendfile in 2.3.43 final

From: Alexander Viro (viro@math.psu.edu)
Date: Thu Feb 10 2000 - 21:00:39 EST


On Thu, 10 Feb 2000, Simon Kirby wrote:

> 2.3.43 final Oopses when proftpd starts at bootup on my system. pre8 did
> not do this. Oops as follows:

[snip]
> I'm guessing this is probably a result of or related to the following
> change in the diff between pre8 and 2.3.37:
>
> @@ -1233,7 +1235,7 @@
> in_inode = in_file->f_dentry->d_inode;
> if (!in_inode)
> goto fput_in;
> - if (!in_inode->i_op || !in_inode->i_op->readpage)
> + if (!in_inode->i_mapping->a_ops->readpage)
> goto fput_in;
> retval = locks_verify_area(FLOCK_VERIFY_READ, in_inode, in_file, in_file->f_pos, count);
> if (retval)
>
>
> Not sure how to fix it, but it's probably something silly/simple.

Partially, yes/yes.
Fix follows: (piece of patch lost when porting to 2.3.41)
@@ -464,6 +464,7 @@
  */
 static void clean_inode(struct inode *inode)
 {
+ static struct address_space_operations empty_aops = {};
        memset(&inode->u, 0, sizeof(inode->u));
        inode->i_sock = 0;
        inode->i_op = NULL;
@@ -475,6 +476,7 @@
        inode->i_pipe = NULL;
        inode->i_bdev = NULL;
        inode->i_mapping = &inode->i_data;
+ inode->i_mapping->a_ops = &empty_aops;
        inode->i_mapping->host = (void*)inode;
 }

IOW, for inodes _not_ on the regular filesystems attempt to use the
methods (could happen only from sendfile() and FIBMAP/bmap() - the last
pair if you are trying to use LILO on a procfs file/swapon on it/loopback
mount from it ;-) gave an OOPS. Sorry about that...

Linus, could you apply this one? It's quite obvious and in fact was always
supposed to be there - and in the old patches it was ;-<
                                                                Al

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Feb 15 2000 - 21:00:19 EST