mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* PROBLEM how to sync page cache ?
@ 2006-03-08  9:52 Ali Ahmed Thawerani
  2006-03-09  5:53 ` Ali Ahmed Thawerani
  0 siblings, 1 reply; 3+ messages in thread
From: Ali Ahmed Thawerani @ 2006-03-08  9:52 UTC (permalink / raw)
  To: linux-kernel, listar

i have written a wrapper for a block device. my wrapper is also
registered as a block device and i am obtaining the pointer bdev of
the wrapper block device by using the open_by_devnum function with
FMODE_READ | FMODE_WRITE

i want to sync the memory pages that are in the page cache for this
particular wrapper block device

what i am doing is using two functions filemap_fdatawrite and
filemap_fdatawait which take bdev->bd_inode->i_mapping as argument and
sync the data associated with a particular block device

the return status of these two functions is 0 which i think means no success

i have tried to figure out what can be the reason for this and i
followed the function calling that have been made

some of the possible reasons were: when
i_mapping->backing_dev_info->memory_backed is 1 then these functions
return 0 i have checked that this value is not greater than 0 moreover
i have also checked that the i_mapping->nr_pages are also greater than
0

i was not able to go any further

i am calling these two functions in a thread

there was also another problem that when there is some request coming
to my wrapper block device and wake up the thread which tries to sync
the page cache my system gets stuck may be both the threads are trying
to modify the inodes at the same time and none is succeeding

what i did to solve this problem that i used kernel timer if there is
no request in the request queue for jiffies + 30 then i wake up the
thread to sync the buffer cache and at the same time set a
flag........ as according to my assumption when buffer cache will sync
data will come to my wrapper block device and i have to requeue it to
avoid any sort of problem but the thing is no such thing happens that
is there is no new request in request queue at all

can any one help me out in this

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: PROBLEM how to sync page cache ?
  2006-03-08  9:52 PROBLEM how to sync page cache ? Ali Ahmed Thawerani
@ 2006-03-09  5:53 ` Ali Ahmed Thawerani
  2006-03-10 12:50   ` Ali Ahmed Thawerani
  0 siblings, 1 reply; 3+ messages in thread
From: Ali Ahmed Thawerani @ 2006-03-09  5:53 UTC (permalink / raw)
  To: linux-kernel

On 3/8/06, Ali Ahmed Thawerani <aaht14@gmail.com> wrote:
> i have written a wrapper for a block device. my wrapper is also
> registered as a block device and i am obtaining the pointer bdev of
> the wrapper block device by using the open_by_devnum function with
> FMODE_READ | FMODE_WRITE
>
> i want to sync the memory pages that are in the page cache for this
> particular wrapper block device
>
> what i am doing is using two functions filemap_fdatawrite and
> filemap_fdatawait which take bdev->bd_inode->i_mapping as argument and
> sync the data associated with a particular block device
>
> the return status of these two functions is 0 which i think means no success
>
> i have tried to figure out what can be the reason for this and i
> followed the function calling that have been made
>
> some of the possible reasons were: when
> i_mapping->backing_dev_info->memory_backed is 1 then these functions
> return 0 i have checked that this value is not greater than 0 moreover
> i have also checked that the i_mapping->nr_pages are also greater than
> 0
>
> i was not able to go any further
>
> i am calling these two functions in a thread
>
> there was also another problem that when there is some request coming
> to my wrapper block device and wake up the thread which tries to sync
> the page cache my system gets stuck may be both the threads are trying
> to modify the inodes at the same time and none is succeeding
>
> what i did to solve this problem that i used kernel timer if there is
> no request in the request queue for jiffies + 30 then i wake up the
> thread to sync the buffer cache and at the same time set a
> flag........ as according to my assumption when buffer cache will sync
> data will come to my wrapper block device and i have to requeue it to
> avoid any sort of problem but the thing is no such thing happens that
> is there is no new request in request queue at all
>
> can any one help me out in this
>
i want to add a few more things that i have tried

i looked at the function filemap_fdatawrite and followed the function
calling at got to do_writepages which was in turn calling either the
i_mapping->a_ops->writepages or generic_writepages with the parameters
mapping and wbc

i copied do_writepages as it is in my code and gave i_mapping in place
of mapping and defined a structure of struct writeback_control with
syncmode = WB_SYNC_ALL, start = 0, end = 0, nr_to_write =
i_mapping->nr_pages * 2 and non_blocking = 1 the values of start and
end are given 0 in __filemap_fdatawrite and syncmode = WB_SYNC_ALL is
given in filemap_fdatawrite so i just gave the same values

i have seen that i_mapping->a_ops->writepages is assigned
generic_writepages and generic_writepages calls mpage_writepages

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: PROBLEM how to sync page cache ?
  2006-03-09  5:53 ` Ali Ahmed Thawerani
@ 2006-03-10 12:50   ` Ali Ahmed Thawerani
  0 siblings, 0 replies; 3+ messages in thread
From: Ali Ahmed Thawerani @ 2006-03-10 12:50 UTC (permalink / raw)
  To: linux-kernel

On 3/9/06, Ali Ahmed Thawerani <aaht14@gmail.com> wrote:
> On 3/8/06, Ali Ahmed Thawerani <aaht14@gmail.com> wrote:
> > i have written a wrapper for a block device. my wrapper is also
> > registered as a block device and i am obtaining the pointer bdev of
> > the wrapper block device by using the open_by_devnum function with
> > FMODE_READ | FMODE_WRITE
> >
> > i want to sync the memory pages that are in the page cache for this
> > particular wrapper block device
> >
> > what i am doing is using two functions filemap_fdatawrite and
> > filemap_fdatawait which take bdev->bd_inode->i_mapping as argument and
> > sync the data associated with a particular block device
> >
> > the return status of these two functions is 0 which i think means no success
> >
> > i have tried to figure out what can be the reason for this and i
> > followed the function calling that have been made
> >
> > some of the possible reasons were: when
> > i_mapping->backing_dev_info->memory_backed is 1 then these functions
> > return 0 i have checked that this value is not greater than 0 moreover
> > i have also checked that the i_mapping->nr_pages are also greater than
> > 0
> >
> > i was not able to go any further
> >
> > i am calling these two functions in a thread
> >
> > there was also another problem that when there is some request coming
> > to my wrapper block device and wake up the thread which tries to sync
> > the page cache my system gets stuck may be both the threads are trying
> > to modify the inodes at the same time and none is succeeding
> >
> > what i did to solve this problem that i used kernel timer if there is
> > no request in the request queue for jiffies + 30 then i wake up the
> > thread to sync the buffer cache and at the same time set a
> > flag........ as according to my assumption when buffer cache will sync
> > data will come to my wrapper block device and i have to requeue it to
> > avoid any sort of problem but the thing is no such thing happens that
> > is there is no new request in request queue at all
> >
> > can any one help me out in this
> >
> i want to add a few more things that i have tried
>
> i looked at the function filemap_fdatawrite and followed the function
> calling at got to do_writepages which was in turn calling either the
> i_mapping->a_ops->writepages or generic_writepages with the parameters
> mapping and wbc
>
> i copied do_writepages as it is in my code and gave i_mapping in place
> of mapping and defined a structure of struct writeback_control with
> syncmode = WB_SYNC_ALL, start = 0, end = 0, nr_to_write =
> i_mapping->nr_pages * 2 and non_blocking = 1 the values of start and
> end are given 0 in __filemap_fdatawrite and syncmode = WB_SYNC_ALL is
> given in filemap_fdatawrite so i just gave the same values
>
> i have seen that i_mapping->a_ops->writepages is assigned
> generic_writepages and generic_writepages calls mpage_writepages
>

one of my collegues said that there should be a way to set the page
cache mode to write through or there will be a proc entry which
specifies how much cache should be used for the disk and we can make
it small or 0

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-03-10 12:50 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-03-08  9:52 PROBLEM how to sync page cache ? Ali Ahmed Thawerani
2006-03-09  5:53 ` Ali Ahmed Thawerani
2006-03-10 12:50   ` Ali Ahmed Thawerani

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®