Date: Thu, 7 Jun 2007 08:41:48 +0800 From: "Howard Su" <howard0su@gmail.com> To: arch@freebsd.org Cc: alc@freebsd.org Subject: Re: help on lock around vm_page Message-ID: <f126fae00706061741h5d88ce2aq64ea86a0deee3b39@mail.gmail.com> In-Reply-To: <f126fae00706060918q5fc7f664v5a9eb8af76080a3e@mail.gmail.com> References: <f126fae00706060918q5fc7f664v5a9eb8af76080a3e@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Some further reading give me a different message: The pages returned by vm_page_grab should have VPO_BUSY flag which will prevent anyone else to move this page to cache. So current approach should be ok. Am I right? Maybe there is some edge cases since I only meet this bug in a low memory situation. -- -Howard On 6/7/07, Howard Su <howard0su@gmail.com> wrote: > > I want some helps from VM guru. I try to fix a panic in tmpfs. In > order to push tmpfs into -Current, I really want some help to solve > this. > > 1. we allocate an object from vm_pager_alloc(OBJT_SWAP, ...) when create a > file. > 2. the panic is during handling write op: > a) find the first page we want to write > b) call vm_page_grab to get the page from object. > c) call use sf_buf_alloc to map it into kernel_map > d) use uiomove to move the data > e) mark page as dirty > f) loop to a until all pages are handled. > > there is a race condition. while doing b-c & e, we hold the > OBJ_LOCK/page_queue_lock. when doing d, we have to drop the locks to > call uiomove. When calling uio move, the page may moved to cache queue > since in that time it is not dirty. > > There is a solution that we allocate a page buffer. Before a), we > uiomove it to the buffer and replace uiomove with a bcopy in d). Then, > we can hold lock in b - e. I feel this will cause performance problem. > > For the detailed code, please check: > > http://perforce.freebsd.org/fileViewer.cgi?FSPC=//depot/user/howardsu/truss/sys/fs/tmpfs/tmpfs%5fvnops.c&REV=30 > > function: tmpfs_uio_xfer() > > Any idea to close this race condition? > > PS: If you can review my code about usage of vm, it will be appreciated. > > -- > -Howard >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?f126fae00706061741h5d88ce2aq64ea86a0deee3b39>