• Jakob Unterwurzacher's avatar
    fuse: implement GETATTR for pollHack · d13ebc4a
    Jakob Unterwurzacher authored
    When the default_permissions option is passed to the kernel,
    it issues a extra GETATTR on the .go-fuse-epoll-hack node.
    
    Rejecting that with EIO makes `syscall.Creat` in `pollHack` fail,
    ultimately erroring out during mount.
    
    $ loopback -allow-other -debug b a
    16:06:39.576856 rx 2: INIT i0 {7.31 Ra 0x20000 NO_OPEN_SUPPORT,PARALLEL_DIROPS,ABORT_ERROR,EXPLICIT_INVAL_DATA,SPLICE_WRITE,READDIRPLUS,ASYNC_DIO,DONT_MASK,NO_OPENDIR_SUPPORT,AUTO_INVAL_DATA,READDIRPLUS_AUTO,POSIX_ACL,HANDLE_KILLPRIV,MAX_PAGES,ATOMIC_O_TRUNC,EXPORT_SUPPORT,SPLICE_MOVE,BIG_WRITES,SPLICE_READ,FLOCK_LOCKS,IOCTL_DIR,WRITEBACK_CACHE,ASYNC_READ,POSIX_LOCKS,CACHE_SYMLINKS}
    16:06:39.576999 tx 2:     OK, {7.28 Ra 0x20000 AUTO_INVAL_DATA,BIG_WRITES,ASYNC_READ,NO_OPEN_SUPPORT,PARALLEL_DIROPS,READDIRPLUS 0/0 Wr 0x10000 Tg 0x0}
    16:06:39.578670 rx 4: GETATTR i1 {Fh 0}
    16:06:39.578717 rx 6: GETATTR i1 {Fh 0}
    16:06:39.578735 tx 4:     OK, {tA=1s {M040755 SZ=40 L=2 1026:1026 B0*4096 i0:1 A 1577370827.990394 M 1577370827.990394 C 1577370827.990394}}
    16:06:39.578765 tx 6:     OK, {tA=1s {M040755 SZ=40 L=2 1026:1026 B0*4096 i0:1 A 1577370827.990394 M 1577370827.990394 C 1577370827.990394}}
    16:06:39.579028 rx 8: LOOKUP i1 [".go-fuse-epoll-hack"] 20b
    16:06:39.579053 tx 8:     2=no such file or directory, {i0 g0 tE=0s tA=0s {M00 SZ=0 L=0 0:0 B0*0 i0:0 A 0.000000 M 0.000000 C 0.000000}}
    16:06:39.579087 rx 10: CREATE i1 {0100100 [WRONLY,TRUNC,CREAT,0x8000] (022)} [".go-fuse-epoll-hack"] 20b
    16:06:39.579113 tx 10:     OK, {i18446744073709551615 g0 {M0100644 SZ=0 L=1 0:0 B0*0 i0:18446744073709551615 A 0.000000 M 0.000000 C 0.000000} &{18446744073709551615 0 0}}
    16:06:39.579199 rx 14: GETATTR i1 {Fh 0}
    16:06:39.579205 rx 12: GETATTR i18446744073709551615 {Fh 0}
    16:06:39.579216 tx 14:     OK, {tA=1s {M040755 SZ=40 L=2 1026:1026 B0*4096 i0:1 A 1577370827.990394 M 1577370827.990394 C 1577370827.990394}}
    16:06:39.579237 rx 16: LOOKUP i1 [".go-fuse-epoll-hack"] 20b
    16:06:39.579242 tx 12:     5=input/output error, {tA=0s {M00 SZ=0 L=0 0:0 B0*0 i0:0 A 0.000000 M 0.000000 C 0.000000}}
    16:06:39.579247 tx 16:     2=no such file or directory, {i0 g0 tE=0s tA=0s {M00 SZ=0 L=0 0:0 B0*0 i0:0 A 0.000000 M 0.000000 C 0.000000}}
    16:06:39.579270 Mount fail: input/output error
    16:06:39.579271 rx 20: LOOKUP i1 [".Trash"] 7b
    
    Change-Id: I20024baf2e8f386b637abbd236b188bfdfa8579f
    d13ebc4a
server.go 21.3 KB