Re: [fuse-devel] Semantics of fuse_notify_delete()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Jul 31 2023, Miklos Szeredi via fuse-devel <fuse-devel@xxxxxxxxxxxxxxxxxxxxx> wrote:
> On Fri, 28 Jul 2023 at 10:52, Miklos Szeredi <miklos@xxxxxxxxxx> wrote:
>>
>> On Fri, 28 Jul 2023 at 10:45, Nikolaus Rath <Nikolaus@xxxxxxxx> wrote:
>>
>> > I've pushed an instrumented snapshot to
>> > https://github.com/s3ql/s3ql/tree/notify_delete_bug. For me, this
>> > reliably reproduces the problem:
>> >
>> > $ python3 setup.py build_cython build_ext --inplace
>> > $ md bucket
>> > $ bin/mkfs.s3ql --plain local://bucket
>> > [...]
>> > $ bin/mount.s3ql --fg local://bucket mnt &
>> > [...]
>> > $ md mnt/test; echo foo > mnt/test/bar
>> > $ bin/s3qlrm mnt/test
>> > fuse: writing device: Directory not empty
>> > ERROR: Failed to submit invalidate_entry request for parent inode 1, name b'test'
>> > Traceback (most recent call last):
>> >   File "src/internal.pxi", line 125, in pyfuse3._notify_loop
>> >   File "src/pyfuse3.pyx", line 915, in pyfuse3.invalidate_entry
>> > OSError: [Errno 39] fuse_lowlevel_notify_delete returned: Directory not
>> > empty
>
> I get this:
>
> root@kvm:~/s3ql# bin/s3qlrm mnt/test
> WARNING: Received unknown command via control inode
> ERROR: Uncaught top-level exception:
> Traceback (most recent call last):
>   File "/root/s3ql/bin/s3qlrm", line 21, in <module>
>     s3ql.remove.main(sys.argv[1:])
>   File "/root/s3ql/src/s3ql/remove.py", line 74, in main
>     pyfuse3.setxattr(ctrlfile, 'rmtree', cmd)
>   File "src/pyfuse3.pyx", line 629, in pyfuse3.setxattr
> OSError: [Errno 22] Invalid argument: 'mnt/test/.__s3ql__ctrl__'
>
> All packages are from debian/testing, except python3-dugong, which is
> from bullseye (oldstable), becase apparently it was removed from the
> recent release.

This sounds like you're using s3qlrm from one version of S3QL, and
mount.s3ql from a different one.

What do you mean with "all packages are from debian/testing"? If this
includes S3QL, then it won't work: you need the one from the Git
repository above because it's instrumented to reproduce the problem
reliably.

If you want to keep the Python packages separate, the best way is to use
a virtual environment:

# mkdir ~/s3ql-python-env
# python3 -m venv --system-side-packages ~/s3ql-python-env
# ~/s3ql-python-env/bin/python -m pip install --upgrade cryptography defusedxml apsw trio pyfuse3 dugong pytest requests cython
# ~/s3ql-python-env/bin/python setup.py build_cython build_ext --inplace
# ~/s3ql-python-env/bin/python bin/mount.s3ql [...]
# ~/s3ql-python-env/bin/python bin/s3qlrm [...]



Best,
-Nikolaus



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux