Re: bug in COW no page fault?

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

 



That's helpful.  Thanks.

On Fri, Jan 29, 2016 at 9:47 PM, Wilcox, Matthew R
<matthew.r.wilcox@xxxxxxxxx> wrote:
> I remembered that Ross had a similar question, so it must be hard to understand.  How does this comment work for both of you?
>
> +               /*
> +                * A truncate must remove COWs of pages that are removed
> +                * from the file.  If we have a struct page, the normal
> +                * page lock mechanism prevents truncate from missing the
> +                * COWed page.  If not, the i_mmap_lock can provide the
> +                * same guarantee.  It is dropped by the caller after the
> +                * page is safely in the page tables.
> +                */
>
> ________________________________________
> From: Jared Hulbert [jaredeh@xxxxxxxxx]
> Sent: January 29, 2016 3:16 PM
> To: Wilcox, Matthew R
> Cc: linux-fsdevel@xxxxxxxxxxxxxxx; ross.zwisler@xxxxxxxxxxxxxxx
> Subject: Re: bug in COW no page fault?
>
> oh...  Look!  There it is, right where it should be.  Sorry.
>
> Recovering from years of Android and VMware, please be patient.
>
> On Fri, Jan 29, 2016 at 2:36 PM, Wilcox, Matthew R
> <matthew.r.wilcox@xxxxxxxxx> wrote:
>> Because then we lock the page instead of the i_mmap_sem.  The code in mm/memory.c isn't /that/ hard to understand, is it?
>> ________________________________________
>> From: Jared Hulbert [jaredeh@xxxxxxxxx]
>> Sent: January 29, 2016 2:12 PM
>> To: Wilcox, Matthew R
>> Cc: linux-fsdevel@xxxxxxxxxxxxxxx; ross.zwisler@xxxxxxxxxxxxxxx
>> Subject: Re: bug in COW no page fault?
>>
>> Which page?  The unmatched call for i_mmap_lock_read() is only called
>> if(!page).  Ahh, are we locking for the cow_page?  Okay, then why
>> don't we lock when page != NULL in the COW case?
>>
>> On Fri, Jan 29, 2016 at 1:53 PM, Wilcox, Matthew R
>> <matthew.r.wilcox@xxxxxxxxx> wrote:
>>> Because we need to hold the i_mmap_sem until the page is inserted into the page tables to avoid racing with truncate.  Therefore it is unlocked by the MM code.
>>>
>>> Did you try this patch?  It should have BUGged immediately that you hit this case.  If not, you have insufficient CONFIG_DEBUG enabled.
>>>
>>> ________________________________________
>>> From: Jared Hulbert [jaredeh@xxxxxxxxx]
>>> Sent: January 29, 2016 1:38 PM
>>> To: linux-fsdevel@xxxxxxxxxxxxxxx; Wilcox, Matthew R; ross.zwisler@xxxxxxxxxxxxxxx
>>> Subject: DAX: bug in COW no page fault?
>>>
>>> Why isn't this required?
>>>
>>> diff --git a/fs/dax.c b/fs/dax.c
>>> index a7f77e1..30f2abe 100644
>>> --- a/fs/dax.c
>>> +++ b/fs/dax.c
>>> @@ -416,6 +416,7 @@ int __dax_fault(struct vm_area_struct *vma, struct vm_fault
>>>                                 error = -EIO;
>>>                                 goto out;
>>>                         }
>>> +                       i_mmap_unlock_read(mapping);
>>>                 }
>>>                 return VM_FAULT_LOCKED;
>>>         }
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux