lkml.org 
[lkml]   [2008]   [Aug]   [20]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
    /
    DateWed, 20 Aug 2008 12:30:56 -0700
    FromAndrew Morton <>
    SubjectRe: [PATCH] fbdefio: add set_page_dirty handler to deferred IO FB
    On Wed, 20 Aug 2008 19:57:53 +0100
    Ian Campbell <ijc@hellion.org.uk> wrote:
    
    > [correcting stable@]
    > 
    > On Wed, 2008-08-20 at 01:37 -0700, Andrew Morton wrote:
    > > On Wed, 20 Aug 2008 09:13:23 +0100 Ian Campbell <ijc@hellion.org.uk> wrote:
    > > 
    > > > Perhaps applying the band-aid at open time instead would be preferred?
    > > 
    > > That would be less racy, I expect.
    > [...]
    > > <tries to write a patch>
    > > 
    > > OK, seems that fb_ops.fb_open() has no way of getting at the `struct
    > > file *' which is being opened (wtf?).  Screwed.  Need to change
    > > fb_ops.fb_open(), or add a new fb_ops.fb_open_sane().
    > 
    > Ah yes, I remember why I did it in mmap() now...
    > 
    > How about this version? Not as clean as overriding fb_open() but
    > involves less frobbing with unrelated drivers.
    > 
    > From ae2f7f118518fbfd4006c985b136a5d3d1a314af Mon Sep 17 00:00:00 2001
    > From: Ian Campbell <ijc@hellion.org.uk>
    > Date: Wed, 20 Aug 2008 19:54:50 +0100
    > Subject: [PATCH] fbdefio: add set_page_dirty handler to deferred IO FB
    > 
    > Fixes kernel BUG at lib/radix-tree.c:473.
    > 
    > Previously the handler was incidentally provided by tmpfs but this was
    > removed with:
    > 
    >   commit 14fcc23fdc78e9d32372553ccf21758a9bd56fa1
    >   Author: Hugh Dickins <hugh@veritas.com>
    >   Date:   Mon Jul 28 15:46:19 2008 -0700
    > 
    >     tmpfs: fix kernel BUG in shmem_delete_inode
    > 
    > relying on this behaviour was incorrect in any case and the BUG
    > also appeared when the device node was on an ext3 filesystem.
    > 
    > v2: override a_ops at open() time rather than mmap() time to minimise
    > races per AKPM's concerns.
    > 
    > ...
    >
    > --- a/drivers/video/fbmem.c
    > +++ b/drivers/video/fbmem.c
    > @@ -1344,6 +1344,10 @@ fb_open(struct inode *inode, struct file *file)
    >  		if (res)
    >  			module_put(info->fbops->owner);
    >  	}
    > +#ifdef CONFIG_FB_DEFERRED_IO
    > +	if (info->fbdefio)
    > +		fb_deferred_io_open(info, inode, file);
    > +#endif
    
    eww, hacky, but drivers/video/fbmem.c already got hacky:
    
    #ifdef CONFIG_FB_DEFERRED_IO
            .fsync =        fb_deferred_io_fsync,
    #endif
    
    so it's not an original sin.
    
    Does it work?
    
    
    
    \
     
     \ /
      Last update: 2008-08-20 21:35    [from the cache]
    ©2003-2008