From 4f79dd28d714dbaf225ac5062ca1f2527567a81d Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Sat, 8 May 2021 18:31:41 +0300 Subject: libpager: pager_write_page () should not unmap page Clarify this in the documentation, and fix the storeio implementation. Message-Id: <20210508153144.332832-2-bugaevc@gmail.com> --- doc/hurd.texi | 6 +++--- libpager/pager.h | 6 +++--- storeio/pager.c | 8 +++----- tmpfs/pager-stubs.c | 6 +++--- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/doc/hurd.texi b/doc/hurd.texi index f63cfcda..0a38ca77 100644 --- a/doc/hurd.texi +++ b/doc/hurd.texi @@ -1536,9 +1536,9 @@ only permissible error returns are @code{EIO}, @code{EDQUOT}, and @deftypefun error_t pager_write_page (@w{struct user_pager_info *@var{pager}}, @w{vm_offset_t @var{page}}, @w{vm_address_t @var{buf}}) For pager @var{pager}, synchronously write one page from @var{buf} to -offset @var{page}. In addition, @code{vm_deallocate} (or equivalent) -@var{buf}. The only permissible error returns are @code{EIO}, -@code{EDQUOT}, and @code{ENOSPC}. +offset @var{page}. Do not deallocate @var{buf}, and do not keep any +references to @var{buf}. The only permissible error returns are +@code{EIO}, @code{EDQUOT}, and @code{ENOSPC}. @end deftypefun @deftypefun error_t pager_unlock_page (@w{struct user_pager_info *@var{pager}}, @w{vm_offset_t @var{address}}) diff --git a/libpager/pager.h b/libpager/pager.h index d2a8d397..dd8026a7 100644 --- a/libpager/pager.h +++ b/libpager/pager.h @@ -191,9 +191,9 @@ pager_read_page (struct user_pager_info *pager, int *write_lock); /* The user must define this function. For pager PAGER, synchronously - write one page from BUF to offset PAGE. In addition, mfree - (or equivalent) BUF. The only permissible error returns are EIO, - EDQUOT, and ENOSPC. */ + write one page from BUF to offset PAGE. Do not deallocate BUF, and do + not keep any references to BUF. The only permissible error returns + are EIO, EDQUOT, and ENOSPC. */ error_t pager_write_page (struct user_pager_info *pager, vm_offset_t page, diff --git a/storeio/pager.c b/storeio/pager.c index 12387939..01a1525c 100644 --- a/storeio/pager.c +++ b/storeio/pager.c @@ -66,9 +66,9 @@ pager_read_page (struct user_pager_info *upi, return 0; } -/* For pager PAGER, synchronously write one page from BUF to offset PAGE. In - addition, vm_deallocate (or equivalent) BUF. The only permissible error - returns are EIO, EDQUOT, and ENOSPC. */ +/* For pager PAGER, synchronously write one page from BUF to offset PAGE. + Do not deallocate BUF, and do not keep any references to BUF. The only + permissible error returns are EIO, EDQUOT, and ENOSPC. */ error_t pager_write_page (struct user_pager_info *upi, vm_offset_t page, vm_address_t buf) @@ -90,8 +90,6 @@ pager_write_page (struct user_pager_info *upi, err = dev_write (dev, page, (char *)buf, want, &written); - munmap ((caddr_t) buf, vm_page_size); - if (err || written < want) return EIO; else diff --git a/tmpfs/pager-stubs.c b/tmpfs/pager-stubs.c index 3299e218..883a635e 100644 --- a/tmpfs/pager-stubs.c +++ b/tmpfs/pager-stubs.c @@ -36,9 +36,9 @@ pager_read_page (struct user_pager_info *pager, } /* The user must define this function. For pager PAGER, synchronously - write one page from BUF to offset PAGE. In addition, mfree - (or equivalent) BUF. The only permissible error returns are EIO, - EDQUOT, and ENOSPC. */ + write one page from BUF to offset PAGE. Do not deallocate BUF, and do + not keep any references to BUF. The only permissible error returns + are EIO, EDQUOT, and ENOSPC. */ error_t pager_write_page (struct user_pager_info *pager, vm_offset_t page, -- cgit v1.2.3