Hi all,

I am getting a stacktrace from the borg command in the borgbackup
package while checking a backup (see bottom of email for full
output, since it's verbose). The relevant part is this:

    filenames = os.listdir(os.path.join(data_path, dir))
  OSError: [Errno 22] Invalid argument:
'/mnt/thinkpad_void_obsd_borg/thinkpad.borg/data/12'

This is same error is reproducible with a test Python 3.8 program:

 #!/usr/bin/env python

 import os
 os.listdir('/mnt/thinkpad_void_obsd_borg/thinkpad.borg/data/12/')

Running ktrace & kdump reveals the error is from calling
getdents(2):

 76903 python3.8
CALL  open(0x1ec7f06de3b0,0x30000<O_RDONLY|O_CLOEXEC|O_DIRECTORY>)
 76903 python3.8
NAMI  "/mnt/thinkpad_void_obsd_borg/thinkpad.borg/data/12/"
 76903 python3.8 RET   open 3
 [...]
 76903 python3.8 CALL  getdents(3,0x1ec7c9257000,0x4000)
 76903 python3.8 RET   getdents 16384/0x4000
 [...]
 76903 python3.8 CALL  getdents(3,0x1ec7c9257000,0x4000)
 76903 python3.8 RET   getdents 16384/0x4000
 [...]
 76903 python3.8 CALL  getdents(3,0x1ec7c9257000,0x4000)
 76903 python3.8 RET   getdents 16384/0x4000
 [...]
 76903 python3.8 CALL  getdents(3,0x1ec7c9257000,0x4000)
 76903 python3.8 RET   getdents -1 errno 22 Invalid argument

Looking at the man page for getdents(2), I found it interesting
that it says this call "is not a portable interface and should not
be used directly by applications" and it recommends using
readdir(3) instead.

To give you a rough idea of the number of files and filename sizes
in this directory:

  $ ls /mnt/thinkpad_void_obsd_borg/thinkpad.borg/data/12/ | wc
      1534    1534   10738

Where does the problem lie -- the upstream Python code, the
OpenBSD-specific patches in its port definition, or somewhere
else? And in case it matters, this is a -current amd64 system,
with "sysupgrade -s" executed on 7/15.

Thank you,
Aaron Miller

--
Exception ignored in: <function Repository.__del__ at
0x1e17e13fd310>
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-
packages/borg/repository.py", line 180, in __del__
    assert False, "cleanup happened in Repository.__del__"
AssertionError: cleanup happened in Repository.__del__
Local Exception
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/borg/archiver.py",
line 4565, in main
    exit_code = archiver.run(args)
  File "/usr/local/lib/python3.8/site-packages/borg/archiver.py",
line 4497, in run
    return set_ec(func(args))
  File "/usr/local/lib/python3.8/site-packages/borg/archiver.py",
line 161, in wrapper
    with repository:
  File "/usr/local/lib/python3.8/site-
packages/borg/repository.py", line 190, in __enter__
    self.open(self.path, bool(self.exclusive),
lock_wait=self.lock_wait, lock=self.do_lock)
  File "/usr/local/lib/python3.8/site-
packages/borg/repository.py", line 450, in open
    segment = self.io.get_latest_segment()
  File "/usr/local/lib/python3.8/site-
packages/borg/repository.py", line 1253, in get_latest_segment
    for segment, filename in self.segment_iterator(reverse=True):
  File "/usr/local/lib/python3.8/site-
packages/borg/repository.py", line 1241, in segment_iterator
    filenames = os.listdir(os.path.join(data_path, dir))
OSError: [Errno 22] Invalid argument:
'/mnt/thinkpad_void_obsd_borg/thinkpad.borg/data/12'

Platform: OpenBSD millipede.iforgotmy.name 6.7 GENERIC.MP#348
amd64
Borg: 1.1.13  Python: CPython 3.8.3 msgpack: 0.5.6
PID: 31745  CWD: /mnt/thinkpad_void_obsd_borg
sys.argv: ['/usr/local/bin/borg', 'check', 'thinkpad.borg']
SSH_ORIGINAL_COMMAND: None

Reply via email to