From mboxrd@z Thu Jan 1 00:00:00 1970 From: Li Zefan Subject: Re: Corruption with O_DIRECT and unaligned user buffers Date: Fri, 19 Dec 2008 19:51:49 +0800 Message-ID: <494B8AD5.3090901@cn.fujitsu.com> References: <491DAF8E.4080506@quantum.com> <200811191526.00036.nickpiggin@yahoo.com.au> <20081119165819.GE19209@random.random> <20081218152952.GW24856@random.random> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Nick Piggin , Tim LaBerge , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, Wang Chen To: Andrea Arcangeli Return-path: Received: from cn.fujitsu.com ([222.73.24.84]:61709 "EHLO song.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1751529AbYLSLxB (ORCPT ); Fri, 19 Dec 2008 06:53:01 -0500 In-Reply-To: <20081218152952.GW24856@random.random> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: > diff -ur rhel-5.2/kernel/fork.c x/kernel/fork.c > --- rhel-5.2/kernel/fork.c 2008-07-10 17:26:43.000000000 +0200 > +++ x/kernel/fork.c 2008-12-18 15:57:31.000000000 +0100 > @@ -368,7 +368,7 @@ > rb_parent = &tmp->vm_rb; > > mm->map_count++; > - retval = copy_page_range(mm, oldmm, mpnt); > + retval = copy_page_range(mm, oldmm, tmp); > Could you explain a bit why this change is needed? Seems this is a revert of the following commit: commit 0b0db14c536debd92328819fe6c51a49717e8440 Author: Hugh Dickins Date: Mon Nov 21 21:32:20 2005 -0800 [PATCH] unpaged: copy_page_range vma For copy_one_pte's print_bad_pte to show the task correctly (instead of "???"), dup_mmap must pass down parent vma rather than child vma. Signed-off-by: Hugh Dickins Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds diff --git a/kernel/fork.c b/kernel/fork.c index e0d0b77..1c1cf8d 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -263,7 +263,7 @@ static inline int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) rb_parent = &tmp->vm_rb; mm->map_count++; - retval = copy_page_range(mm, oldmm, tmp); + retval = copy_page_range(mm, oldmm, mpnt); if (tmp->vm_ops && tmp->vm_ops->open) tmp->vm_ops->open(tmp); > if (tmp->vm_ops && tmp->vm_ops->open) > tmp->vm_ops->open(tmp);