animesh_singh@bbv.satyam.com wrote:
> On Tue, 9 May 2000, Gabriel Benhanokh wrote:
>
> >
> > >
> > > hi
> > > very true i missed out a few more details , the buffer block after
> > > being marked uptodate is also required to wake up any process sleeping on
> > > its wait queue this is done by execution of b_end_io function in the
> > > buffer head (ll_rw_blk) but this is all done only when the buffer block
> > > has been flushed by bdflush or sync command line(this generates request
> > > for the under laying disk driver by make_request) and successfully written
> > > on the disk.
> > > a very simple solution for your problem can be one of these
> > > 1. you don't allow your buffer block to be ever processed by ll_rw_blk
> > > function hence always mark it uptodate , wake up all waiting process and
> > > not dirty
> > how do i do this?
> > will maring the buffer clean and than calling bforget won't do this ?
>
> have a look at the
> end_that_request_last function defined in the ll_rw_blk.c
> the wait queue is associated with request issued to the device
> it came here in the first place because the block asked for was
> not there in the buffer cache (bread returns immediately if the
> block is present else issues the request for it)hence its
> necessary to wakeup all these process
>
> >
> > > 2. you trap the request call at disk driver level(this is fairly easy) and
> > > don't allow the block to be written but call end_request(1)(this does
> > > everything for you) without executing the real request function of the
> > > disk driver thus data is never written
> > i think that this will only help not to do the disk io, but won't avoid the
> > cache wiping problem. i will still be using too many un-nessceary cache
> > buffers.
> > and beside for this i must change the driver which i don't want.
> > i'm trying to just add another module without changing any other stuff.
> >
> No !!!!!
> you don't have to do all this ,
> request function of all the block devices are registered in
> request structure are part of the
> struct blk_dev_struct blk_dev (look in ll_rw_blk.c)
> blk_dev is an exposed DS thus its easy to steal the request
> function pointer and substitute your own function ptr here , thus
> a simple module can do all the job for you (i have some code if
> you want i shall send it )
>
> in order to release your buffer block its necessary to reduce its
> b_count to zero hence followed by any reference to buffer block
> through apis like bread shuold be followed by brelse. even though
> you might find that the buffers are still persisting they shall all be
> eatten away when any heavy mem requirements are put to your system
>
>
>
> > THX
> > /gaby
> >
-
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 : Mon May 15 2000 - 21:00:14 EST