Index: sys/fs/fuse/fuse_internal.c =================================================================== --- sys/fs/fuse/fuse_internal.c (revisione 239996) +++ sys/fs/fuse/fuse_internal.c (copia locale) @@ -650,6 +650,7 @@ out: if (err) { + data->where = 5; fdata_set_dead(data); } FUSE_LOCK(); Index: sys/fs/fuse/fuse_vnops.c =================================================================== --- sys/fs/fuse/fuse_vnops.c (revisione 239996) +++ sys/fs/fuse/fuse_vnops.c (copia locale) @@ -493,6 +493,7 @@ } if (!(dataflags & FSESS_INITED)) { if (!vnode_isvroot(vp)) { + fuse_get_mpdata(vnode_mount(vp))->where = 8; fdata_set_dead(fuse_get_mpdata(vnode_mount(vp))); err = ENOTCONN; debug_printf("fuse_getattr b: returning ENOTCONN\n"); Index: sys/fs/fuse/fuse_ipc.c =================================================================== --- sys/fs/fuse/fuse_ipc.c (revisione 239996) +++ sys/fs/fuse/fuse_ipc.c (copia locale) @@ -487,8 +487,10 @@ if (!(data->dataflags & FSESS_INITED) && data->ticketer > 2) { err = msleep(&data->ticketer, &fuse_mtx, PCATCH | PDROP, "fu_ini", 0); - if (err) + if (err) { + data->where = 6; fdata_set_dead(data); + } } else FUSE_UNLOCK(); } Index: sys/fs/fuse/fuse_vfsops.c =================================================================== --- sys/fs/fuse/fuse_vfsops.c (revisione 239996) +++ sys/fs/fuse/fuse_vfsops.c (copia locale) @@ -328,6 +328,7 @@ mp->mnt_data = data; data->ref++; data->mp = mp; + data->where = 0; data->dataflags |= mntopts; data->max_read = max_read; data->daemon_timeout = daemon_timeout; @@ -415,6 +416,7 @@ err = fdisp_wait_answ(&fdi); fdisp_destroy(&fdi); + data->where = 7; fdata_set_dead(data); alreadydead: Index: sys/fs/fuse/fuse_ipc.h =================================================================== --- sys/fs/fuse/fuse_ipc.h (revisione 239996) +++ sys/fs/fuse/fuse_ipc.h (copia locale) @@ -194,6 +194,7 @@ int daemon_timeout; uint64_t notimpl; + int where; }; #define FSESS_DEAD 0x0001 /* session is to be closed */ Index: sys/fs/fuse/fuse_device.c =================================================================== --- sys/fs/fuse/fuse_device.c (revisione 239996) +++ sys/fs/fuse/fuse_device.c (copia locale) @@ -150,6 +150,7 @@ return (error); if (!data) panic("no fuse data upon fuse device close"); + data->where = 1; fdata_set_dead(data); FUSE_LOCK(); @@ -300,6 +301,7 @@ * fallacy as loud as possible... */ if (uio->uio_resid < buflen[i]) { + data->where = 2; fdata_set_dead(data); DEBUG2G("daemon is stupid, kick it off...\n"); err = ENODEV; @@ -361,6 +363,7 @@ if (uio->uio_resid < sizeof(struct fuse_out_header)) { DEBUG("got less than a header!\n"); + data->where = 3; fdata_set_dead(data); return (EINVAL); } @@ -375,6 +378,7 @@ * "unique" value in the header. */ if ((err = fuse_ohead_audit(&ohead, uio))) { + data->where = 4; fdata_set_dead(data); return (err); }