lkml.org 
[lkml]   [2023]   [Jan]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v7 2/8] iov_iter: Add a function to extract a page list from an iterator
On 23.01.23 12:51, David Howells wrote:
> David Hildenbrand <david@redhat.com> wrote:
>
>> How does this work align with the goal of no longer using FOLL_GET for
>> O_DIRECT? We should get rid of any FOLL_GET usage for accessing page content.
>
> Would that run the risk of changes being made by the child being visible to
> the a DIO write if the parent changes the buffer first?
>
>
> PARENT CHILD
> ====== =====
> start-DIO-write
> fork() = pid fork() = 0
> alter-buffer
> CoW happens
> page copied original page retained
> alter-buffer
> <DMA-happens>

FOLL_PIN users are fine in that regard, because we properly detect
"maybe pinned" during fork() and copy the page. See
tools/testing/selftests/mm/cow.c (still called
tools/testing/selftests/vm/cow.c upstream IIRC) for some test cases for
that handling.

FOLL_GET does not work as expected in that regard: pages can't be
detected as pinned and we won't be copying them during fork(). We'll end
up COW-sharing them, which can result in trouble later.

Switching from FOLL_GET to FOLL_PIN was in the works by John H. Not sure
what the status is. Interestingly,
Documentation/core-api/pin_user_pages.rst already documents that "CASE
1: Direct IO (DIO)" uses FOLL_PIN ... which does, unfortunately, no
reflect reality yet.

--
Thanks,

David / dhildenb

\
 
 \ /
  Last update: 2023-03-26 23:52    [W:0.124 / U:0.260 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site