mirror of
https://github.com/borgbackup/borg.git
synced 2026-06-11 01:41:57 -04:00
chunker: use safe_fadvise
also: refactor safe_advise a bit, use has_posix_fadvise.
This commit is contained in:
parent
2295c83c7e
commit
66f10712b4
2 changed files with 6 additions and 6 deletions
|
|
@ -13,6 +13,7 @@ from libc.stdlib cimport malloc, free
|
|||
from libc.string cimport memcpy, memmove
|
||||
|
||||
from .constants import CH_DATA, CH_ALLOC, CH_HOLE, zeros
|
||||
from .platform import safe_fadvise
|
||||
|
||||
# this will be True if Python's seek implementation supports data/holes seeking.
|
||||
# this does not imply that it will actually work on the filesystem,
|
||||
|
|
@ -47,11 +48,7 @@ def dread(offset, size, fd=None, fh=-1):
|
|||
use_fh = fh >= 0
|
||||
if use_fh:
|
||||
data = os.read(fh, size)
|
||||
if hasattr(os, 'posix_fadvise'):
|
||||
# UNIX only and, in case of block sizes that are not a multiple of the
|
||||
# system's page size, better be used with a bug fixed linux kernel > 4.6.0,
|
||||
# see comment/workaround in _chunker.c and borgbackup issue #907.
|
||||
os.posix_fadvise(fh, offset, len(data), os.POSIX_FADV_DONTNEED)
|
||||
safe_fadvise(fh, offset, len(data), "DONTNEED")
|
||||
return data
|
||||
else:
|
||||
return fd.read(size)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ are correctly composed into the base functionality.
|
|||
API_VERSION = "1.2_05"
|
||||
|
||||
fdatasync = getattr(os, "fdatasync", os.fsync)
|
||||
has_posix_fadvise = hasattr(os, "posix_fadvise")
|
||||
|
||||
from .xattr import ENOATTR
|
||||
|
||||
|
|
@ -114,9 +115,11 @@ def sync_dir(path):
|
|||
|
||||
|
||||
def safe_fadvise(fd, offset, len, advice):
|
||||
if hasattr(os, "posix_fadvise"):
|
||||
if has_posix_fadvise:
|
||||
advice = getattr(os, "POSIX_FADV_" + advice)
|
||||
try:
|
||||
# UNIX only and, in case of block sizes that are not a multiple of the system's page size,
|
||||
# better be used with a bug fixed linux kernel > 4.6.0, see borgbackup issue #907.
|
||||
os.posix_fadvise(fd, offset, len, advice)
|
||||
except OSError:
|
||||
# usually, posix_fadvise can't fail for us, but there seem to
|
||||
|
|
|
|||
Loading…
Reference in a new issue