From: Eric Sandeen <sandeen@redhat.com>
To: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: linux-fsdevel <linux-fsdevel@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH, RFC] check for frozen filesystems in the mmap path
Date: Tue, 21 Apr 2009 10:15:37 -0500 [thread overview]
Message-ID: <49EDE319.10701@redhat.com> (raw)
In-Reply-To: <20090421140045.F125.A69D9226@jp.fujitsu.com>
KOSAKI Motohiro wrote:
>
>> Index: linux-2.6/mm/memory.c
>> ===================================================================
>> --- linux-2.6.orig/mm/memory.c
>> +++ linux-2.6/mm/memory.c
>> @@ -1944,6 +1944,7 @@ static int do_wp_page(struct mm_struct *
>> * read-only shared pages can get COWed by
>> * get_user_pages(.write=1, .force=1).
>> */
>> + vfs_check_frozen(old_page->mapping->host->i_sb, SB_FREEZE_WRITE);
>> if (vma->vm_ops && vma->vm_ops->page_mkwrite) {
>> struct vm_fault vmf;
>> int tmp;
>
> it seems strage.
>
> 1. it seems to have a race
>
> CPU0 CPU1
> ----------------------------------------------------
> do_wp_page
> vfs_check_frozen
> ioctl_fsfreeze
> freeze_bdev
> __fsync_super
> process touch mem
>
> vfs_check_frozen only wait to unfreeze, but not prevent new
> new freeze request starting.
Well, I think that is ok. I don't *think* that any IO can actually
happen to the filesystem even if it gets dirtied via mmap, so if a bit
of mmap-dirtied memory sneaks in before it's actually frozen, I'm not
sure that's really a problem. The goal was to prevent massive amounts
of memory from getting dirtied, backed by the frozen filesystem. This
would potentially lead to a situation where the un-freezing thread was
stuck waiting for memory to free up, stuck behind waiting for the
filesystem to unfreeze for writeout, and we can't unfreeze.
> 2. this logic kill multi thread application.
>
> this logic mean mmap_sem grabbing until unfreeze.
> it mean othrer thread in the same process can't page-fault although
> it don't touch frozen-sb.
> it seems strange.
Hm, I hadn't thought about this ... On the one hand, ->page_mkwrite can
already sleep, though a userspace freeze/unfreeze could potentially take
much much longer. freeze/unfreeze *should* happen very quickly, but
nothing enforces that.
Do you have any suggestions?
Thanks,
-Eric
next prev parent reply other threads:[~2009-04-21 15:16 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-16 23:45 [PATCH, RFC] check for frozen filesystems in the mmap path Eric Sandeen
2009-04-20 14:55 ` Rik van Riel
2009-04-21 5:11 ` KOSAKI Motohiro
2009-04-21 15:15 ` Eric Sandeen [this message]
2009-04-22 1:35 ` KOSAKI Motohiro
2009-04-22 4:49 ` KOSAKI Motohiro
2009-04-22 5:01 ` Eric Sandeen
2009-04-22 5:29 ` KOSAKI Motohiro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49EDE319.10701@redhat.com \
--to=sandeen@redhat.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.