Re: [PATCH 2/2] ceph: mark user pages dirty on direct-io reads

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 16 Dec 2010, Henry C Chang wrote:
> > That aside, I have no idea if this patch is the right thing to do.  I
> > thought the page bits were mainly important for the page cache... what do
> > we accomplish by marking user pages dirty this way?
> 
> Hmm.... It's just because I read this:
> http://www.makelinux.net/ldd3/chp-15-sect-3.shtml
> 
> It says:
> "Once your direct I/O operation is complete, you must release the user
> pages. Before doing so, however, you must inform the kernel if you
> changed the contents of those pages. Otherwise, the kernel may think
> that the pages are "clean," meaning that they match a copy found on
> the swap device, and free them without writing them out to backing
> store. So, if you have changed the pages (in response to a user-space
> read request), you must mark each affected page dirty with a call to:
> void SetPageDirty(struct page *page);"

Oh, I see now; I was looking at the wrong implementation of 
get_user_pages.  I fixed it up to use the put_page_vector helper in the 
error path (to put the pages we _did_ get).

For the dirtying, that makes sense now too.  The get_user_pages() comment 
indicates that set_page_dirty_lock() and put_page() should be used, though 
(see mm/memory.c line ~1500).

Pushed a patch that does this.  Care to test it out?

	git://ceph.newdream.net/git/ceph-client.git master

Thanks!
sage

[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux