From eff35e60b63331e3e10f921792baa10b236a721d Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Fri, 4 Jan 2019 22:22:24 +0100 Subject: fusefrontend: fix setting xattrs on directories Directories cannot be opened read-write. Retry with RDONLY. --- internal/fusefrontend/xattr.go | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'internal') diff --git a/internal/fusefrontend/xattr.go b/internal/fusefrontend/xattr.go index ad1c330..2248bad 100644 --- a/internal/fusefrontend/xattr.go +++ b/internal/fusefrontend/xattr.go @@ -71,6 +71,10 @@ func (fs *FS) SetXAttr(relPath string, attr string, data []byte, flags int, cont // O_NONBLOCK to not block on FIFOs. fd, err := fs.openBackingFile(relPath, syscall.O_WRONLY|syscall.O_NONBLOCK) + // Directories cannot be opened read-write. Retry. + if err == syscall.EISDIR { + fd, err = fs.openBackingFile(relPath, syscall.O_RDONLY|syscall.O_DIRECTORY|syscall.O_NONBLOCK) + } if err != nil { return fuse.ToStatus(err) } @@ -100,6 +104,10 @@ func (fs *FS) RemoveXAttr(relPath string, attr string, context *fuse.Context) fu // O_NONBLOCK to not block on FIFOs. fd, err := fs.openBackingFile(relPath, syscall.O_WRONLY|syscall.O_NONBLOCK) + // Directories cannot be opened read-write. Retry. + if err == syscall.EISDIR { + fd, err = fs.openBackingFile(relPath, syscall.O_RDONLY|syscall.O_DIRECTORY|syscall.O_NONBLOCK) + } if err != nil { return fuse.ToStatus(err) } -- cgit v1.2.3