mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 15:12:13 +02:00
s390/uv: Always return 0 from s390_wiggle_split_folio() if successful
Let's consistently return 0 if the operation was successful, and just detect ourselves whether splitting is required -- folio_test_large() is a cheap operation. Update the documentation. Should we simply always return -EAGAIN instead of 0, so we don't have to handle it in the caller? Not sure, staring at the documentation, this way looks a bit cleaner. Signed-off-by: David Hildenbrand <david@redhat.com> Link: https://lore.kernel.org/r/20250516123946.1648026-3-david@redhat.com Message-ID: <20250516123946.1648026-3-david@redhat.com> Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
This commit is contained in:
parent
3ec8a8330a
commit
bd428b8c79
|
|
@ -324,34 +324,36 @@ static int make_folio_secure(struct mm_struct *mm, struct folio *folio, struct u
|
|||
}
|
||||
|
||||
/**
|
||||
* s390_wiggle_split_folio() - try to drain extra references to a folio and optionally split.
|
||||
* s390_wiggle_split_folio() - try to drain extra references to a folio and
|
||||
* split the folio if it is large.
|
||||
* @mm: the mm containing the folio to work on
|
||||
* @folio: the folio
|
||||
* @split: whether to split a large folio
|
||||
*
|
||||
* Context: Must be called while holding an extra reference to the folio;
|
||||
* the mm lock should not be held.
|
||||
* Return: 0 if the folio was split successfully;
|
||||
* -EAGAIN if the folio was not split successfully but another attempt
|
||||
* can be made, or if @split was set to false;
|
||||
* -EINVAL in case of other errors. See split_folio().
|
||||
* Return: 0 if the operation was successful;
|
||||
* -EAGAIN if splitting the large folio was not successful,
|
||||
* but another attempt can be made;
|
||||
* -EINVAL in case of other folio splitting errors. See split_folio().
|
||||
*/
|
||||
static int s390_wiggle_split_folio(struct mm_struct *mm, struct folio *folio, bool split)
|
||||
static int s390_wiggle_split_folio(struct mm_struct *mm, struct folio *folio)
|
||||
{
|
||||
int rc;
|
||||
|
||||
lockdep_assert_not_held(&mm->mmap_lock);
|
||||
folio_wait_writeback(folio);
|
||||
lru_add_drain_all();
|
||||
if (split) {
|
||||
|
||||
if (folio_test_large(folio)) {
|
||||
folio_lock(folio);
|
||||
rc = split_folio(folio);
|
||||
folio_unlock(folio);
|
||||
|
||||
if (rc != -EBUSY)
|
||||
return rc;
|
||||
return -EAGAIN;
|
||||
}
|
||||
return -EAGAIN;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int make_hva_secure(struct mm_struct *mm, unsigned long hva, struct uv_cb_header *uvcb)
|
||||
|
|
@ -394,7 +396,7 @@ int make_hva_secure(struct mm_struct *mm, unsigned long hva, struct uv_cb_header
|
|||
mmap_read_unlock(mm);
|
||||
|
||||
if (rc == -E2BIG || rc == -EBUSY) {
|
||||
rc = s390_wiggle_split_folio(mm, folio, rc == -E2BIG);
|
||||
rc = s390_wiggle_split_folio(mm, folio);
|
||||
if (!rc)
|
||||
rc = -EAGAIN;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user