New Upstream Release - python-llfuse

Ready changes

Summary

Merged new upstream version: 1.4.2+dfsg (was: 1.4.1+dfsg).

Resulting package

Built on 2022-12-14T12:54 (took 3m21s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases python-llfuse-docapt install -t fresh-releases python3-llfuse-dbgsymapt install -t fresh-releases python3-llfuse

Lintian Result

Diff

diff --git a/Changes.rst b/Changes.rst
index 08cbf5b..2a36cc9 100644
--- a/Changes.rst
+++ b/Changes.rst
@@ -4,9 +4,14 @@
 
 .. currentmodule:: llfuse
 
-**WARNING**: Python-LLFUSE is no longer actively developed. Unless you are stuck
-with Python 2.x or libfuse 2.x, we recommended to use the pyfuse3_
-module instead.
+**WARNING**: Python-LLFUSE is no longer actively developed.
+
+Release 1.4.2 (2022-05-31)
+==========================
+
+* cythonize with Cython 0.29.30 (brings python 3.11 support)
+* also test on python 3.10 and 3.11-dev
+* remove "nonempty" default mount option, seems unsupported now.
 
 Release 1.4.1 (2021-01-31)
 ==========================
@@ -49,14 +54,14 @@ Release 1.3.6 (2019-02-14)
 * No change upload.
 
 * Python-LLFUSE is no longer actively maintained. Unless you are stuck
-  with Python 2.x or libfuse 2.x, we recommended to use the pyfuse3_
+  with Python 2.x or libfuse 2.x, we recommended to use the pyfuse3
   module instead.
 
 Release 1.3.5 (2018-08-30)
 ==========================
 
-* Add `handle_signals` option to `llfuse.main`
-* Several fixes to `examples/passthroughfs.py`
+* Add ``handle_signals`` option to ``llfuse.main``
+* Several fixes to ``examples/passthroughfs.py``
 * Now compatible with Python 3.7
 
 Release 1.3.4 (2018-04-29)
diff --git a/PKG-INFO b/PKG-INFO
index 6824097..7d12239 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: llfuse
-Version: 1.4.1
+Version: 1.4.2
 Summary: Python bindings for the low-level FUSE API
 Home-page: https://github.com/python-llfuse/python-llfuse/
 Author: Nikolaus Rath
@@ -21,9 +21,6 @@ Description: ..
         
         Python-LLFUSE is no longer actively developed and just receiving
         community-contributed maintenance to keep it alive for some time.
-        Unless you are stuck with Python 2.x or libfuse 2.x, we recommend
-        to use the pyfuse3_ module instead - see pyfuse3_porting_ for some
-        hints. If you are stuck on Python 2.x, use llfuse<1.4.0.
         
         Python-LLFUSE is a set of Python bindings for the low level FUSE_
         API. It requires at least FUSE 2.8.0 and supports both Python 2.x and
@@ -35,9 +32,6 @@ Description: ..
         directory of the Python-LLFUSE tarball.
         
         
-        .. _pyfuse3: https://github.com/libfuse/pyfuse3
-        .. _pyfuse3_porting: https://github.com/python-llfuse/python-llfuse/issues/33
-        
         Getting Help
         ------------
         
@@ -74,6 +68,8 @@ Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Classifier: Topic :: System :: Filesystems
 Classifier: License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)
diff --git a/README.rst b/README.rst
index 2007a6c..ef822d2 100644
--- a/README.rst
+++ b/README.rst
@@ -13,9 +13,6 @@ The Python-LLFUSE Module
 
 Python-LLFUSE is no longer actively developed and just receiving
 community-contributed maintenance to keep it alive for some time.
-Unless you are stuck with Python 2.x or libfuse 2.x, we recommend
-to use the pyfuse3_ module instead - see pyfuse3_porting_ for some
-hints. If you are stuck on Python 2.x, use llfuse<1.4.0.
 
 Python-LLFUSE is a set of Python bindings for the low level FUSE_
 API. It requires at least FUSE 2.8.0 and supports both Python 2.x and
@@ -27,9 +24,6 @@ can be `read online`__ and is also included in the ``doc/html``
 directory of the Python-LLFUSE tarball.
 
 
-.. _pyfuse3: https://github.com/libfuse/pyfuse3
-.. _pyfuse3_porting: https://github.com/python-llfuse/python-llfuse/issues/33
-
 Getting Help
 ------------
 
diff --git a/debian/changelog b/debian/changelog
index 68ca6e2..57120ce 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,9 @@
-python-llfuse (1.4.1+dfsg-3) UNRELEASED; urgency=medium
+python-llfuse (1.4.2+dfsg-1) UNRELEASED; urgency=medium
 
   * Update standards version to 4.6.1, no changes needed.
+  * New upstream release.
 
- -- Debian Janitor <janitor@jelmer.uk>  Thu, 17 Nov 2022 02:53:48 -0000
+ -- Debian Janitor <janitor@jelmer.uk>  Wed, 14 Dec 2022 12:51:30 -0000
 
 python-llfuse (1.4.1+dfsg-2) unstable; urgency=medium
 
diff --git a/debian/patches/0002-Use-cython3-instead-of-cython-command.patch b/debian/patches/0002-Use-cython3-instead-of-cython-command.patch
index 321b73d..e9af466 100644
--- a/debian/patches/0002-Use-cython3-instead-of-cython-command.patch
+++ b/debian/patches/0002-Use-cython3-instead-of-cython-command.patch
@@ -12,11 +12,11 @@ python-cython, we use 'cython3' instead.
  setup.py | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
 
-diff --git a/setup.py b/setup.py
-index f710102..fff65fd 100755
---- a/setup.py
-+++ b/setup.py
-@@ -218,7 +218,7 @@ class build_cython(setuptools.Command):
+Index: python-llfuse.git/setup.py
+===================================================================
+--- python-llfuse.git.orig/setup.py
++++ python-llfuse.git/setup.py
+@@ -220,7 +220,7 @@ class build_cython(setuptools.Command):
  
      def run(self):
          try:
@@ -25,7 +25,7 @@ index f710102..fff65fd 100755
                                                universal_newlines=True,
                                                stderr=subprocess.STDOUT)
          except OSError:
-@@ -229,7 +229,7 @@ class build_cython(setuptools.Command):
+@@ -231,7 +231,7 @@ class build_cython(setuptools.Command):
              # in fact, we need a very recent Cython version (like 0.29.21) to support py39
              raise SystemExit('Need Cython 0.29 or newer, found ' + version)
  
diff --git a/debian/patches/0003-Skip-extended-attribute-tests-under-GNU-kFreeBSD.patch b/debian/patches/0003-Skip-extended-attribute-tests-under-GNU-kFreeBSD.patch
index 2fc0362..6969b49 100644
--- a/debian/patches/0003-Skip-extended-attribute-tests-under-GNU-kFreeBSD.patch
+++ b/debian/patches/0003-Skip-extended-attribute-tests-under-GNU-kFreeBSD.patch
@@ -11,10 +11,10 @@ that return ENOTIMPL.
  test/test_api.py | 4 ++++
  1 file changed, 4 insertions(+)
 
-diff --git a/test/test_api.py b/test/test_api.py
-index 733111b..7b9312d 100755
---- a/test/test_api.py
-+++ b/test/test_api.py
+Index: python-llfuse.git/test/test_api.py
+===================================================================
+--- python-llfuse.git.orig/test/test_api.py
++++ python-llfuse.git/test/test_api.py
 @@ -22,6 +22,7 @@ import pytest
  import platform
  from copy import copy
diff --git a/debian/patches/0004-Ignore-exceptions-during-interpreter-shutdown.patch b/debian/patches/0004-Ignore-exceptions-during-interpreter-shutdown.patch
index 47e8c71..e3e1725 100644
--- a/debian/patches/0004-Ignore-exceptions-during-interpreter-shutdown.patch
+++ b/debian/patches/0004-Ignore-exceptions-during-interpreter-shutdown.patch
@@ -9,11 +9,11 @@ caused by a bug in Python. Closes: #851724.
  test/conftest.py | 7 +++++++
  1 file changed, 7 insertions(+)
 
-diff --git a/test/conftest.py b/test/conftest.py
-index fa19c6a..d1e885f 100644
---- a/test/conftest.py
-+++ b/test/conftest.py
-@@ -21,6 +21,13 @@ def register_false_checklog_pos(reg_output):
+Index: python-llfuse.git/test/conftest.py
+===================================================================
+--- python-llfuse.git.orig/test/conftest.py
++++ python-llfuse.git/test/conftest.py
+@@ -21,6 +21,13 @@ def register_false_checklog_pos(reg_outp
      reg_output(r'^==\d+== For counts of detected and suppressed errors, rerun with: -v')
      reg_output(r'^==\d+== ERROR SUMMARY: 0 errors from 0 contexts')
  
diff --git a/debian/patches/mips_dev_t.diff b/debian/patches/mips_dev_t.diff
index 3b3335b..6a85ea7 100644
--- a/debian/patches/mips_dev_t.diff
+++ b/debian/patches/mips_dev_t.diff
@@ -23,18 +23,16 @@ Upstream is not interested in this change for obvious reasons.
  create mode 100644 Include/posix/__init__.py
  create mode 100644 Include/posix/stat.pxd
 
-diff --git a/Include/posix/__init__.py b/Include/posix/__init__.py
-new file mode 100644
-index 0000000..ea30561
+Index: python-llfuse.git/Include/posix/__init__.py
+===================================================================
 --- /dev/null
-+++ b/Include/posix/__init__.py
++++ python-llfuse.git/Include/posix/__init__.py
 @@ -0,0 +1 @@
 +#empty
-diff --git a/Include/posix/stat.pxd b/Include/posix/stat.pxd
-new file mode 100644
-index 0000000..a46f510
+Index: python-llfuse.git/Include/posix/stat.pxd
+===================================================================
 --- /dev/null
-+++ b/Include/posix/stat.pxd
++++ python-llfuse.git/Include/posix/stat.pxd
 @@ -0,0 +1,85 @@
 +from posix.types cimport (blkcnt_t, blksize_t, dev_t, gid_t, ino_t, mode_t,
 +                          nlink_t, off_t, time_t, uid_t)
diff --git a/rst/conf.py b/rst/conf.py
index 644992b..fd8f42e 100644
--- a/rst/conf.py
+++ b/rst/conf.py
@@ -13,7 +13,12 @@
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
 # documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.append(os.path.abspath('.'))
+import os, sys
+basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
+# we need util/ so the sphinx_cython extension is found:
+sys.path.insert(0, os.path.join(basedir, 'util'))
+# we need src/ also, it is needed so llfuse can be imported to generate api docs:
+sys.path.insert(0, os.path.join(basedir, 'src'))
 
 #pylint: disable-all
 #@PydevCodeAnalysisIgnore
diff --git a/setup.py b/setup.py
index f710102..d4c51ea 100755
--- a/setup.py
+++ b/setup.py
@@ -58,7 +58,7 @@ if DEVELOPER_MODE:
 # to work properly
 sys.path.insert(0, os.path.join(basedir, 'src'))
 
-LLFUSE_VERSION = '1.4.1'
+LLFUSE_VERSION = '1.4.2'
 
 def main():
 
@@ -133,6 +133,8 @@ def main():
                        'Programming Language :: Python :: 3.7',
                        'Programming Language :: Python :: 3.8',
                        'Programming Language :: Python :: 3.9',
+                       'Programming Language :: Python :: 3.10',
+                       'Programming Language :: Python :: 3.11',
                        'Topic :: Software Development :: Libraries :: Python Modules',
                        'Topic :: System :: Filesystems',
                        'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)',
diff --git a/src/fuse_api.pxi b/src/fuse_api.pxi
index 9fba969..23c69df 100644
--- a/src/fuse_api.pxi
+++ b/src/fuse_api.pxi
@@ -195,12 +195,8 @@ def getxattr(path, name, size_t size_guess=128, namespace='user'):
     finally:
         stdlib.free(buf)
 
-if os.uname()[0] == 'Darwin':
-    default_options = frozenset(('big_writes', 'default_permissions',
-                                 'no_splice_read', 'splice_write', 'splice_move'))
-else:
-    default_options = frozenset(('big_writes', 'nonempty', 'default_permissions',
-                                 'no_splice_read', 'splice_write', 'splice_move'))
+default_options = frozenset(('big_writes', 'default_permissions',
+                             'no_splice_read', 'splice_write', 'splice_move'))
 
 def init(ops, mountpoint, options=default_options):
     '''Initialize and mount FUSE file system
diff --git a/src/llfuse.c b/src/llfuse.c
index 8609410..32a75d2 100644
--- a/src/llfuse.c
+++ b/src/llfuse.c
@@ -1,14 +1,16 @@
-/* Generated by Cython 0.29.21 */
+/* Generated by Cython 0.29.30 */
 
+#ifndef PY_SSIZE_T_CLEAN
 #define PY_SSIZE_T_CLEAN
+#endif /* PY_SSIZE_T_CLEAN */
 #include "Python.h"
 #ifndef Py_PYTHON_H
     #error Python headers needed to compile C extensions, please install development version of Python.
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_21"
-#define CYTHON_HEX_VERSION 0x001D15F0
+#define CYTHON_ABI "0_29_30"
+#define CYTHON_HEX_VERSION 0x001D1EF0
 #define CYTHON_FUTURE_DIVISION 1
 #include <stddef.h>
 #ifndef offsetof
@@ -83,6 +85,9 @@
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
+  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
+  #endif
 #elif defined(PYSTON_VERSION)
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 1
@@ -124,6 +129,9 @@
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
+  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
+  #endif
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 0
@@ -155,7 +163,7 @@
   #ifndef CYTHON_USE_UNICODE_INTERNALS
     #define CYTHON_USE_UNICODE_INTERNALS 1
   #endif
-  #if PY_VERSION_HEX < 0x030300F0
+  #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
     #undef CYTHON_USE_UNICODE_WRITER
     #define CYTHON_USE_UNICODE_WRITER 0
   #elif !defined(CYTHON_USE_UNICODE_WRITER)
@@ -170,11 +178,14 @@
   #ifndef CYTHON_UNPACK_METHODS
     #define CYTHON_UNPACK_METHODS 1
   #endif
-  #ifndef CYTHON_FAST_THREAD_STATE
+  #if PY_VERSION_HEX >= 0x030B00A4
+    #undef CYTHON_FAST_THREAD_STATE
+    #define CYTHON_FAST_THREAD_STATE 0
+  #elif !defined(CYTHON_FAST_THREAD_STATE)
     #define CYTHON_FAST_THREAD_STATE 1
   #endif
   #ifndef CYTHON_FAST_PYCALL
-    #define CYTHON_FAST_PYCALL 1
+    #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030A0000)
   #endif
   #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
     #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
@@ -185,15 +196,23 @@
   #ifndef CYTHON_USE_DICT_VERSIONS
     #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
   #endif
-  #ifndef CYTHON_USE_EXC_INFO_STACK
+  #if PY_VERSION_HEX >= 0x030B00A4
+    #undef CYTHON_USE_EXC_INFO_STACK
+    #define CYTHON_USE_EXC_INFO_STACK 0
+  #elif !defined(CYTHON_USE_EXC_INFO_STACK)
     #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3)
   #endif
+  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
+  #endif
 #endif
 #if !defined(CYTHON_FAST_PYCCALL)
 #define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
 #endif
 #if CYTHON_USE_PYLONG_INTERNALS
-  #include "longintrepr.h"
+  #if PY_MAJOR_VERSION < 3
+    #include "longintrepr.h"
+  #endif
   #undef SHIFT
   #undef BASE
   #undef MASK
@@ -310,9 +329,68 @@
   #define __Pyx_DefaultClassType PyClass_Type
 #else
   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
-#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
-          PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+  #define __Pyx_DefaultClassType PyType_Type
+#if PY_VERSION_HEX >= 0x030B00A1
+    static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f,
+                                                    PyObject *code, PyObject *c, PyObject* n, PyObject *v,
+                                                    PyObject *fv, PyObject *cell, PyObject* fn,
+                                                    PyObject *name, int fline, PyObject *lnos) {
+        PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL;
+        PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL;
+        const char *fn_cstr=NULL;
+        const char *name_cstr=NULL;
+        PyCodeObject* co=NULL;
+        PyObject *type, *value, *traceback;
+        PyErr_Fetch(&type, &value, &traceback);
+        if (!(kwds=PyDict_New())) goto end;
+        if (!(argcount=PyLong_FromLong(a))) goto end;
+        if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end;
+        if (!(posonlyargcount=PyLong_FromLong(0))) goto end;
+        if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end;
+        if (!(kwonlyargcount=PyLong_FromLong(k))) goto end;
+        if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end;
+        if (!(nlocals=PyLong_FromLong(l))) goto end;
+        if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end;
+        if (!(stacksize=PyLong_FromLong(s))) goto end;
+        if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end;
+        if (!(flags=PyLong_FromLong(f))) goto end;
+        if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end;
+        if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end;
+        if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end;
+        if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end;
+        if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too;
+        if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here
+        if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too;
+        Py_XDECREF((PyObject*)co);
+        co = (PyCodeObject*)call_result;
+        call_result = NULL;
+        if (0) {
+            cleanup_code_too:
+            Py_XDECREF((PyObject*)co);
+            co = NULL;
+        }
+        end:
+        Py_XDECREF(kwds);
+        Py_XDECREF(argcount);
+        Py_XDECREF(posonlyargcount);
+        Py_XDECREF(kwonlyargcount);
+        Py_XDECREF(nlocals);
+        Py_XDECREF(stacksize);
+        Py_XDECREF(replace);
+        Py_XDECREF(call_result);
+        Py_XDECREF(empty);
+        if (type) {
+            PyErr_Restore(type, value, traceback);
+        }
+        return co;
+    }
 #else
   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
           PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
@@ -426,8 +504,12 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
 #endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
+  #if defined(PyUnicode_IS_READY)
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
+  #else
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #endif
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
   #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
@@ -436,7 +518,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
   #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
+  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+  #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+  #endif
   #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #endif
@@ -542,10 +628,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
 #if PY_VERSION_HEX < 0x030200A4
   typedef long Py_hash_t;
   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
-  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
+  #define __Pyx_PyInt_AsHash_t   __Pyx_PyIndex_AsHash_t
 #else
   #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
-  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
+  #define __Pyx_PyInt_AsHash_t   __Pyx_PyIndex_AsSsize_t
 #endif
 #if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func))
@@ -570,8 +656,10 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
     } __Pyx_PyAsyncMethodsStruct;
 #endif
 
-#if defined(WIN32) || defined(MS_WINDOWS)
-  #define _USE_MATH_DEFINES
+#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
+  #if !defined(_USE_MATH_DEFINES)
+    #define _USE_MATH_DEFINES
+  #endif
 #endif
 #include <math.h>
 #ifdef NAN
@@ -721,6 +809,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
     (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
 #if CYTHON_ASSUME_SAFE_MACROS
 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
 #else
@@ -876,7 +965,7 @@ typedef void (*__pyx_t_4libc_6signal_sighandler_t)(int);
 struct __pyx_t_6llfuse_worker_data_t;
 typedef struct __pyx_t_6llfuse_worker_data_t __pyx_t_6llfuse_worker_data_t;
 
-/* "src/fuse_api.pxi":371
+/* "src/fuse_api.pxi":367
  *         fuse_session_process_buf(session, &buf, ch)
  * 
  * ctypedef struct worker_data_t:             # <<<<<<<<<<<<<<
@@ -1126,13 +1215,21 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args,
 #ifndef Py_MEMBER_SIZE
 #define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
 #endif
+#if CYTHON_FAST_PYCALL
   static size_t __pyx_pyframe_localsplus_offset = 0;
   #include "frameobject.h"
+#if PY_VERSION_HEX >= 0x030b00a6
+  #ifndef Py_BUILD_CORE
+    #define Py_BUILD_CORE 1
+  #endif
+  #include "internal/pycore_frame.h"
+#endif
   #define __Pxy_PyFrame_Initialize_Offsets()\
     ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
      (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
   #define __Pyx_PyFrame_GetLocalsplus(frame)\
     (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
+#endif // CYTHON_FAST_PYCALL
 #endif
 
 /* PyObjectCall.proto */
@@ -1535,6 +1632,11 @@ static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr
 #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
 #endif
 
+/* GCCDiagnostics.proto */
+#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
+#define __Pyx_HAS_GCC_DIAGNOSTIC
+#endif
+
 /* BuildPyUnicode.proto */
 static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength,
                                                 int prepend_sign, char padding_char);
@@ -1548,6 +1650,12 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
         PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
         int has_cstart, int has_cstop, int wraparound);
 
+/* PySequenceContains.proto */
+static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) {
+    int result = PySequence_Contains(seq, item);
+    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
+}
+
 /* ImportFrom.proto */
 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
 
@@ -1660,26 +1768,50 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line,
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_gid_t(gid_t value);
 
+/* CIntFromPy.proto */
+static CYTHON_INLINE gid_t __Pyx_PyInt_As_gid_t(PyObject *);
+
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_pid_t(pid_t value);
 
+/* CIntFromPy.proto */
+static CYTHON_INLINE pid_t __Pyx_PyInt_As_pid_t(PyObject *);
+
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uid_t(uid_t value);
 
+/* CIntFromPy.proto */
+static CYTHON_INLINE uid_t __Pyx_PyInt_As_uid_t(PyObject *);
+
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_mode_t(mode_t value);
 
+/* CIntFromPy.proto */
+static CYTHON_INLINE mode_t __Pyx_PyInt_As_mode_t(PyObject *);
+
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value);
 
+/* CIntFromPy.proto */
+static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *);
+
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fuse_ino_t(fuse_ino_t value);
 
+/* CIntFromPy.proto */
+static CYTHON_INLINE fuse_ino_t __Pyx_PyInt_As_fuse_ino_t(PyObject *);
+
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
-/* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
+/* CIntFromPy.proto */
+static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
 
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value);
@@ -1690,62 +1822,20 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value);
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_dev_t(dev_t value);
 
-/* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_off_t(off_t value);
-
-/* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value);
-
-/* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_nlink_t(nlink_t value);
-
-/* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_blkcnt_t(blkcnt_t value);
+/* CIntFromPy.proto */
+static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *);
 
 /* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_blksize_t(blksize_t value);
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_off_t(off_t value);
 
-/* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_time_t(time_t value);
+/* CIntFromPy.proto */
+static CYTHON_INLINE off_t __Pyx_PyInt_As_off_t(PyObject *);
 
 /* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fsblkcnt_t(fsblkcnt_t value);
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value);
 
 /* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fsfilcnt_t(fsfilcnt_t value);
-
-/* CIntFromPy.proto */
-static CYTHON_INLINE gid_t __Pyx_PyInt_As_gid_t(PyObject *);
-
-/* CIntFromPy.proto */
-static CYTHON_INLINE pid_t __Pyx_PyInt_As_pid_t(PyObject *);
-
-/* CIntFromPy.proto */
-static CYTHON_INLINE uid_t __Pyx_PyInt_As_uid_t(PyObject *);
-
-/* CIntFromPy.proto */
-static CYTHON_INLINE mode_t __Pyx_PyInt_As_mode_t(PyObject *);
-
-/* CIntFromPy.proto */
-static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *);
-
-/* CIntFromPy.proto */
-static CYTHON_INLINE fuse_ino_t __Pyx_PyInt_As_fuse_ino_t(PyObject *);
-
-/* CIntFromPy.proto */
-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
-
-/* CIntFromPy.proto */
-static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *);
-
-/* CIntFromPy.proto */
-static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
-
-/* CIntFromPy.proto */
-static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *);
-
-/* CIntFromPy.proto */
-static CYTHON_INLINE off_t __Pyx_PyInt_As_off_t(PyObject *);
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
 
 /* CIntFromPy.proto */
 static CYTHON_INLINE ino_t __Pyx_PyInt_As_ino_t(PyObject *);
@@ -1753,24 +1843,42 @@ static CYTHON_INLINE ino_t __Pyx_PyInt_As_ino_t(PyObject *);
 /* CIntFromPy.proto */
 static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *);
 
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_nlink_t(nlink_t value);
+
 /* CIntFromPy.proto */
 static CYTHON_INLINE nlink_t __Pyx_PyInt_As_nlink_t(PyObject *);
 
 /* CIntFromPy.proto */
 static CYTHON_INLINE dev_t __Pyx_PyInt_As_dev_t(PyObject *);
 
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_blkcnt_t(blkcnt_t value);
+
 /* CIntFromPy.proto */
 static CYTHON_INLINE blkcnt_t __Pyx_PyInt_As_blkcnt_t(PyObject *);
 
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_blksize_t(blksize_t value);
+
 /* CIntFromPy.proto */
 static CYTHON_INLINE blksize_t __Pyx_PyInt_As_blksize_t(PyObject *);
 
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_time_t(time_t value);
+
 /* CIntFromPy.proto */
 static CYTHON_INLINE time_t __Pyx_PyInt_As_time_t(PyObject *);
 
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fsblkcnt_t(fsblkcnt_t value);
+
 /* CIntFromPy.proto */
 static CYTHON_INLINE fsblkcnt_t __Pyx_PyInt_As_fsblkcnt_t(PyObject *);
 
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fsfilcnt_t(fsfilcnt_t value);
+
 /* CIntFromPy.proto */
 static CYTHON_INLINE fsfilcnt_t __Pyx_PyInt_As_fsfilcnt_t(PyObject *);
 
@@ -2021,10 +2129,8 @@ static const char __pyx_k_split[] = "split";
 static const char __pyx_k_start[] = "start";
 static const char __pyx_k_str_t[] = "str_t";
 static const char __pyx_k_strip[] = "strip";
-static const char __pyx_k_uname[] = "uname";
 static const char __pyx_k_value[] = "value";
 static const char __pyx_k_write[] = "write";
-static const char __pyx_k_Darwin[] = "Darwin";
 static const char __pyx_k_Groups[] = "Groups:";
 static const char __pyx_k_Thread[] = "Thread";
 static const char __pyx_k_access[] = "access";
@@ -2109,7 +2215,6 @@ static const char __pyx_k_getxattr[] = "getxattr";
 static const char __pyx_k_name_new[] = "name_new";
 static const char __pyx_k_name_old[] = "name_old";
 static const char __pyx_k_new_name[] = "new_name";
-static const char __pyx_k_nonempty[] = "nonempty";
 static const char __pyx_k_pyx_type[] = "__pyx_type";
 static const char __pyx_k_qualname[] = "__qualname__";
 static const char __pyx_k_readlink[] = "readlink";
@@ -2289,9 +2394,7 @@ static const char __pyx_k_pthread_mutex_ulock_failed_with[] = "pthread_mutex_ulo
 static const char __pyx_k_self_ptr_cannot_be_converted_to[] = "self.ptr cannot be converted to a Python object for pickling";
 static const char __pyx_k_Calling_fuse_session_remove_chan[] = "Calling fuse_session_remove_chan";
 static const char __pyx_k_Global_lock_cannot_be_acquired_m[] = "Global lock cannot be acquired more than once";
-static const char __pyx_k_Incompatible_checksums_s_vs_0x22[] = "Incompatible checksums (%s vs 0x223b7a8 = (gid, pid, uid, umask))";
-static const char __pyx_k_Incompatible_checksums_s_vs_0x82[] = "Incompatible checksums (%s vs 0x822d368 = (attr_only, ino, kind, name))";
-static const char __pyx_k_Incompatible_checksums_s_vs_0xd4[] = "Incompatible checksums (%s vs 0xd41d8cd = ())";
+static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())";
 static const char __pyx_k_Lock_can_only_be_released_by_the[] = "Lock can only be released by the holding thread";
 static const char __pyx_k_Lock_still_taken_after_receiving[] = "Lock still taken after receiving unlock notification";
 static const char __pyx_k_NoLockManager_instances_can_t_be[] = "NoLockManager instances can't be pickled";
@@ -2328,6 +2431,8 @@ static const char __pyx_k_fuse_write_fuse_reply__failed_wi[] = "fuse_write(): fu
 static const char __pyx_k_handler_raised_s_exception_s_ter[] = "handler raised %s exception (%s), terminating main loop.";
 static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__";
 static const char __pyx_k_pthread_mutex_lock_failed_with_s[] = "pthread_mutex_lock failed with %s";
+static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_2[] = "Incompatible checksums (0x%x vs (0x223b7a8, 0xe56624f, 0x8a019cd) = (gid, pid, uid, umask))";
+static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_3[] = "Incompatible checksums (0x%x vs (0x822d368, 0x6efe08a, 0xd633613) = (attr_only, ino, kind, name))";
 static const char __pyx_k_Only_one_exception_can_be_re_rai_2[] = "Only one exception can be re-raised, the following exception will be lost:";
 static PyObject *__pyx_kp_u_;
 static PyObject *__pyx_kp_u_Calling_fuse_lowlevel_new;
@@ -2337,7 +2442,6 @@ static PyObject *__pyx_kp_u_Calling_fuse_session_destroy;
 static PyObject *__pyx_kp_u_Calling_fuse_session_loop;
 static PyObject *__pyx_kp_u_Calling_fuse_session_remove_chan;
 static PyObject *__pyx_kp_u_Calling_fuse_unmount;
-static PyObject *__pyx_n_u_Darwin;
 static PyObject *__pyx_n_u_ENOATTR;
 static PyObject *__pyx_n_s_EntryAttributes;
 static PyObject *__pyx_kp_u_Exception_after_kill;
@@ -2346,9 +2450,9 @@ static PyObject *__pyx_n_s_FUSEError;
 static PyObject *__pyx_kp_u_FUSE_worker_thread_d_terminated;
 static PyObject *__pyx_kp_u_Global_lock_cannot_be_acquired_m;
 static PyObject *__pyx_kp_u_Groups;
-static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x22;
-static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x82;
-static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xd4;
+static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0;
+static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2;
+static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3;
 static PyObject *__pyx_kp_u_Initializing_llfuse;
 static PyObject *__pyx_n_s_Lock;
 static PyObject *__pyx_kp_u_Lock_can_only_be_released_by_the;
@@ -2597,7 +2701,6 @@ static PyObject *__pyx_n_s_new_name;
 static PyObject *__pyx_n_s_new_parent_inode;
 static PyObject *__pyx_kp_s_no_default___reduce___due_to_non;
 static PyObject *__pyx_n_u_no_splice_read;
-static PyObject *__pyx_n_u_nonempty;
 static PyObject *__pyx_n_s_notify_loop;
 static PyObject *__pyx_n_s_notify_store;
 static PyObject *__pyx_kp_b_o;
@@ -2706,7 +2809,6 @@ static PyObject *__pyx_n_s_threading;
 static PyObject *__pyx_n_s_timeout;
 static PyObject *__pyx_n_s_tmp;
 static PyObject *__pyx_n_s_traceback;
-static PyObject *__pyx_n_s_uname;
 static PyObject *__pyx_kp_u_unknown_flag_s_o;
 static PyObject *__pyx_n_s_unlink;
 static PyObject *__pyx_n_s_unmount;
@@ -2887,8 +2989,14 @@ static PyObject *__pyx_int_5;
 static PyObject *__pyx_int_30;
 static PyObject *__pyx_int_1000;
 static PyObject *__pyx_int_35895208;
+static PyObject *__pyx_int_116383882;
 static PyObject *__pyx_int_136500072;
+static PyObject *__pyx_int_144710093;
 static PyObject *__pyx_int_222419149;
+static PyObject *__pyx_int_224605715;
+static PyObject *__pyx_int_228825662;
+static PyObject *__pyx_int_238750788;
+static PyObject *__pyx_int_240542287;
 static PyObject *__pyx_int_1000000000;
 static PyObject *__pyx_k__26;
 static PyObject *__pyx_tuple__3;
@@ -2922,103 +3030,105 @@ static PyObject *__pyx_tuple__31;
 static PyObject *__pyx_tuple__33;
 static PyObject *__pyx_tuple__34;
 static PyObject *__pyx_tuple__35;
+static PyObject *__pyx_tuple__36;
 static PyObject *__pyx_tuple__37;
-static PyObject *__pyx_tuple__39;
-static PyObject *__pyx_tuple__41;
-static PyObject *__pyx_tuple__43;
-static PyObject *__pyx_tuple__45;
-static PyObject *__pyx_tuple__47;
-static PyObject *__pyx_tuple__49;
-static PyObject *__pyx_tuple__51;
-static PyObject *__pyx_tuple__53;
-static PyObject *__pyx_tuple__55;
-static PyObject *__pyx_tuple__57;
-static PyObject *__pyx_tuple__59;
-static PyObject *__pyx_tuple__61;
-static PyObject *__pyx_tuple__63;
-static PyObject *__pyx_tuple__65;
-static PyObject *__pyx_tuple__67;
-static PyObject *__pyx_tuple__69;
-static PyObject *__pyx_tuple__71;
-static PyObject *__pyx_tuple__73;
-static PyObject *__pyx_tuple__75;
-static PyObject *__pyx_tuple__77;
-static PyObject *__pyx_tuple__79;
-static PyObject *__pyx_tuple__81;
-static PyObject *__pyx_tuple__83;
-static PyObject *__pyx_tuple__85;
-static PyObject *__pyx_tuple__87;
-static PyObject *__pyx_tuple__89;
-static PyObject *__pyx_tuple__91;
-static PyObject *__pyx_tuple__93;
-static PyObject *__pyx_tuple__95;
-static PyObject *__pyx_tuple__97;
-static PyObject *__pyx_tuple__99;
-static PyObject *__pyx_tuple__101;
-static PyObject *__pyx_tuple__103;
-static PyObject *__pyx_tuple__105;
-static PyObject *__pyx_tuple__107;
+static PyObject *__pyx_tuple__38;
+static PyObject *__pyx_tuple__40;
+static PyObject *__pyx_tuple__42;
+static PyObject *__pyx_tuple__44;
+static PyObject *__pyx_tuple__46;
+static PyObject *__pyx_tuple__48;
+static PyObject *__pyx_tuple__50;
+static PyObject *__pyx_tuple__52;
+static PyObject *__pyx_tuple__54;
+static PyObject *__pyx_tuple__56;
+static PyObject *__pyx_tuple__58;
+static PyObject *__pyx_tuple__60;
+static PyObject *__pyx_tuple__62;
+static PyObject *__pyx_tuple__64;
+static PyObject *__pyx_tuple__66;
+static PyObject *__pyx_tuple__68;
+static PyObject *__pyx_tuple__70;
+static PyObject *__pyx_tuple__72;
+static PyObject *__pyx_tuple__74;
+static PyObject *__pyx_tuple__76;
+static PyObject *__pyx_tuple__78;
+static PyObject *__pyx_tuple__80;
+static PyObject *__pyx_tuple__82;
+static PyObject *__pyx_tuple__84;
+static PyObject *__pyx_tuple__86;
+static PyObject *__pyx_tuple__88;
+static PyObject *__pyx_tuple__90;
+static PyObject *__pyx_tuple__92;
+static PyObject *__pyx_tuple__94;
+static PyObject *__pyx_tuple__96;
+static PyObject *__pyx_tuple__98;
+static PyObject *__pyx_tuple__100;
+static PyObject *__pyx_tuple__102;
+static PyObject *__pyx_tuple__104;
+static PyObject *__pyx_tuple__106;
 static PyObject *__pyx_tuple__108;
-static PyObject *__pyx_tuple__109;
+static PyObject *__pyx_tuple__110;
 static PyObject *__pyx_tuple__111;
 static PyObject *__pyx_tuple__113;
 static PyObject *__pyx_tuple__115;
 static PyObject *__pyx_tuple__117;
-static PyObject *__pyx_tuple__121;
+static PyObject *__pyx_tuple__119;
 static PyObject *__pyx_tuple__123;
 static PyObject *__pyx_tuple__125;
 static PyObject *__pyx_tuple__127;
 static PyObject *__pyx_tuple__129;
 static PyObject *__pyx_tuple__131;
-static PyObject *__pyx_codeobj__36;
-static PyObject *__pyx_codeobj__38;
-static PyObject *__pyx_codeobj__40;
-static PyObject *__pyx_codeobj__42;
-static PyObject *__pyx_codeobj__44;
-static PyObject *__pyx_codeobj__46;
-static PyObject *__pyx_codeobj__48;
-static PyObject *__pyx_codeobj__50;
-static PyObject *__pyx_codeobj__52;
-static PyObject *__pyx_codeobj__54;
-static PyObject *__pyx_codeobj__56;
-static PyObject *__pyx_codeobj__58;
-static PyObject *__pyx_codeobj__60;
-static PyObject *__pyx_codeobj__62;
-static PyObject *__pyx_codeobj__64;
-static PyObject *__pyx_codeobj__66;
-static PyObject *__pyx_codeobj__68;
-static PyObject *__pyx_codeobj__70;
-static PyObject *__pyx_codeobj__72;
-static PyObject *__pyx_codeobj__74;
-static PyObject *__pyx_codeobj__76;
-static PyObject *__pyx_codeobj__78;
-static PyObject *__pyx_codeobj__80;
-static PyObject *__pyx_codeobj__82;
-static PyObject *__pyx_codeobj__84;
-static PyObject *__pyx_codeobj__86;
-static PyObject *__pyx_codeobj__88;
-static PyObject *__pyx_codeobj__90;
-static PyObject *__pyx_codeobj__92;
-static PyObject *__pyx_codeobj__94;
-static PyObject *__pyx_codeobj__96;
-static PyObject *__pyx_codeobj__98;
-static PyObject *__pyx_codeobj__100;
-static PyObject *__pyx_codeobj__102;
-static PyObject *__pyx_codeobj__104;
-static PyObject *__pyx_codeobj__106;
-static PyObject *__pyx_codeobj__110;
+static PyObject *__pyx_tuple__133;
+static PyObject *__pyx_codeobj__39;
+static PyObject *__pyx_codeobj__41;
+static PyObject *__pyx_codeobj__43;
+static PyObject *__pyx_codeobj__45;
+static PyObject *__pyx_codeobj__47;
+static PyObject *__pyx_codeobj__49;
+static PyObject *__pyx_codeobj__51;
+static PyObject *__pyx_codeobj__53;
+static PyObject *__pyx_codeobj__55;
+static PyObject *__pyx_codeobj__57;
+static PyObject *__pyx_codeobj__59;
+static PyObject *__pyx_codeobj__61;
+static PyObject *__pyx_codeobj__63;
+static PyObject *__pyx_codeobj__65;
+static PyObject *__pyx_codeobj__67;
+static PyObject *__pyx_codeobj__69;
+static PyObject *__pyx_codeobj__71;
+static PyObject *__pyx_codeobj__73;
+static PyObject *__pyx_codeobj__75;
+static PyObject *__pyx_codeobj__77;
+static PyObject *__pyx_codeobj__79;
+static PyObject *__pyx_codeobj__81;
+static PyObject *__pyx_codeobj__83;
+static PyObject *__pyx_codeobj__85;
+static PyObject *__pyx_codeobj__87;
+static PyObject *__pyx_codeobj__89;
+static PyObject *__pyx_codeobj__91;
+static PyObject *__pyx_codeobj__93;
+static PyObject *__pyx_codeobj__95;
+static PyObject *__pyx_codeobj__97;
+static PyObject *__pyx_codeobj__99;
+static PyObject *__pyx_codeobj__101;
+static PyObject *__pyx_codeobj__103;
+static PyObject *__pyx_codeobj__105;
+static PyObject *__pyx_codeobj__107;
+static PyObject *__pyx_codeobj__109;
 static PyObject *__pyx_codeobj__112;
 static PyObject *__pyx_codeobj__114;
 static PyObject *__pyx_codeobj__116;
 static PyObject *__pyx_codeobj__118;
-static PyObject *__pyx_codeobj__119;
 static PyObject *__pyx_codeobj__120;
+static PyObject *__pyx_codeobj__121;
 static PyObject *__pyx_codeobj__122;
 static PyObject *__pyx_codeobj__124;
 static PyObject *__pyx_codeobj__126;
 static PyObject *__pyx_codeobj__128;
 static PyObject *__pyx_codeobj__130;
 static PyObject *__pyx_codeobj__132;
+static PyObject *__pyx_codeobj__134;
 /* Late includes */
 
 /* "src/operations.pxi":28
@@ -39707,7 +39817,7 @@ static PyObject *__pyx_pf_6llfuse_6getxattr(CYTHON_UNUSED PyObject *__pyx_self,
  *     finally:
  *         stdlib.free(buf)             # <<<<<<<<<<<<<<
  * 
- * if os.uname()[0] == 'Darwin':
+ * default_options = frozenset(('big_writes', 'default_permissions',
  */
   /*finally:*/ {
     __pyx_L11_error:;
@@ -39777,8 +39887,8 @@ static PyObject *__pyx_pf_6llfuse_6getxattr(CYTHON_UNUSED PyObject *__pyx_self,
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":205
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
+/* "src/fuse_api.pxi":201
+ *                              'no_splice_read', 'splice_write', 'splice_move'))
  * 
  * def init(ops, mountpoint, options=default_options):             # <<<<<<<<<<<<<<
  *     '''Initialize and mount FUSE file system
@@ -39825,7 +39935,7 @@ static PyObject *__pyx_pw_6llfuse_9init(PyObject *__pyx_self, PyObject *__pyx_ar
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mountpoint)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("init", 0, 2, 3, 1); __PYX_ERR(3, 205, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("init", 0, 2, 3, 1); __PYX_ERR(3, 201, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
@@ -39835,7 +39945,7 @@ static PyObject *__pyx_pw_6llfuse_9init(PyObject *__pyx_self, PyObject *__pyx_ar
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) __PYX_ERR(3, 205, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) __PYX_ERR(3, 201, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -39853,7 +39963,7 @@ static PyObject *__pyx_pw_6llfuse_9init(PyObject *__pyx_self, PyObject *__pyx_ar
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("init", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 205, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("init", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 201, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("llfuse.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -39881,16 +39991,16 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("init", 0);
 
-  /* "src/fuse_api.pxi":227
+  /* "src/fuse_api.pxi":223
  *     '''
  * 
  *     log.debug('Initializing llfuse')             # <<<<<<<<<<<<<<
  *     cdef fuse_args f_args
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 227, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 227, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
@@ -39905,39 +40015,39 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   }
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_kp_u_Initializing_llfuse) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u_Initializing_llfuse);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 227, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/fuse_api.pxi":230
+  /* "src/fuse_api.pxi":226
  *     cdef fuse_args f_args
  * 
  *     if not isinstance(mountpoint, str_t):             # <<<<<<<<<<<<<<
  *         raise TypeError('*mountpoint_* argument must be of type str')
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_str_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 230, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_str_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 226, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PyObject_IsInstance(__pyx_v_mountpoint, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(3, 230, __pyx_L1_error)
+  __pyx_t_4 = PyObject_IsInstance(__pyx_v_mountpoint, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(3, 226, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_5 = ((!(__pyx_t_4 != 0)) != 0);
   if (unlikely(__pyx_t_5)) {
 
-    /* "src/fuse_api.pxi":231
+    /* "src/fuse_api.pxi":227
  * 
  *     if not isinstance(mountpoint, str_t):
  *         raise TypeError('*mountpoint_* argument must be of type str')             # <<<<<<<<<<<<<<
  * 
  *     global operations
  */
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 231, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 227, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(3, 231, __pyx_L1_error)
+    __PYX_ERR(3, 227, __pyx_L1_error)
 
-    /* "src/fuse_api.pxi":230
+    /* "src/fuse_api.pxi":226
  *     cdef fuse_args f_args
  * 
  *     if not isinstance(mountpoint, str_t):             # <<<<<<<<<<<<<<
@@ -39946,19 +40056,19 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
  */
   }
 
-  /* "src/fuse_api.pxi":239
+  /* "src/fuse_api.pxi":235
  *     global channel
  * 
  *     mountpoint_b = str2bytes(os.path.abspath(mountpoint))             # <<<<<<<<<<<<<<
  *     operations = ops
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 239, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 239, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_abspath); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 239, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_abspath); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
@@ -39973,10 +40083,10 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   }
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_mountpoint) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_mountpoint);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 239, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __pyx_f_6llfuse_str2bytes(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 239, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_6llfuse_str2bytes(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_XGOTREF(__pyx_v_6llfuse_mountpoint_b);
@@ -39984,7 +40094,7 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":240
+  /* "src/fuse_api.pxi":236
  * 
  *     mountpoint_b = str2bytes(os.path.abspath(mountpoint))
  *     operations = ops             # <<<<<<<<<<<<<<
@@ -39996,27 +40106,27 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   __Pyx_DECREF_SET(__pyx_v_6llfuse_operations, __pyx_v_ops);
   __Pyx_GIVEREF(__pyx_v_ops);
 
-  /* "src/fuse_api.pxi":242
+  /* "src/fuse_api.pxi":238
  *     operations = ops
  * 
  *     make_fuse_args(options, &f_args)             # <<<<<<<<<<<<<<
  *     log.debug('Calling fuse_mount')
  *     channel = fuse_mount(<char*>mountpoint_b, &f_args)
  */
-  __pyx_t_3 = __pyx_f_6llfuse_make_fuse_args(__pyx_v_options, (&__pyx_v_f_args)); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 242, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_6llfuse_make_fuse_args(__pyx_v_options, (&__pyx_v_f_args)); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 238, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":243
+  /* "src/fuse_api.pxi":239
  * 
  *     make_fuse_args(options, &f_args)
  *     log.debug('Calling fuse_mount')             # <<<<<<<<<<<<<<
  *     channel = fuse_mount(<char*>mountpoint_b, &f_args)
  *     if not channel:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 243, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 239, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 243, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 239, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = NULL;
@@ -40031,22 +40141,22 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   }
   __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_kp_u_Calling_fuse_mount) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_Calling_fuse_mount);
   __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 243, __pyx_L1_error)
+  if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 239, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":244
+  /* "src/fuse_api.pxi":240
  *     make_fuse_args(options, &f_args)
  *     log.debug('Calling fuse_mount')
  *     channel = fuse_mount(<char*>mountpoint_b, &f_args)             # <<<<<<<<<<<<<<
  *     if not channel:
  *         raise RuntimeError('fuse_mount failed')
  */
-  __pyx_t_6 = __Pyx_PyObject_AsWritableString(__pyx_v_6llfuse_mountpoint_b); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(3, 244, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_AsWritableString(__pyx_v_6llfuse_mountpoint_b); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(3, 240, __pyx_L1_error)
   __pyx_v_6llfuse_channel = fuse_mount(((char *)__pyx_t_6), (&__pyx_v_f_args));
 
-  /* "src/fuse_api.pxi":245
+  /* "src/fuse_api.pxi":241
  *     log.debug('Calling fuse_mount')
  *     channel = fuse_mount(<char*>mountpoint_b, &f_args)
  *     if not channel:             # <<<<<<<<<<<<<<
@@ -40056,20 +40166,20 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   __pyx_t_5 = ((!(__pyx_v_6llfuse_channel != 0)) != 0);
   if (unlikely(__pyx_t_5)) {
 
-    /* "src/fuse_api.pxi":246
+    /* "src/fuse_api.pxi":242
  *     channel = fuse_mount(<char*>mountpoint_b, &f_args)
  *     if not channel:
  *         raise RuntimeError('fuse_mount failed')             # <<<<<<<<<<<<<<
  * 
  *     log.debug('Calling fuse_lowlevel_new')
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 246, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 242, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(3, 246, __pyx_L1_error)
+    __PYX_ERR(3, 242, __pyx_L1_error)
 
-    /* "src/fuse_api.pxi":245
+    /* "src/fuse_api.pxi":241
  *     log.debug('Calling fuse_mount')
  *     channel = fuse_mount(<char*>mountpoint_b, &f_args)
  *     if not channel:             # <<<<<<<<<<<<<<
@@ -40078,16 +40188,16 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
  */
   }
 
-  /* "src/fuse_api.pxi":248
+  /* "src/fuse_api.pxi":244
  *         raise RuntimeError('fuse_mount failed')
  * 
  *     log.debug('Calling fuse_lowlevel_new')             # <<<<<<<<<<<<<<
  *     init_fuse_ops()
  *     session = fuse_lowlevel_new(&f_args, &fuse_ops, sizeof(fuse_ops), NULL)
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 248, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 244, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 248, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 244, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
@@ -40102,12 +40212,12 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   }
   __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_kp_u_Calling_fuse_lowlevel_new) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_kp_u_Calling_fuse_lowlevel_new);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 248, __pyx_L1_error)
+  if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 244, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":249
+  /* "src/fuse_api.pxi":245
  * 
  *     log.debug('Calling fuse_lowlevel_new')
  *     init_fuse_ops()             # <<<<<<<<<<<<<<
@@ -40116,7 +40226,7 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
  */
   __pyx_f_6llfuse_init_fuse_ops();
 
-  /* "src/fuse_api.pxi":250
+  /* "src/fuse_api.pxi":246
  *     log.debug('Calling fuse_lowlevel_new')
  *     init_fuse_ops()
  *     session = fuse_lowlevel_new(&f_args, &fuse_ops, sizeof(fuse_ops), NULL)             # <<<<<<<<<<<<<<
@@ -40125,7 +40235,7 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
  */
   __pyx_v_6llfuse_session = fuse_lowlevel_new((&__pyx_v_f_args), (&__pyx_v_6llfuse_fuse_ops), (sizeof(__pyx_v_6llfuse_fuse_ops)), NULL);
 
-  /* "src/fuse_api.pxi":251
+  /* "src/fuse_api.pxi":247
  *     init_fuse_ops()
  *     session = fuse_lowlevel_new(&f_args, &fuse_ops, sizeof(fuse_ops), NULL)
  *     if not session:             # <<<<<<<<<<<<<<
@@ -40135,30 +40245,30 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   __pyx_t_5 = ((!(__pyx_v_6llfuse_session != 0)) != 0);
   if (unlikely(__pyx_t_5)) {
 
-    /* "src/fuse_api.pxi":252
+    /* "src/fuse_api.pxi":248
  *     session = fuse_lowlevel_new(&f_args, &fuse_ops, sizeof(fuse_ops), NULL)
  *     if not session:
  *         fuse_unmount(<char*>mountpoint_b, channel)             # <<<<<<<<<<<<<<
  *         raise RuntimeError("fuse_lowlevel_new() failed")
  * 
  */
-    __pyx_t_6 = __Pyx_PyObject_AsWritableString(__pyx_v_6llfuse_mountpoint_b); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(3, 252, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_AsWritableString(__pyx_v_6llfuse_mountpoint_b); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(3, 248, __pyx_L1_error)
     fuse_unmount(((char *)__pyx_t_6), __pyx_v_6llfuse_channel);
 
-    /* "src/fuse_api.pxi":253
+    /* "src/fuse_api.pxi":249
  *     if not session:
  *         fuse_unmount(<char*>mountpoint_b, channel)
  *         raise RuntimeError("fuse_lowlevel_new() failed")             # <<<<<<<<<<<<<<
  * 
  *     log.debug('Calling fuse_session_add_chan')
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 253, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 249, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(3, 253, __pyx_L1_error)
+    __PYX_ERR(3, 249, __pyx_L1_error)
 
-    /* "src/fuse_api.pxi":251
+    /* "src/fuse_api.pxi":247
  *     init_fuse_ops()
  *     session = fuse_lowlevel_new(&f_args, &fuse_ops, sizeof(fuse_ops), NULL)
  *     if not session:             # <<<<<<<<<<<<<<
@@ -40167,16 +40277,16 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
  */
   }
 
-  /* "src/fuse_api.pxi":255
+  /* "src/fuse_api.pxi":251
  *         raise RuntimeError("fuse_lowlevel_new() failed")
  * 
  *     log.debug('Calling fuse_session_add_chan')             # <<<<<<<<<<<<<<
  *     fuse_session_add_chan(session, channel)
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 255, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 251, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 255, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 251, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = NULL;
@@ -40191,12 +40301,12 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   }
   __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_kp_u_Calling_fuse_session_add_chan) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_Calling_fuse_session_add_chan);
   __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 255, __pyx_L1_error)
+  if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 251, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":256
+  /* "src/fuse_api.pxi":252
  * 
  *     log.debug('Calling fuse_session_add_chan')
  *     fuse_session_add_chan(session, channel)             # <<<<<<<<<<<<<<
@@ -40205,7 +40315,7 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
  */
   fuse_session_add_chan(__pyx_v_6llfuse_session, __pyx_v_6llfuse_channel);
 
-  /* "src/fuse_api.pxi":258
+  /* "src/fuse_api.pxi":254
  *     fuse_session_add_chan(session, channel)
  * 
  *     pthread_mutex_init(&exc_info_mutex, NULL)             # <<<<<<<<<<<<<<
@@ -40214,8 +40324,8 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
  */
   (void)(pthread_mutex_init((&__pyx_v_6llfuse_exc_info_mutex), NULL));
 
-  /* "src/fuse_api.pxi":205
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
+  /* "src/fuse_api.pxi":201
+ *                              'no_splice_read', 'splice_write', 'splice_move'))
  * 
  * def init(ops, mountpoint, options=default_options):             # <<<<<<<<<<<<<<
  *     '''Initialize and mount FUSE file system
@@ -40237,7 +40347,7 @@ static PyObject *__pyx_pf_6llfuse_8init(CYTHON_UNUSED PyObject *__pyx_self, PyOb
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":260
+/* "src/fuse_api.pxi":256
  *     pthread_mutex_init(&exc_info_mutex, NULL)
  * 
  * def main(workers=None, handle_signals=True):             # <<<<<<<<<<<<<<
@@ -40289,7 +40399,7 @@ static PyObject *__pyx_pw_6llfuse_11main(PyObject *__pyx_self, PyObject *__pyx_a
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "main") < 0)) __PYX_ERR(3, 260, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "main") < 0)) __PYX_ERR(3, 256, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -40306,7 +40416,7 @@ static PyObject *__pyx_pw_6llfuse_11main(PyObject *__pyx_self, PyObject *__pyx_a
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("main", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 260, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("main", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 256, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("llfuse.main", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -40319,7 +40429,7 @@ static PyObject *__pyx_pw_6llfuse_11main(PyObject *__pyx_self, PyObject *__pyx_a
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":305
+/* "src/fuse_api.pxi":301
  *         if handle_signals:
  *             set_signal_handlers()
  *             on_exit.callback(lambda: restore_signal_handlers())             # <<<<<<<<<<<<<<
@@ -40350,7 +40460,7 @@ static PyObject *__pyx_lambda_funcdef_lambda(CYTHON_UNUSED PyObject *__pyx_self)
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("lambda", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_6llfuse_restore_signal_handlers(); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 305, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_6llfuse_restore_signal_handlers(); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 301, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -40367,7 +40477,7 @@ static PyObject *__pyx_lambda_funcdef_lambda(CYTHON_UNUSED PyObject *__pyx_self)
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":313
+/* "src/fuse_api.pxi":309
  *         on_exit.callback(_notify_queue.put, None, block=True, timeout=5)
  * 
  *         on_exit.callback(lambda: fuse_session_reset(session))             # <<<<<<<<<<<<<<
@@ -40398,7 +40508,7 @@ static PyObject *__pyx_lambda_funcdef_lambda1(CYTHON_UNUSED PyObject *__pyx_self
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("lambda1", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_void_to_None(fuse_session_reset(__pyx_v_6llfuse_session)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 313, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_void_to_None(fuse_session_reset(__pyx_v_6llfuse_session)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -40415,7 +40525,7 @@ static PyObject *__pyx_lambda_funcdef_lambda1(CYTHON_UNUSED PyObject *__pyx_self
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":260
+/* "src/fuse_api.pxi":256
  *     pthread_mutex_init(&exc_info_mutex, NULL)
  * 
  * def main(workers=None, handle_signals=True):             # <<<<<<<<<<<<<<
@@ -40446,7 +40556,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
   __Pyx_RefNannySetupContext("main", 0);
   __Pyx_INCREF(__pyx_v_workers);
 
-  /* "src/fuse_api.pxi":289
+  /* "src/fuse_api.pxi":285
  *     global exit_reason
  * 
  *     if session == NULL:             # <<<<<<<<<<<<<<
@@ -40456,20 +40566,20 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
   __pyx_t_1 = ((__pyx_v_6llfuse_session == NULL) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/fuse_api.pxi":290
+    /* "src/fuse_api.pxi":286
  * 
  *     if session == NULL:
  *         raise RuntimeError('Need to call init() before main()')             # <<<<<<<<<<<<<<
  * 
  *     if workers == 0:
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 290, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 286, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(3, 290, __pyx_L1_error)
+    __PYX_ERR(3, 286, __pyx_L1_error)
 
-    /* "src/fuse_api.pxi":289
+    /* "src/fuse_api.pxi":285
  *     global exit_reason
  * 
  *     if session == NULL:             # <<<<<<<<<<<<<<
@@ -40478,33 +40588,33 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
  */
   }
 
-  /* "src/fuse_api.pxi":292
+  /* "src/fuse_api.pxi":288
  *         raise RuntimeError('Need to call init() before main()')
  * 
  *     if workers == 0:             # <<<<<<<<<<<<<<
  *         raise ValueError('No workers is not a good idea')
  * 
  */
-  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_v_workers, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 292, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_v_workers, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(3, 292, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(3, 288, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/fuse_api.pxi":293
+    /* "src/fuse_api.pxi":289
  * 
  *     if workers == 0:
  *         raise ValueError('No workers is not a good idea')             # <<<<<<<<<<<<<<
  * 
  *     if workers is None:
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 293, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 289, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(3, 293, __pyx_L1_error)
+    __PYX_ERR(3, 289, __pyx_L1_error)
 
-    /* "src/fuse_api.pxi":292
+    /* "src/fuse_api.pxi":288
  *         raise RuntimeError('Need to call init() before main()')
  * 
  *     if workers == 0:             # <<<<<<<<<<<<<<
@@ -40513,7 +40623,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
  */
   }
 
-  /* "src/fuse_api.pxi":295
+  /* "src/fuse_api.pxi":291
  *         raise ValueError('No workers is not a good idea')
  * 
  *     if workers is None:             # <<<<<<<<<<<<<<
@@ -40524,7 +40634,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (__pyx_t_3) {
 
-    /* "src/fuse_api.pxi":297
+    /* "src/fuse_api.pxi":293
  *     if workers is None:
  *         # We may add some smartness here later.
  *         workers = 30             # <<<<<<<<<<<<<<
@@ -40534,7 +40644,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
     __Pyx_INCREF(__pyx_int_30);
     __Pyx_DECREF_SET(__pyx_v_workers, __pyx_int_30);
 
-    /* "src/fuse_api.pxi":295
+    /* "src/fuse_api.pxi":291
  *         raise ValueError('No workers is not a good idea')
  * 
  *     if workers is None:             # <<<<<<<<<<<<<<
@@ -40543,7 +40653,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
  */
   }
 
-  /* "src/fuse_api.pxi":301
+  /* "src/fuse_api.pxi":297
  *     # SIGKILL cannot be caught, so we can use it as a placeholder
  *     # for "regular exit".
  *     exit_reason = signal.SIGKILL             # <<<<<<<<<<<<<<
@@ -40552,7 +40662,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
  */
   __pyx_v_6llfuse_exit_reason = SIGKILL;
 
-  /* "src/fuse_api.pxi":302
+  /* "src/fuse_api.pxi":298
  *     # for "regular exit".
  *     exit_reason = signal.SIGKILL
  *     with contextlib.ExitStack() as on_exit:             # <<<<<<<<<<<<<<
@@ -40560,9 +40670,9 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
  *             set_signal_handlers()
  */
   /*with:*/ {
-    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_contextlib); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 302, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_contextlib); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 298, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ExitStack); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 302, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ExitStack); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 298, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = NULL;
@@ -40577,12 +40687,12 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
     }
     __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 302, __pyx_L1_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 298, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 302, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 298, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 302, __pyx_L6_error)
+    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 298, __pyx_L6_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_7 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -40596,7 +40706,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
     }
     __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 302, __pyx_L6_error)
+    if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 298, __pyx_L6_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = __pyx_t_5;
@@ -40614,37 +40724,37 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
           __pyx_v_on_exit = __pyx_t_4;
           __pyx_t_4 = 0;
 
-          /* "src/fuse_api.pxi":303
+          /* "src/fuse_api.pxi":299
  *     exit_reason = signal.SIGKILL
  *     with contextlib.ExitStack() as on_exit:
  *         if handle_signals:             # <<<<<<<<<<<<<<
  *             set_signal_handlers()
  *             on_exit.callback(lambda: restore_signal_handlers())
  */
-          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_handle_signals); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(3, 303, __pyx_L10_error)
+          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_handle_signals); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(3, 299, __pyx_L10_error)
           if (__pyx_t_3) {
 
-            /* "src/fuse_api.pxi":304
+            /* "src/fuse_api.pxi":300
  *     with contextlib.ExitStack() as on_exit:
  *         if handle_signals:
  *             set_signal_handlers()             # <<<<<<<<<<<<<<
  *             on_exit.callback(lambda: restore_signal_handlers())
  * 
  */
-            __pyx_t_4 = __pyx_f_6llfuse_set_signal_handlers(); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 304, __pyx_L10_error)
+            __pyx_t_4 = __pyx_f_6llfuse_set_signal_handlers(); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 300, __pyx_L10_error)
             __Pyx_GOTREF(__pyx_t_4);
             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-            /* "src/fuse_api.pxi":305
+            /* "src/fuse_api.pxi":301
  *         if handle_signals:
  *             set_signal_handlers()
  *             on_exit.callback(lambda: restore_signal_handlers())             # <<<<<<<<<<<<<<
  * 
  *         # Start notification handling thread
  */
-            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_on_exit, __pyx_n_s_callback); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 305, __pyx_L10_error)
+            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_on_exit, __pyx_n_s_callback); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 301, __pyx_L10_error)
             __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_4main_lambda, 0, __pyx_n_s_main_locals_lambda, NULL, __pyx_n_s_llfuse, __pyx_d, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 305, __pyx_L10_error)
+            __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_4main_lambda, 0, __pyx_n_s_main_locals_lambda, NULL, __pyx_n_s_llfuse, __pyx_d, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 301, __pyx_L10_error)
             __Pyx_GOTREF(__pyx_t_5);
             __pyx_t_7 = NULL;
             if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -40659,12 +40769,12 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
             __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
             __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
             __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-            if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 305, __pyx_L10_error)
+            if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 301, __pyx_L10_error)
             __Pyx_GOTREF(__pyx_t_4);
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-            /* "src/fuse_api.pxi":303
+            /* "src/fuse_api.pxi":299
  *     exit_reason = signal.SIGKILL
  *     with contextlib.ExitStack() as on_exit:
  *         if handle_signals:             # <<<<<<<<<<<<<<
@@ -40673,48 +40783,48 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
  */
           }
 
-          /* "src/fuse_api.pxi":308
+          /* "src/fuse_api.pxi":304
  * 
  *         # Start notification handling thread
  *         t = threading.Thread(target=_notify_loop)             # <<<<<<<<<<<<<<
  *         t.daemon = True
  *         t.start()
  */
-          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_threading); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 308, __pyx_L10_error)
+          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_threading); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 304, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Thread); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 308, __pyx_L10_error)
+          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Thread); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 304, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 308, __pyx_L10_error)
+          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 304, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_4);
-          __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_notify_loop); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 308, __pyx_L10_error)
+          __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_notify_loop); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 304, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_5);
-          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_target, __pyx_t_5) < 0) __PYX_ERR(3, 308, __pyx_L10_error)
+          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_target, __pyx_t_5) < 0) __PYX_ERR(3, 304, __pyx_L10_error)
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-          __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 308, __pyx_L10_error)
+          __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 304, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_5);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
           __pyx_v_t = __pyx_t_5;
           __pyx_t_5 = 0;
 
-          /* "src/fuse_api.pxi":309
+          /* "src/fuse_api.pxi":305
  *         # Start notification handling thread
  *         t = threading.Thread(target=_notify_loop)
  *         t.daemon = True             # <<<<<<<<<<<<<<
  *         t.start()
  *         on_exit.callback(_notify_queue.put, None, block=True, timeout=5)
  */
-          if (__Pyx_PyObject_SetAttrStr(__pyx_v_t, __pyx_n_s_daemon, Py_True) < 0) __PYX_ERR(3, 309, __pyx_L10_error)
+          if (__Pyx_PyObject_SetAttrStr(__pyx_v_t, __pyx_n_s_daemon, Py_True) < 0) __PYX_ERR(3, 305, __pyx_L10_error)
 
-          /* "src/fuse_api.pxi":310
+          /* "src/fuse_api.pxi":306
  *         t = threading.Thread(target=_notify_loop)
  *         t.daemon = True
  *         t.start()             # <<<<<<<<<<<<<<
  *         on_exit.callback(_notify_queue.put, None, block=True, timeout=5)
  * 
  */
-          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 310, __pyx_L10_error)
+          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 306, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_4);
           __pyx_t_2 = NULL;
           if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -40728,23 +40838,23 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
           }
           __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
           __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-          if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 310, __pyx_L10_error)
+          if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 306, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_5);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-          /* "src/fuse_api.pxi":311
+          /* "src/fuse_api.pxi":307
  *         t.daemon = True
  *         t.start()
  *         on_exit.callback(_notify_queue.put, None, block=True, timeout=5)             # <<<<<<<<<<<<<<
  * 
  *         on_exit.callback(lambda: fuse_session_reset(session))
  */
-          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_on_exit, __pyx_n_s_callback); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 311, __pyx_L10_error)
+          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_on_exit, __pyx_n_s_callback); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 307, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_5);
-          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_6llfuse__notify_queue, __pyx_n_s_put); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 311, __pyx_L10_error)
+          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_6llfuse__notify_queue, __pyx_n_s_put); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 307, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 311, __pyx_L10_error)
+          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 307, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_GIVEREF(__pyx_t_4);
           PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
@@ -40752,27 +40862,27 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
           __Pyx_GIVEREF(Py_None);
           PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None);
           __pyx_t_4 = 0;
-          __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 311, __pyx_L10_error)
+          __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 307, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_4);
-          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_block, Py_True) < 0) __PYX_ERR(3, 311, __pyx_L10_error)
-          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_timeout, __pyx_int_5) < 0) __PYX_ERR(3, 311, __pyx_L10_error)
-          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 311, __pyx_L10_error)
+          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_block, Py_True) < 0) __PYX_ERR(3, 307, __pyx_L10_error)
+          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_timeout, __pyx_int_5) < 0) __PYX_ERR(3, 307, __pyx_L10_error)
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 307, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-          /* "src/fuse_api.pxi":313
+          /* "src/fuse_api.pxi":309
  *         on_exit.callback(_notify_queue.put, None, block=True, timeout=5)
  * 
  *         on_exit.callback(lambda: fuse_session_reset(session))             # <<<<<<<<<<<<<<
  *         exc_info = None
  *         log.debug('Calling fuse_session_loop')
  */
-          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_on_exit, __pyx_n_s_callback); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 313, __pyx_L10_error)
+          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_on_exit, __pyx_n_s_callback); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 309, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_4main_1lambda1, 0, __pyx_n_s_main_locals_lambda, NULL, __pyx_n_s_llfuse, __pyx_d, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 313, __pyx_L10_error)
+          __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_4main_1lambda1, 0, __pyx_n_s_main_locals_lambda, NULL, __pyx_n_s_llfuse, __pyx_d, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 309, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_2);
           __pyx_t_5 = NULL;
           if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -40787,12 +40897,12 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
           __pyx_t_7 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2);
           __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 313, __pyx_L10_error)
+          if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 309, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-          /* "src/fuse_api.pxi":314
+          /* "src/fuse_api.pxi":310
  * 
  *         on_exit.callback(lambda: fuse_session_reset(session))
  *         exc_info = None             # <<<<<<<<<<<<<<
@@ -40804,16 +40914,16 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
           __Pyx_DECREF_SET(__pyx_v_6llfuse_exc_info, Py_None);
           __Pyx_GIVEREF(Py_None);
 
-          /* "src/fuse_api.pxi":315
+          /* "src/fuse_api.pxi":311
  *         on_exit.callback(lambda: fuse_session_reset(session))
  *         exc_info = None
  *         log.debug('Calling fuse_session_loop')             # <<<<<<<<<<<<<<
  *         if workers == 1:
  *             session_loop_single()
  */
-          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_log); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 315, __pyx_L10_error)
+          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_log); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 311, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 315, __pyx_L10_error)
+          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 311, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
           __pyx_t_4 = NULL;
@@ -40828,36 +40938,36 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
           }
           __pyx_t_7 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_kp_u_Calling_fuse_session_loop) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_Calling_fuse_session_loop);
           __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-          if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 315, __pyx_L10_error)
+          if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 311, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-          /* "src/fuse_api.pxi":316
+          /* "src/fuse_api.pxi":312
  *         exc_info = None
  *         log.debug('Calling fuse_session_loop')
  *         if workers == 1:             # <<<<<<<<<<<<<<
  *             session_loop_single()
  *         else:
  */
-          __pyx_t_7 = __Pyx_PyInt_EqObjC(__pyx_v_workers, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 316, __pyx_L10_error)
+          __pyx_t_7 = __Pyx_PyInt_EqObjC(__pyx_v_workers, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 312, __pyx_L10_error)
           __Pyx_GOTREF(__pyx_t_7);
-          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(3, 316, __pyx_L10_error)
+          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(3, 312, __pyx_L10_error)
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
           if (__pyx_t_3) {
 
-            /* "src/fuse_api.pxi":317
+            /* "src/fuse_api.pxi":313
  *         log.debug('Calling fuse_session_loop')
  *         if workers == 1:
  *             session_loop_single()             # <<<<<<<<<<<<<<
  *         else:
  *             session_loop_mt(workers)
  */
-            __pyx_t_7 = __pyx_f_6llfuse_session_loop_single(); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 317, __pyx_L10_error)
+            __pyx_t_7 = __pyx_f_6llfuse_session_loop_single(); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 313, __pyx_L10_error)
             __Pyx_GOTREF(__pyx_t_7);
             __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-            /* "src/fuse_api.pxi":316
+            /* "src/fuse_api.pxi":312
  *         exc_info = None
  *         log.debug('Calling fuse_session_loop')
  *         if workers == 1:             # <<<<<<<<<<<<<<
@@ -40867,7 +40977,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
             goto __pyx_L17;
           }
 
-          /* "src/fuse_api.pxi":319
+          /* "src/fuse_api.pxi":315
  *             session_loop_single()
  *         else:
  *             session_loop_mt(workers)             # <<<<<<<<<<<<<<
@@ -40875,13 +40985,13 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
  *     if exc_info:
  */
           /*else*/ {
-            __pyx_t_7 = __pyx_f_6llfuse_session_loop_mt(__pyx_v_workers); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 319, __pyx_L10_error)
+            __pyx_t_7 = __pyx_f_6llfuse_session_loop_mt(__pyx_v_workers); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 315, __pyx_L10_error)
             __Pyx_GOTREF(__pyx_t_7);
             __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
           }
           __pyx_L17:;
 
-          /* "src/fuse_api.pxi":302
+          /* "src/fuse_api.pxi":298
  *     # for "regular exit".
  *     exit_reason = signal.SIGKILL
  *     with contextlib.ExitStack() as on_exit:             # <<<<<<<<<<<<<<
@@ -40900,20 +41010,20 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
         /*except:*/ {
           __Pyx_AddTraceback("llfuse.main", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_2, &__pyx_t_4) < 0) __PYX_ERR(3, 302, __pyx_L12_except_error)
+          if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_2, &__pyx_t_4) < 0) __PYX_ERR(3, 298, __pyx_L12_except_error)
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_7, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 302, __pyx_L12_except_error)
+          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_7, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 298, __pyx_L12_except_error)
           __Pyx_GOTREF(__pyx_t_5);
           __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL);
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-          if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 302, __pyx_L12_except_error)
+          if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 298, __pyx_L12_except_error)
           __Pyx_GOTREF(__pyx_t_11);
           __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_11);
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-          if (__pyx_t_3 < 0) __PYX_ERR(3, 302, __pyx_L12_except_error)
+          if (__pyx_t_3 < 0) __PYX_ERR(3, 298, __pyx_L12_except_error)
           __pyx_t_1 = ((!(__pyx_t_3 != 0)) != 0);
           if (__pyx_t_1) {
             __Pyx_GIVEREF(__pyx_t_7);
@@ -40921,7 +41031,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
             __Pyx_XGIVEREF(__pyx_t_4);
             __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_2, __pyx_t_4);
             __pyx_t_7 = 0; __pyx_t_2 = 0; __pyx_t_4 = 0; 
-            __PYX_ERR(3, 302, __pyx_L12_except_error)
+            __PYX_ERR(3, 298, __pyx_L12_except_error)
           }
           __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
           __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -40947,7 +41057,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
         if (__pyx_t_6) {
           __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__3, NULL);
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-          if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 302, __pyx_L1_error)
+          if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 298, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_10);
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         }
@@ -40962,26 +41072,26 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
     __pyx_L21:;
   }
 
-  /* "src/fuse_api.pxi":321
+  /* "src/fuse_api.pxi":317
  *             session_loop_mt(workers)
  * 
  *     if exc_info:             # <<<<<<<<<<<<<<
  *         # Re-raise expression from request handler
  *         log.debug('Terminated main loop because request handler raised exception, re-raising..')
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_6llfuse_exc_info); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(3, 321, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_6llfuse_exc_info); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(3, 317, __pyx_L1_error)
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/fuse_api.pxi":323
+    /* "src/fuse_api.pxi":319
  *     if exc_info:
  *         # Re-raise expression from request handler
  *         log.debug('Terminated main loop because request handler raised exception, re-raising..')             # <<<<<<<<<<<<<<
  *         tmp = exc_info
  *         exc_info = None
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 323, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 319, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 323, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 319, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_2 = NULL;
@@ -40996,12 +41106,12 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
     }
     __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_2, __pyx_kp_u_Terminated_main_loop_because_req) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_kp_u_Terminated_main_loop_because_req);
     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 323, __pyx_L1_error)
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 319, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "src/fuse_api.pxi":324
+    /* "src/fuse_api.pxi":320
  *         # Re-raise expression from request handler
  *         log.debug('Terminated main loop because request handler raised exception, re-raising..')
  *         tmp = exc_info             # <<<<<<<<<<<<<<
@@ -41011,7 +41121,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
     __Pyx_INCREF(__pyx_v_6llfuse_exc_info);
     __pyx_v_tmp = __pyx_v_6llfuse_exc_info;
 
-    /* "src/fuse_api.pxi":325
+    /* "src/fuse_api.pxi":321
  *         log.debug('Terminated main loop because request handler raised exception, re-raising..')
  *         tmp = exc_info
  *         exc_info = None             # <<<<<<<<<<<<<<
@@ -41023,19 +41133,19 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
     __Pyx_DECREF_SET(__pyx_v_6llfuse_exc_info, Py_None);
     __Pyx_GIVEREF(Py_None);
 
-    /* "src/fuse_api.pxi":327
+    /* "src/fuse_api.pxi":323
  *         exc_info = None
  * 
  *         raise tmp[1].with_traceback(tmp[2])             # <<<<<<<<<<<<<<
  * 
  *     if exit_reason == signal.SIGKILL:
  */
-    __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tmp, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 327, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tmp, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 323, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_with_traceback); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 327, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_with_traceback); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 323, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tmp, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 327, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tmp, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 323, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -41050,14 +41160,14 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
     __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_7);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 327, __pyx_L1_error)
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 323, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __PYX_ERR(3, 327, __pyx_L1_error)
+    __PYX_ERR(3, 323, __pyx_L1_error)
 
-    /* "src/fuse_api.pxi":321
+    /* "src/fuse_api.pxi":317
  *             session_loop_mt(workers)
  * 
  *     if exc_info:             # <<<<<<<<<<<<<<
@@ -41066,7 +41176,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
  */
   }
 
-  /* "src/fuse_api.pxi":329
+  /* "src/fuse_api.pxi":325
  *         raise tmp[1].with_traceback(tmp[2])
  * 
  *     if exit_reason == signal.SIGKILL:             # <<<<<<<<<<<<<<
@@ -41076,7 +41186,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
   __pyx_t_1 = ((__pyx_v_6llfuse_exit_reason == SIGKILL) != 0);
   if (__pyx_t_1) {
 
-    /* "src/fuse_api.pxi":330
+    /* "src/fuse_api.pxi":326
  * 
  *     if exit_reason == signal.SIGKILL:
  *         return None             # <<<<<<<<<<<<<<
@@ -41087,7 +41197,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "src/fuse_api.pxi":329
+    /* "src/fuse_api.pxi":325
  *         raise tmp[1].with_traceback(tmp[2])
  * 
  *     if exit_reason == signal.SIGKILL:             # <<<<<<<<<<<<<<
@@ -41096,7 +41206,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
  */
   }
 
-  /* "src/fuse_api.pxi":332
+  /* "src/fuse_api.pxi":328
  *         return None
  *     else:
  *         return exit_reason             # <<<<<<<<<<<<<<
@@ -41105,14 +41215,14 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_6llfuse_exit_reason); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 332, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_6llfuse_exit_reason); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 328, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
     goto __pyx_L0;
   }
 
-  /* "src/fuse_api.pxi":260
+  /* "src/fuse_api.pxi":256
  *     pthread_mutex_init(&exc_info_mutex, NULL)
  * 
  * def main(workers=None, handle_signals=True):             # <<<<<<<<<<<<<<
@@ -41138,7 +41248,7 @@ static PyObject *__pyx_pf_6llfuse_10main(CYTHON_UNUSED PyObject *__pyx_self, PyO
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":334
+/* "src/fuse_api.pxi":330
  *         return exit_reason
  * 
  * cdef session_loop_single():             # <<<<<<<<<<<<<<
@@ -41167,7 +41277,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_single(void) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("session_loop_single", 0);
 
-  /* "src/fuse_api.pxi":338
+  /* "src/fuse_api.pxi":334
  *     cdef size_t size
  * 
  *     size = fuse_chan_bufsize(channel)             # <<<<<<<<<<<<<<
@@ -41176,17 +41286,17 @@ static PyObject *__pyx_f_6llfuse_session_loop_single(void) {
  */
   __pyx_v_size = fuse_chan_bufsize(__pyx_v_6llfuse_channel);
 
-  /* "src/fuse_api.pxi":339
+  /* "src/fuse_api.pxi":335
  * 
  *     size = fuse_chan_bufsize(channel)
  *     mem = calloc_or_raise(1, size)             # <<<<<<<<<<<<<<
  *     try:
  *         session_loop(mem, size)
  */
-  __pyx_t_1 = __pyx_f_6llfuse_calloc_or_raise(1, __pyx_v_size); if (unlikely(__pyx_t_1 == ((void *)NULL))) __PYX_ERR(3, 339, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_6llfuse_calloc_or_raise(1, __pyx_v_size); if (unlikely(__pyx_t_1 == ((void *)NULL))) __PYX_ERR(3, 335, __pyx_L1_error)
   __pyx_v_mem = __pyx_t_1;
 
-  /* "src/fuse_api.pxi":340
+  /* "src/fuse_api.pxi":336
  *     size = fuse_chan_bufsize(channel)
  *     mem = calloc_or_raise(1, size)
  *     try:             # <<<<<<<<<<<<<<
@@ -41195,19 +41305,19 @@ static PyObject *__pyx_f_6llfuse_session_loop_single(void) {
  */
   /*try:*/ {
 
-    /* "src/fuse_api.pxi":341
+    /* "src/fuse_api.pxi":337
  *     mem = calloc_or_raise(1, size)
  *     try:
  *         session_loop(mem, size)             # <<<<<<<<<<<<<<
  *     finally:
  *         stdlib.free(mem)
  */
-    __pyx_t_2 = __pyx_f_6llfuse_session_loop(__pyx_v_mem, __pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 341, __pyx_L4_error)
+    __pyx_t_2 = __pyx_f_6llfuse_session_loop(__pyx_v_mem, __pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 337, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
 
-  /* "src/fuse_api.pxi":343
+  /* "src/fuse_api.pxi":339
  *         session_loop(mem, size)
  *     finally:
  *         stdlib.free(mem)             # <<<<<<<<<<<<<<
@@ -41254,7 +41364,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_single(void) {
     __pyx_L5:;
   }
 
-  /* "src/fuse_api.pxi":334
+  /* "src/fuse_api.pxi":330
  *         return exit_reason
  * 
  * cdef session_loop_single():             # <<<<<<<<<<<<<<
@@ -41275,7 +41385,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_single(void) {
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":345
+/* "src/fuse_api.pxi":341
  *         stdlib.free(mem)
  * 
  * cdef session_loop(void* mem, size_t size):             # <<<<<<<<<<<<<<
@@ -41298,7 +41408,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("session_loop", 0);
 
-  /* "src/fuse_api.pxi":352
+  /* "src/fuse_api.pxi":348
  *     cdef fuse_buf buf
  * 
  *     while not fuse_session_exited(session):             # <<<<<<<<<<<<<<
@@ -41309,7 +41419,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
     __pyx_t_1 = ((!(fuse_session_exited(__pyx_v_6llfuse_session) != 0)) != 0);
     if (!__pyx_t_1) break;
 
-    /* "src/fuse_api.pxi":353
+    /* "src/fuse_api.pxi":349
  * 
  *     while not fuse_session_exited(session):
  *         ch = channel             # <<<<<<<<<<<<<<
@@ -41318,7 +41428,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
  */
     __pyx_v_ch = __pyx_v_6llfuse_channel;
 
-    /* "src/fuse_api.pxi":354
+    /* "src/fuse_api.pxi":350
  *     while not fuse_session_exited(session):
  *         ch = channel
  *         buf.mem = mem             # <<<<<<<<<<<<<<
@@ -41327,7 +41437,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
  */
     __pyx_v_buf.mem = __pyx_v_mem;
 
-    /* "src/fuse_api.pxi":355
+    /* "src/fuse_api.pxi":351
  *         ch = channel
  *         buf.mem = mem
  *         buf.size = size             # <<<<<<<<<<<<<<
@@ -41336,7 +41446,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
  */
     __pyx_v_buf.size = __pyx_v_size;
 
-    /* "src/fuse_api.pxi":356
+    /* "src/fuse_api.pxi":352
  *         buf.mem = mem
  *         buf.size = size
  *         buf.pos = 0             # <<<<<<<<<<<<<<
@@ -41345,7 +41455,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
  */
     __pyx_v_buf.pos = 0;
 
-    /* "src/fuse_api.pxi":357
+    /* "src/fuse_api.pxi":353
  *         buf.size = size
  *         buf.pos = 0
  *         buf.flags = 0             # <<<<<<<<<<<<<<
@@ -41354,7 +41464,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
  */
     __pyx_v_buf.flags = 0;
 
-    /* "src/fuse_api.pxi":358
+    /* "src/fuse_api.pxi":354
  *         buf.pos = 0
  *         buf.flags = 0
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -41369,7 +41479,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
         #endif
         /*try:*/ {
 
-          /* "src/fuse_api.pxi":359
+          /* "src/fuse_api.pxi":355
  *         buf.flags = 0
  *         with nogil:
  *             res = fuse_session_receive_buf(session, &buf, &ch)             # <<<<<<<<<<<<<<
@@ -41379,7 +41489,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
           __pyx_v_res = fuse_session_receive_buf(__pyx_v_6llfuse_session, (&__pyx_v_buf), (&__pyx_v_ch));
         }
 
-        /* "src/fuse_api.pxi":358
+        /* "src/fuse_api.pxi":354
  *         buf.pos = 0
  *         buf.flags = 0
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -41398,7 +41508,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
         }
     }
 
-    /* "src/fuse_api.pxi":361
+    /* "src/fuse_api.pxi":357
  *             res = fuse_session_receive_buf(session, &buf, &ch)
  * 
  *         if res == -errno.EINTR:             # <<<<<<<<<<<<<<
@@ -41408,7 +41518,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
     __pyx_t_1 = ((__pyx_v_res == (-EINTR)) != 0);
     if (__pyx_t_1) {
 
-      /* "src/fuse_api.pxi":362
+      /* "src/fuse_api.pxi":358
  * 
  *         if res == -errno.EINTR:
  *             continue             # <<<<<<<<<<<<<<
@@ -41417,7 +41527,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
  */
       goto __pyx_L3_continue;
 
-      /* "src/fuse_api.pxi":361
+      /* "src/fuse_api.pxi":357
  *             res = fuse_session_receive_buf(session, &buf, &ch)
  * 
  *         if res == -errno.EINTR:             # <<<<<<<<<<<<<<
@@ -41426,7 +41536,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
  */
     }
 
-    /* "src/fuse_api.pxi":363
+    /* "src/fuse_api.pxi":359
  *         if res == -errno.EINTR:
  *             continue
  *         elif res < 0:             # <<<<<<<<<<<<<<
@@ -41436,37 +41546,37 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
     __pyx_t_1 = ((__pyx_v_res < 0) != 0);
     if (unlikely(__pyx_t_1)) {
 
-      /* "src/fuse_api.pxi":364
+      /* "src/fuse_api.pxi":360
  *             continue
  *         elif res < 0:
  *             raise OSError(-res, 'fuse_session_receive_buf failed with '             # <<<<<<<<<<<<<<
  *                           + strerror(-res))
  *         elif res == 0:
  */
-      __pyx_t_2 = __Pyx_PyInt_From_int((-__pyx_v_res)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 364, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyInt_From_int((-__pyx_v_res)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 360, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
 
-      /* "src/fuse_api.pxi":365
+      /* "src/fuse_api.pxi":361
  *         elif res < 0:
  *             raise OSError(-res, 'fuse_session_receive_buf failed with '
  *                           + strerror(-res))             # <<<<<<<<<<<<<<
  *         elif res == 0:
  *             break
  */
-      __pyx_t_3 = __pyx_f_6llfuse_strerror((-__pyx_v_res)); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 365, __pyx_L1_error)
+      __pyx_t_3 = __pyx_f_6llfuse_strerror((-__pyx_v_res)); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 361, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyNumber_Add(__pyx_kp_u_fuse_session_receive_buf_failed, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 365, __pyx_L1_error)
+      __pyx_t_4 = PyNumber_Add(__pyx_kp_u_fuse_session_receive_buf_failed, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 361, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "src/fuse_api.pxi":364
+      /* "src/fuse_api.pxi":360
  *             continue
  *         elif res < 0:
  *             raise OSError(-res, 'fuse_session_receive_buf failed with '             # <<<<<<<<<<<<<<
  *                           + strerror(-res))
  *         elif res == 0:
  */
-      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 364, __pyx_L1_error)
+      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 360, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GIVEREF(__pyx_t_2);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
@@ -41474,14 +41584,14 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
       PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
       __pyx_t_2 = 0;
       __pyx_t_4 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_OSError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 364, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_OSError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 360, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_Raise(__pyx_t_4, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __PYX_ERR(3, 364, __pyx_L1_error)
+      __PYX_ERR(3, 360, __pyx_L1_error)
 
-      /* "src/fuse_api.pxi":363
+      /* "src/fuse_api.pxi":359
  *         if res == -errno.EINTR:
  *             continue
  *         elif res < 0:             # <<<<<<<<<<<<<<
@@ -41490,7 +41600,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
  */
     }
 
-    /* "src/fuse_api.pxi":366
+    /* "src/fuse_api.pxi":362
  *             raise OSError(-res, 'fuse_session_receive_buf failed with '
  *                           + strerror(-res))
  *         elif res == 0:             # <<<<<<<<<<<<<<
@@ -41500,7 +41610,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
     __pyx_t_1 = ((__pyx_v_res == 0) != 0);
     if (__pyx_t_1) {
 
-      /* "src/fuse_api.pxi":367
+      /* "src/fuse_api.pxi":363
  *                           + strerror(-res))
  *         elif res == 0:
  *             break             # <<<<<<<<<<<<<<
@@ -41509,7 +41619,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
  */
       goto __pyx_L4_break;
 
-      /* "src/fuse_api.pxi":366
+      /* "src/fuse_api.pxi":362
  *             raise OSError(-res, 'fuse_session_receive_buf failed with '
  *                           + strerror(-res))
  *         elif res == 0:             # <<<<<<<<<<<<<<
@@ -41518,7 +41628,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
  */
     }
 
-    /* "src/fuse_api.pxi":369
+    /* "src/fuse_api.pxi":365
  *             break
  * 
  *         fuse_session_process_buf(session, &buf, ch)             # <<<<<<<<<<<<<<
@@ -41530,7 +41640,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
   }
   __pyx_L4_break:;
 
-  /* "src/fuse_api.pxi":345
+  /* "src/fuse_api.pxi":341
  *         stdlib.free(mem)
  * 
  * cdef session_loop(void* mem, size_t size):             # <<<<<<<<<<<<<<
@@ -41553,7 +41663,7 @@ static PyObject *__pyx_f_6llfuse_session_loop(void *__pyx_v_mem, size_t __pyx_v_
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":379
+/* "src/fuse_api.pxi":375
  *     size_t bufsize
  * 
  * cdef void* worker_start(void* data) with gil:             # <<<<<<<<<<<<<<
@@ -41596,7 +41706,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
   #endif
   __Pyx_RefNannySetupContext("worker_start", 0);
 
-  /* "src/fuse_api.pxi":385
+  /* "src/fuse_api.pxi":381
  *     global exc_info
  * 
  *     wd = <worker_data_t*> data             # <<<<<<<<<<<<<<
@@ -41605,16 +41715,16 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
  */
   __pyx_v_wd = ((__pyx_t_6llfuse_worker_data_t *)__pyx_v_data);
 
-  /* "src/fuse_api.pxi":387
+  /* "src/fuse_api.pxi":383
  *     wd = <worker_data_t*> data
  * 
  *     t = threading.current_thread()             # <<<<<<<<<<<<<<
  *     t.name = 'fuse-worker-%d' % (wd.thread_no+1,)
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 387, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 383, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_current_thread); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 387, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_current_thread); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 383, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
@@ -41629,28 +41739,28 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
   }
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 387, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 383, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_t = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "src/fuse_api.pxi":388
+  /* "src/fuse_api.pxi":384
  * 
  *     t = threading.current_thread()
  *     t.name = 'fuse-worker-%d' % (wd.thread_no+1,)             # <<<<<<<<<<<<<<
  * 
  *     try:
  */
-  __pyx_t_1 = __Pyx_PyUnicode_From_long((__pyx_v_wd->thread_no + 1), 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 388, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyUnicode_From_long((__pyx_v_wd->thread_no + 1), 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 384, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_fuse_worker, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 388, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_kp_u_fuse_worker, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 384, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_t, __pyx_n_s_name, __pyx_t_3) < 0) __PYX_ERR(3, 388, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_t, __pyx_n_s_name, __pyx_t_3) < 0) __PYX_ERR(3, 384, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":390
+  /* "src/fuse_api.pxi":386
  *     t.name = 'fuse-worker-%d' % (wd.thread_no+1,)
  * 
  *     try:             # <<<<<<<<<<<<<<
@@ -41667,18 +41777,18 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
       __Pyx_XGOTREF(__pyx_t_6);
       /*try:*/ {
 
-        /* "src/fuse_api.pxi":391
+        /* "src/fuse_api.pxi":387
  * 
  *     try:
  *         session_loop(wd.buf, wd.bufsize)             # <<<<<<<<<<<<<<
  *     except:
  *         fuse_session_exit(session)
  */
-        __pyx_t_3 = __pyx_f_6llfuse_session_loop(__pyx_v_wd->buf, __pyx_v_wd->bufsize); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 391, __pyx_L6_error)
+        __pyx_t_3 = __pyx_f_6llfuse_session_loop(__pyx_v_wd->buf, __pyx_v_wd->bufsize); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 387, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-        /* "src/fuse_api.pxi":390
+        /* "src/fuse_api.pxi":386
  *     t.name = 'fuse-worker-%d' % (wd.thread_no+1,)
  * 
  *     try:             # <<<<<<<<<<<<<<
@@ -41695,7 +41805,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "src/fuse_api.pxi":392
+      /* "src/fuse_api.pxi":388
  *     try:
  *         session_loop(wd.buf, wd.bufsize)
  *     except:             # <<<<<<<<<<<<<<
@@ -41704,12 +41814,12 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
  */
       /*except:*/ {
         __Pyx_AddTraceback("llfuse.worker_start", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(3, 392, __pyx_L8_except_error)
+        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(3, 388, __pyx_L8_except_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_GOTREF(__pyx_t_2);
 
-        /* "src/fuse_api.pxi":393
+        /* "src/fuse_api.pxi":389
  *         session_loop(wd.buf, wd.bufsize)
  *     except:
  *         fuse_session_exit(session)             # <<<<<<<<<<<<<<
@@ -41718,7 +41828,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
  */
         fuse_session_exit(__pyx_v_6llfuse_session);
 
-        /* "src/fuse_api.pxi":394
+        /* "src/fuse_api.pxi":390
  *     except:
  *         fuse_session_exit(session)
  *         tid = wd.thread_id             # <<<<<<<<<<<<<<
@@ -41728,27 +41838,27 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
         __pyx_t_7 = __pyx_v_wd->thread_id;
         __pyx_v_tid = __pyx_t_7;
 
-        /* "src/fuse_api.pxi":395
+        /* "src/fuse_api.pxi":391
  *         fuse_session_exit(session)
  *         tid = wd.thread_id
  *         log.error('FUSE worker thread %d terminated with exception, '             # <<<<<<<<<<<<<<
  *                   'aborting processing', tid)
  *         res = pthread_mutex_lock(&exc_info_mutex)
  */
-        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_log); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 395, __pyx_L8_except_error)
+        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_log); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 391, __pyx_L8_except_error)
         __Pyx_GOTREF(__pyx_t_9);
-        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_error); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 395, __pyx_L8_except_error)
+        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_error); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 391, __pyx_L8_except_error)
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-        /* "src/fuse_api.pxi":396
+        /* "src/fuse_api.pxi":392
  *         tid = wd.thread_id
  *         log.error('FUSE worker thread %d terminated with exception, '
  *                   'aborting processing', tid)             # <<<<<<<<<<<<<<
  *         res = pthread_mutex_lock(&exc_info_mutex)
  *         if res != 0:
  */
-        __pyx_t_9 = __Pyx_PyInt_FromSize_t(__pyx_v_tid); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 396, __pyx_L8_except_error)
+        __pyx_t_9 = __Pyx_PyInt_FromSize_t(__pyx_v_tid); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 392, __pyx_L8_except_error)
         __Pyx_GOTREF(__pyx_t_9);
         __pyx_t_11 = NULL;
         __pyx_t_12 = 0;
@@ -41765,7 +41875,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
         #if CYTHON_FAST_PYCALL
         if (PyFunction_Check(__pyx_t_10)) {
           PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_kp_u_FUSE_worker_thread_d_terminated, __pyx_t_9};
-          __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 395, __pyx_L8_except_error)
+          __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 391, __pyx_L8_except_error)
           __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
           __Pyx_GOTREF(__pyx_t_8);
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -41774,14 +41884,14 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
         #if CYTHON_FAST_PYCCALL
         if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
           PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_kp_u_FUSE_worker_thread_d_terminated, __pyx_t_9};
-          __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 395, __pyx_L8_except_error)
+          __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 391, __pyx_L8_except_error)
           __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
           __Pyx_GOTREF(__pyx_t_8);
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         } else
         #endif
         {
-          __pyx_t_13 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 395, __pyx_L8_except_error)
+          __pyx_t_13 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 391, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_13);
           if (__pyx_t_11) {
             __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_11); __pyx_t_11 = NULL;
@@ -41792,14 +41902,14 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
           __Pyx_GIVEREF(__pyx_t_9);
           PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_12, __pyx_t_9);
           __pyx_t_9 = 0;
-          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 395, __pyx_L8_except_error)
+          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 391, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_8);
           __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
         }
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-        /* "src/fuse_api.pxi":397
+        /* "src/fuse_api.pxi":393
  *         log.error('FUSE worker thread %d terminated with exception, '
  *                   'aborting processing', tid)
  *         res = pthread_mutex_lock(&exc_info_mutex)             # <<<<<<<<<<<<<<
@@ -41808,7 +41918,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
  */
         __pyx_v_res = pthread_mutex_lock((&__pyx_v_6llfuse_exc_info_mutex));
 
-        /* "src/fuse_api.pxi":398
+        /* "src/fuse_api.pxi":394
  *                   'aborting processing', tid)
  *         res = pthread_mutex_lock(&exc_info_mutex)
  *         if res != 0:             # <<<<<<<<<<<<<<
@@ -41818,27 +41928,27 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
         __pyx_t_14 = ((__pyx_v_res != 0) != 0);
         if (__pyx_t_14) {
 
-          /* "src/fuse_api.pxi":399
+          /* "src/fuse_api.pxi":395
  *         res = pthread_mutex_lock(&exc_info_mutex)
  *         if res != 0:
  *             log.error('pthread_mutex_lock failed with %s',             # <<<<<<<<<<<<<<
  *                       strerror(res))
  *         if not exc_info:
  */
-          __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 399, __pyx_L8_except_error)
+          __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 395, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_10);
-          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_error); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 399, __pyx_L8_except_error)
+          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_error); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 395, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_13);
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 
-          /* "src/fuse_api.pxi":400
+          /* "src/fuse_api.pxi":396
  *         if res != 0:
  *             log.error('pthread_mutex_lock failed with %s',
  *                       strerror(res))             # <<<<<<<<<<<<<<
  *         if not exc_info:
  *             exc_info = sys.exc_info()
  */
-          __pyx_t_10 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 400, __pyx_L8_except_error)
+          __pyx_t_10 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 396, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_10);
           __pyx_t_9 = NULL;
           __pyx_t_12 = 0;
@@ -41855,7 +41965,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
           #if CYTHON_FAST_PYCALL
           if (PyFunction_Check(__pyx_t_13)) {
             PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_kp_u_pthread_mutex_lock_failed_with_s, __pyx_t_10};
-            __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 399, __pyx_L8_except_error)
+            __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 395, __pyx_L8_except_error)
             __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
             __Pyx_GOTREF(__pyx_t_8);
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
@@ -41864,14 +41974,14 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
           #if CYTHON_FAST_PYCCALL
           if (__Pyx_PyFastCFunction_Check(__pyx_t_13)) {
             PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_kp_u_pthread_mutex_lock_failed_with_s, __pyx_t_10};
-            __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 399, __pyx_L8_except_error)
+            __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_13, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 395, __pyx_L8_except_error)
             __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
             __Pyx_GOTREF(__pyx_t_8);
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
           } else
           #endif
           {
-            __pyx_t_11 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 399, __pyx_L8_except_error)
+            __pyx_t_11 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 395, __pyx_L8_except_error)
             __Pyx_GOTREF(__pyx_t_11);
             if (__pyx_t_9) {
               __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
@@ -41882,14 +41992,14 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
             __Pyx_GIVEREF(__pyx_t_10);
             PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_12, __pyx_t_10);
             __pyx_t_10 = 0;
-            __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_11, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 399, __pyx_L8_except_error)
+            __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_11, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 395, __pyx_L8_except_error)
             __Pyx_GOTREF(__pyx_t_8);
             __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           }
           __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-          /* "src/fuse_api.pxi":398
+          /* "src/fuse_api.pxi":394
  *                   'aborting processing', tid)
  *         res = pthread_mutex_lock(&exc_info_mutex)
  *         if res != 0:             # <<<<<<<<<<<<<<
@@ -41898,27 +42008,27 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
  */
         }
 
-        /* "src/fuse_api.pxi":401
+        /* "src/fuse_api.pxi":397
  *             log.error('pthread_mutex_lock failed with %s',
  *                       strerror(res))
  *         if not exc_info:             # <<<<<<<<<<<<<<
  *             exc_info = sys.exc_info()
  *         else:
  */
-        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_6llfuse_exc_info); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(3, 401, __pyx_L8_except_error)
+        __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_6llfuse_exc_info); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(3, 397, __pyx_L8_except_error)
         __pyx_t_15 = ((!__pyx_t_14) != 0);
         if (__pyx_t_15) {
 
-          /* "src/fuse_api.pxi":402
+          /* "src/fuse_api.pxi":398
  *                       strerror(res))
  *         if not exc_info:
  *             exc_info = sys.exc_info()             # <<<<<<<<<<<<<<
  *         else:
  *             log.exception('Only one exception can be re-raised, the following '
  */
-          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_sys); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 402, __pyx_L8_except_error)
+          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_sys); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 398, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_13);
-          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 402, __pyx_L8_except_error)
+          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 398, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_11);
           __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
           __pyx_t_13 = NULL;
@@ -41933,7 +42043,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
           }
           __pyx_t_8 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
           __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
-          if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 402, __pyx_L8_except_error)
+          if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 398, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_8);
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           __Pyx_XGOTREF(__pyx_v_6llfuse_exc_info);
@@ -41941,7 +42051,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
           __Pyx_GIVEREF(__pyx_t_8);
           __pyx_t_8 = 0;
 
-          /* "src/fuse_api.pxi":401
+          /* "src/fuse_api.pxi":397
  *             log.error('pthread_mutex_lock failed with %s',
  *                       strerror(res))
  *         if not exc_info:             # <<<<<<<<<<<<<<
@@ -41951,7 +42061,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
           goto __pyx_L15;
         }
 
-        /* "src/fuse_api.pxi":404
+        /* "src/fuse_api.pxi":400
  *             exc_info = sys.exc_info()
  *         else:
  *             log.exception('Only one exception can be re-raised, the following '             # <<<<<<<<<<<<<<
@@ -41959,9 +42069,9 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
  *         pthread_mutex_unlock(&exc_info_mutex)
  */
         /*else*/ {
-          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_log); if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 404, __pyx_L8_except_error)
+          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_log); if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 400, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_11);
-          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_exception); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 404, __pyx_L8_except_error)
+          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_exception); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 400, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_13);
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           __pyx_t_11 = NULL;
@@ -41976,14 +42086,14 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
           }
           __pyx_t_8 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_11, __pyx_kp_u_Only_one_exception_can_be_re_rai_2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_u_Only_one_exception_can_be_re_rai_2);
           __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
-          if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 404, __pyx_L8_except_error)
+          if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 400, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_8);
           __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         }
         __pyx_L15:;
 
-        /* "src/fuse_api.pxi":406
+        /* "src/fuse_api.pxi":402
  *             log.exception('Only one exception can be re-raised, the following '
  *                           'exception will be lost:')
  *         pthread_mutex_unlock(&exc_info_mutex)             # <<<<<<<<<<<<<<
@@ -41992,7 +42102,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
  */
         (void)(pthread_mutex_unlock((&__pyx_v_6llfuse_exc_info_mutex)));
 
-        /* "src/fuse_api.pxi":407
+        /* "src/fuse_api.pxi":403
  *                           'exception will be lost:')
  *         pthread_mutex_unlock(&exc_info_mutex)
  *         if res != 0:             # <<<<<<<<<<<<<<
@@ -42002,27 +42112,27 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
         __pyx_t_15 = ((__pyx_v_res != 0) != 0);
         if (__pyx_t_15) {
 
-          /* "src/fuse_api.pxi":408
+          /* "src/fuse_api.pxi":404
  *         pthread_mutex_unlock(&exc_info_mutex)
  *         if res != 0:
  *             log.error('pthread_mutex_ulock failed with %s',             # <<<<<<<<<<<<<<
  *                       strerror(res))
  * 
  */
-          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_log); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 408, __pyx_L8_except_error)
+          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_log); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 404, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_13);
-          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_error); if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 408, __pyx_L8_except_error)
+          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_error); if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 404, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_11);
           __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-          /* "src/fuse_api.pxi":409
+          /* "src/fuse_api.pxi":405
  *         if res != 0:
  *             log.error('pthread_mutex_ulock failed with %s',
  *                       strerror(res))             # <<<<<<<<<<<<<<
  * 
  *     finally:
  */
-          __pyx_t_13 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 409, __pyx_L8_except_error)
+          __pyx_t_13 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 405, __pyx_L8_except_error)
           __Pyx_GOTREF(__pyx_t_13);
           __pyx_t_10 = NULL;
           __pyx_t_12 = 0;
@@ -42039,7 +42149,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
           #if CYTHON_FAST_PYCALL
           if (PyFunction_Check(__pyx_t_11)) {
             PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_kp_u_pthread_mutex_ulock_failed_with, __pyx_t_13};
-            __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 408, __pyx_L8_except_error)
+            __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 404, __pyx_L8_except_error)
             __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
             __Pyx_GOTREF(__pyx_t_8);
             __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
@@ -42048,14 +42158,14 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
           #if CYTHON_FAST_PYCCALL
           if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
             PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_kp_u_pthread_mutex_ulock_failed_with, __pyx_t_13};
-            __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 408, __pyx_L8_except_error)
+            __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 404, __pyx_L8_except_error)
             __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
             __Pyx_GOTREF(__pyx_t_8);
             __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
           } else
           #endif
           {
-            __pyx_t_9 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 408, __pyx_L8_except_error)
+            __pyx_t_9 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 404, __pyx_L8_except_error)
             __Pyx_GOTREF(__pyx_t_9);
             if (__pyx_t_10) {
               __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10); __pyx_t_10 = NULL;
@@ -42066,14 +42176,14 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
             __Pyx_GIVEREF(__pyx_t_13);
             PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_12, __pyx_t_13);
             __pyx_t_13 = 0;
-            __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 408, __pyx_L8_except_error)
+            __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 404, __pyx_L8_except_error)
             __Pyx_GOTREF(__pyx_t_8);
             __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           }
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-          /* "src/fuse_api.pxi":407
+          /* "src/fuse_api.pxi":403
  *                           'exception will be lost:')
  *         pthread_mutex_unlock(&exc_info_mutex)
  *         if res != 0:             # <<<<<<<<<<<<<<
@@ -42088,7 +42198,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
       }
       __pyx_L8_except_error:;
 
-      /* "src/fuse_api.pxi":390
+      /* "src/fuse_api.pxi":386
  *     t.name = 'fuse-worker-%d' % (wd.thread_no+1,)
  * 
  *     try:             # <<<<<<<<<<<<<<
@@ -42109,7 +42219,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
     }
   }
 
-  /* "src/fuse_api.pxi":412
+  /* "src/fuse_api.pxi":408
  * 
  *     finally:
  *         sem_post(wd.sem)             # <<<<<<<<<<<<<<
@@ -42163,7 +42273,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
     __pyx_L5:;
   }
 
-  /* "src/fuse_api.pxi":379
+  /* "src/fuse_api.pxi":375
  *     size_t bufsize
  * 
  * cdef void* worker_start(void* data) with gil:             # <<<<<<<<<<<<<<
@@ -42194,7 +42304,7 @@ static void *__pyx_f_6llfuse_worker_start(void *__pyx_v_data) {
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":414
+/* "src/fuse_api.pxi":410
  *         sem_post(wd.sem)
  * 
  * cdef session_loop_mt(workers):             # <<<<<<<<<<<<<<
@@ -42238,7 +42348,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("session_loop_mt", 0);
 
-  /* "src/fuse_api.pxi":421
+  /* "src/fuse_api.pxi":417
  *     cdef sem_t sem
  * 
  *     if sem_init(&sem, 0, 0) != 0:             # <<<<<<<<<<<<<<
@@ -42248,37 +42358,37 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
   __pyx_t_1 = ((sem_init((&__pyx_v_sem), 0, 0) != 0) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "src/fuse_api.pxi":422
+    /* "src/fuse_api.pxi":418
  * 
  *     if sem_init(&sem, 0, 0) != 0:
  *         raise OSError(errno.errno, 'sem_init failed with '             # <<<<<<<<<<<<<<
  *                       + strerror(errno.errno))
  * 
  */
-    __pyx_t_2 = __Pyx_PyInt_From_int(errno); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 422, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyInt_From_int(errno); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 418, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
 
-    /* "src/fuse_api.pxi":423
+    /* "src/fuse_api.pxi":419
  *     if sem_init(&sem, 0, 0) != 0:
  *         raise OSError(errno.errno, 'sem_init failed with '
  *                       + strerror(errno.errno))             # <<<<<<<<<<<<<<
  * 
  *     sigemptyset(&newset);
  */
-    __pyx_t_3 = __pyx_f_6llfuse_strerror(errno); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 423, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_6llfuse_strerror(errno); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 419, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyNumber_Add(__pyx_kp_u_sem_init_failed_with, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 423, __pyx_L1_error)
+    __pyx_t_4 = PyNumber_Add(__pyx_kp_u_sem_init_failed_with, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 419, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "src/fuse_api.pxi":422
+    /* "src/fuse_api.pxi":418
  * 
  *     if sem_init(&sem, 0, 0) != 0:
  *         raise OSError(errno.errno, 'sem_init failed with '             # <<<<<<<<<<<<<<
  *                       + strerror(errno.errno))
  * 
  */
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 422, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 418, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
@@ -42286,14 +42396,14 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
     __pyx_t_2 = 0;
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_OSError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 422, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_OSError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 418, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __PYX_ERR(3, 422, __pyx_L1_error)
+    __PYX_ERR(3, 418, __pyx_L1_error)
 
-    /* "src/fuse_api.pxi":421
+    /* "src/fuse_api.pxi":417
  *     cdef sem_t sem
  * 
  *     if sem_init(&sem, 0, 0) != 0:             # <<<<<<<<<<<<<<
@@ -42302,7 +42412,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
   }
 
-  /* "src/fuse_api.pxi":425
+  /* "src/fuse_api.pxi":421
  *                       + strerror(errno.errno))
  * 
  *     sigemptyset(&newset);             # <<<<<<<<<<<<<<
@@ -42311,7 +42421,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
   (void)(sigemptyset((&__pyx_v_newset)));
 
-  /* "src/fuse_api.pxi":426
+  /* "src/fuse_api.pxi":422
  * 
  *     sigemptyset(&newset);
  *     sigaddset(&newset, signal.SIGTERM);             # <<<<<<<<<<<<<<
@@ -42320,7 +42430,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
   (void)(sigaddset((&__pyx_v_newset), SIGTERM));
 
-  /* "src/fuse_api.pxi":427
+  /* "src/fuse_api.pxi":423
  *     sigemptyset(&newset);
  *     sigaddset(&newset, signal.SIGTERM);
  *     sigaddset(&newset, signal.SIGINT);             # <<<<<<<<<<<<<<
@@ -42329,7 +42439,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
   (void)(sigaddset((&__pyx_v_newset), SIGINT));
 
-  /* "src/fuse_api.pxi":428
+  /* "src/fuse_api.pxi":424
  *     sigaddset(&newset, signal.SIGTERM);
  *     sigaddset(&newset, signal.SIGINT);
  *     sigaddset(&newset, signal.SIGHUP);             # <<<<<<<<<<<<<<
@@ -42338,7 +42448,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
   (void)(sigaddset((&__pyx_v_newset), SIGHUP));
 
-  /* "src/fuse_api.pxi":429
+  /* "src/fuse_api.pxi":425
  *     sigaddset(&newset, signal.SIGINT);
  *     sigaddset(&newset, signal.SIGHUP);
  *     sigaddset(&newset, signal.SIGQUIT);             # <<<<<<<<<<<<<<
@@ -42347,7 +42457,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
   (void)(sigaddset((&__pyx_v_newset), SIGQUIT));
 
-  /* "src/fuse_api.pxi":431
+  /* "src/fuse_api.pxi":427
  *     sigaddset(&newset, signal.SIGQUIT);
  * 
  *     PyEval_InitThreads()             # <<<<<<<<<<<<<<
@@ -42356,7 +42466,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
   PyEval_InitThreads();
 
-  /* "src/fuse_api.pxi":432
+  /* "src/fuse_api.pxi":428
  * 
  *     PyEval_InitThreads()
  *     bufsize = fuse_chan_bufsize(channel)             # <<<<<<<<<<<<<<
@@ -42365,18 +42475,18 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
   __pyx_v_bufsize = fuse_chan_bufsize(__pyx_v_6llfuse_channel);
 
-  /* "src/fuse_api.pxi":433
+  /* "src/fuse_api.pxi":429
  *     PyEval_InitThreads()
  *     bufsize = fuse_chan_bufsize(channel)
  *     wd = <worker_data_t*> calloc_or_raise(workers, sizeof(worker_data_t))             # <<<<<<<<<<<<<<
  *     try:
  *         for i in range(workers):
  */
-  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_v_workers); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(3, 433, __pyx_L1_error)
-  __pyx_t_6 = __pyx_f_6llfuse_calloc_or_raise(__pyx_t_5, (sizeof(__pyx_t_6llfuse_worker_data_t))); if (unlikely(__pyx_t_6 == ((void *)NULL))) __PYX_ERR(3, 433, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_v_workers); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(3, 429, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_6llfuse_calloc_or_raise(__pyx_t_5, (sizeof(__pyx_t_6llfuse_worker_data_t))); if (unlikely(__pyx_t_6 == ((void *)NULL))) __PYX_ERR(3, 429, __pyx_L1_error)
   __pyx_v_wd = ((__pyx_t_6llfuse_worker_data_t *)__pyx_t_6);
 
-  /* "src/fuse_api.pxi":434
+  /* "src/fuse_api.pxi":430
  *     bufsize = fuse_chan_bufsize(channel)
  *     wd = <worker_data_t*> calloc_or_raise(workers, sizeof(worker_data_t))
  *     try:             # <<<<<<<<<<<<<<
@@ -42385,19 +42495,19 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
   /*try:*/ {
 
-    /* "src/fuse_api.pxi":435
+    /* "src/fuse_api.pxi":431
  *     wd = <worker_data_t*> calloc_or_raise(workers, sizeof(worker_data_t))
  *     try:
  *         for i in range(workers):             # <<<<<<<<<<<<<<
  *             wd[i].sem = &sem
  *             wd[i].thread_no = i
  */
-    __pyx_t_7 = __Pyx_PyInt_As_long(__pyx_v_workers); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) __PYX_ERR(3, 435, __pyx_L5_error)
+    __pyx_t_7 = __Pyx_PyInt_As_long(__pyx_v_workers); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) __PYX_ERR(3, 431, __pyx_L5_error)
     __pyx_t_8 = __pyx_t_7;
     for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
       __pyx_v_i = __pyx_t_9;
 
-      /* "src/fuse_api.pxi":436
+      /* "src/fuse_api.pxi":432
  *     try:
  *         for i in range(workers):
  *             wd[i].sem = &sem             # <<<<<<<<<<<<<<
@@ -42406,7 +42516,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
       (__pyx_v_wd[__pyx_v_i]).sem = (&__pyx_v_sem);
 
-      /* "src/fuse_api.pxi":437
+      /* "src/fuse_api.pxi":433
  *         for i in range(workers):
  *             wd[i].sem = &sem
  *             wd[i].thread_no = i             # <<<<<<<<<<<<<<
@@ -42415,7 +42525,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
       (__pyx_v_wd[__pyx_v_i]).thread_no = __pyx_v_i;
 
-      /* "src/fuse_api.pxi":438
+      /* "src/fuse_api.pxi":434
  *             wd[i].sem = &sem
  *             wd[i].thread_no = i
  *             wd[i].bufsize = bufsize             # <<<<<<<<<<<<<<
@@ -42424,17 +42534,17 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
       (__pyx_v_wd[__pyx_v_i]).bufsize = __pyx_v_bufsize;
 
-      /* "src/fuse_api.pxi":439
+      /* "src/fuse_api.pxi":435
  *             wd[i].thread_no = i
  *             wd[i].bufsize = bufsize
  *             wd[i].buf = calloc_or_raise(1, bufsize)             # <<<<<<<<<<<<<<
  * 
  *             # Ensure that signals get delivered to main thread
  */
-      __pyx_t_6 = __pyx_f_6llfuse_calloc_or_raise(1, __pyx_v_bufsize); if (unlikely(__pyx_t_6 == ((void *)NULL))) __PYX_ERR(3, 439, __pyx_L5_error)
+      __pyx_t_6 = __pyx_f_6llfuse_calloc_or_raise(1, __pyx_v_bufsize); if (unlikely(__pyx_t_6 == ((void *)NULL))) __PYX_ERR(3, 435, __pyx_L5_error)
       (__pyx_v_wd[__pyx_v_i]).buf = __pyx_t_6;
 
-      /* "src/fuse_api.pxi":442
+      /* "src/fuse_api.pxi":438
  * 
  *             # Ensure that signals get delivered to main thread
  *             pthread_sigmask(SIG_BLOCK, &newset, &oldset)             # <<<<<<<<<<<<<<
@@ -42443,7 +42553,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
       (void)(pthread_sigmask(SIG_BLOCK, (&__pyx_v_newset), (&__pyx_v_oldset)));
 
-      /* "src/fuse_api.pxi":443
+      /* "src/fuse_api.pxi":439
  *             # Ensure that signals get delivered to main thread
  *             pthread_sigmask(SIG_BLOCK, &newset, &oldset)
  *             res = pthread_create(&wd[i].thread_id, NULL, &worker_start, wd+i)             # <<<<<<<<<<<<<<
@@ -42452,7 +42562,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
       __pyx_v_res = pthread_create((&(__pyx_v_wd[__pyx_v_i]).thread_id), NULL, (&__pyx_f_6llfuse_worker_start), (__pyx_v_wd + __pyx_v_i));
 
-      /* "src/fuse_api.pxi":444
+      /* "src/fuse_api.pxi":440
  *             pthread_sigmask(SIG_BLOCK, &newset, &oldset)
  *             res = pthread_create(&wd[i].thread_id, NULL, &worker_start, wd+i)
  *             pthread_sigmask(SIG_SETMASK, &oldset, NULL)             # <<<<<<<<<<<<<<
@@ -42461,7 +42571,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
       (void)(pthread_sigmask(SIG_SETMASK, (&__pyx_v_oldset), NULL));
 
-      /* "src/fuse_api.pxi":445
+      /* "src/fuse_api.pxi":441
  *             res = pthread_create(&wd[i].thread_id, NULL, &worker_start, wd+i)
  *             pthread_sigmask(SIG_SETMASK, &oldset, NULL)
  *             if res != 0:             # <<<<<<<<<<<<<<
@@ -42471,37 +42581,37 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
       __pyx_t_1 = ((__pyx_v_res != 0) != 0);
       if (unlikely(__pyx_t_1)) {
 
-        /* "src/fuse_api.pxi":446
+        /* "src/fuse_api.pxi":442
  *             pthread_sigmask(SIG_SETMASK, &oldset, NULL)
  *             if res != 0:
  *                 raise OSError(res, 'pthread_create failed with '             # <<<<<<<<<<<<<<
  *                               + strerror(res))
  *             wd[i].started = 1
  */
-        __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_res); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 446, __pyx_L5_error)
+        __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_res); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 442, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_4);
 
-        /* "src/fuse_api.pxi":447
+        /* "src/fuse_api.pxi":443
  *             if res != 0:
  *                 raise OSError(res, 'pthread_create failed with '
  *                               + strerror(res))             # <<<<<<<<<<<<<<
  *             wd[i].started = 1
  * 
  */
-        __pyx_t_3 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 447, __pyx_L5_error)
+        __pyx_t_3 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 443, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_2 = PyNumber_Add(__pyx_kp_u_pthread_create_failed_with, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 447, __pyx_L5_error)
+        __pyx_t_2 = PyNumber_Add(__pyx_kp_u_pthread_create_failed_with, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 443, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-        /* "src/fuse_api.pxi":446
+        /* "src/fuse_api.pxi":442
  *             pthread_sigmask(SIG_SETMASK, &oldset, NULL)
  *             if res != 0:
  *                 raise OSError(res, 'pthread_create failed with '             # <<<<<<<<<<<<<<
  *                               + strerror(res))
  *             wd[i].started = 1
  */
-        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 446, __pyx_L5_error)
+        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 442, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_GIVEREF(__pyx_t_4);
         PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
@@ -42509,14 +42619,14 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
         PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
         __pyx_t_4 = 0;
         __pyx_t_2 = 0;
-        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OSError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 446, __pyx_L5_error)
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OSError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 442, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __Pyx_Raise(__pyx_t_2, 0, 0, 0);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-        __PYX_ERR(3, 446, __pyx_L5_error)
+        __PYX_ERR(3, 442, __pyx_L5_error)
 
-        /* "src/fuse_api.pxi":445
+        /* "src/fuse_api.pxi":441
  *             res = pthread_create(&wd[i].thread_id, NULL, &worker_start, wd+i)
  *             pthread_sigmask(SIG_SETMASK, &oldset, NULL)
  *             if res != 0:             # <<<<<<<<<<<<<<
@@ -42525,7 +42635,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
       }
 
-      /* "src/fuse_api.pxi":448
+      /* "src/fuse_api.pxi":444
  *                 raise OSError(res, 'pthread_create failed with '
  *                               + strerror(res))
  *             wd[i].started = 1             # <<<<<<<<<<<<<<
@@ -42535,7 +42645,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
       (__pyx_v_wd[__pyx_v_i]).started = 1;
     }
 
-    /* "src/fuse_api.pxi":450
+    /* "src/fuse_api.pxi":446
  *             wd[i].started = 1
  * 
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -42550,7 +42660,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
         #endif
         /*try:*/ {
 
-          /* "src/fuse_api.pxi":451
+          /* "src/fuse_api.pxi":447
  * 
  *         with nogil:
  *             while not fuse_session_exited(session):             # <<<<<<<<<<<<<<
@@ -42561,7 +42671,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
             __pyx_t_1 = ((!(fuse_session_exited(__pyx_v_6llfuse_session) != 0)) != 0);
             if (!__pyx_t_1) break;
 
-            /* "src/fuse_api.pxi":452
+            /* "src/fuse_api.pxi":448
  *         with nogil:
  *             while not fuse_session_exited(session):
  *                 sem_wait(&sem) # also interrupted by signals             # <<<<<<<<<<<<<<
@@ -42572,7 +42682,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
           }
         }
 
-        /* "src/fuse_api.pxi":450
+        /* "src/fuse_api.pxi":446
  *             wd[i].started = 1
  * 
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -42592,7 +42702,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
     }
   }
 
-  /* "src/fuse_api.pxi":455
+  /* "src/fuse_api.pxi":451
  * 
  *     finally:
  *         for i in range(workers):             # <<<<<<<<<<<<<<
@@ -42601,12 +42711,12 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __pyx_t_7 = __Pyx_PyInt_As_long(__pyx_v_workers); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) __PYX_ERR(3, 455, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyInt_As_long(__pyx_v_workers); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) __PYX_ERR(3, 451, __pyx_L1_error)
       __pyx_t_8 = __pyx_t_7;
       for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
         __pyx_v_i = __pyx_t_9;
 
-        /* "src/fuse_api.pxi":456
+        /* "src/fuse_api.pxi":452
  *     finally:
  *         for i in range(workers):
  *             if wd[i].started:             # <<<<<<<<<<<<<<
@@ -42616,7 +42726,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
         __pyx_t_1 = ((__pyx_v_wd[__pyx_v_i]).started != 0);
         if (__pyx_t_1) {
 
-          /* "src/fuse_api.pxi":457
+          /* "src/fuse_api.pxi":453
  *         for i in range(workers):
  *             if wd[i].started:
  *                 res = pthread_kill(wd[i].thread_id, signal.SIGUSR1)             # <<<<<<<<<<<<<<
@@ -42625,7 +42735,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
           __pyx_v_res = pthread_kill((__pyx_v_wd[__pyx_v_i]).thread_id, SIGUSR1);
 
-          /* "src/fuse_api.pxi":459
+          /* "src/fuse_api.pxi":455
  *                 res = pthread_kill(wd[i].thread_id, signal.SIGUSR1)
  *                 # Thread may have terminated already
  *                 if res != 0 and res != errno.ESRCH:             # <<<<<<<<<<<<<<
@@ -42643,19 +42753,19 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
           }
           if (__pyx_t_1) {
 
-            /* "src/fuse_api.pxi":460
+            /* "src/fuse_api.pxi":456
  *                 # Thread may have terminated already
  *                 if res != 0 and res != errno.ESRCH:
  *                     log.error('pthread_kill failed with: %s', strerror(res))             # <<<<<<<<<<<<<<
  *                 with nogil:
  *                     res = pthread_join(wd[i].thread_id, NULL)
  */
-            __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_log); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 460, __pyx_L1_error)
+            __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_log); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 456, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_3);
-            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_error); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 460, __pyx_L1_error)
+            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_error); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 456, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_4);
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-            __pyx_t_3 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 460, __pyx_L1_error)
+            __pyx_t_3 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 456, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_3);
             __pyx_t_10 = NULL;
             __pyx_t_11 = 0;
@@ -42672,7 +42782,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
             #if CYTHON_FAST_PYCALL
             if (PyFunction_Check(__pyx_t_4)) {
               PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_kp_u_pthread_kill_failed_with_s, __pyx_t_3};
-              __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L1_error)
+              __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 456, __pyx_L1_error)
               __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
               __Pyx_GOTREF(__pyx_t_2);
               __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -42681,14 +42791,14 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
             #if CYTHON_FAST_PYCCALL
             if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
               PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_kp_u_pthread_kill_failed_with_s, __pyx_t_3};
-              __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L1_error)
+              __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 456, __pyx_L1_error)
               __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
               __Pyx_GOTREF(__pyx_t_2);
               __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
             } else
             #endif
             {
-              __pyx_t_12 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 460, __pyx_L1_error)
+              __pyx_t_12 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 456, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_12);
               if (__pyx_t_10) {
                 __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL;
@@ -42699,14 +42809,14 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
               __Pyx_GIVEREF(__pyx_t_3);
               PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_3);
               __pyx_t_3 = 0;
-              __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L1_error)
+              __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 456, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_2);
               __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
             }
             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-            /* "src/fuse_api.pxi":459
+            /* "src/fuse_api.pxi":455
  *                 res = pthread_kill(wd[i].thread_id, signal.SIGUSR1)
  *                 # Thread may have terminated already
  *                 if res != 0 and res != errno.ESRCH:             # <<<<<<<<<<<<<<
@@ -42715,7 +42825,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
           }
 
-          /* "src/fuse_api.pxi":461
+          /* "src/fuse_api.pxi":457
  *                 if res != 0 and res != errno.ESRCH:
  *                     log.error('pthread_kill failed with: %s', strerror(res))
  *                 with nogil:             # <<<<<<<<<<<<<<
@@ -42730,7 +42840,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
               #endif
               /*try:*/ {
 
-                /* "src/fuse_api.pxi":462
+                /* "src/fuse_api.pxi":458
  *                     log.error('pthread_kill failed with: %s', strerror(res))
  *                 with nogil:
  *                     res = pthread_join(wd[i].thread_id, NULL)             # <<<<<<<<<<<<<<
@@ -42740,7 +42850,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
                 __pyx_v_res = pthread_join((__pyx_v_wd[__pyx_v_i]).thread_id, NULL);
               }
 
-              /* "src/fuse_api.pxi":461
+              /* "src/fuse_api.pxi":457
  *                 if res != 0 and res != errno.ESRCH:
  *                     log.error('pthread_kill failed with: %s', strerror(res))
  *                 with nogil:             # <<<<<<<<<<<<<<
@@ -42759,7 +42869,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
               }
           }
 
-          /* "src/fuse_api.pxi":463
+          /* "src/fuse_api.pxi":459
  *                 with nogil:
  *                     res = pthread_join(wd[i].thread_id, NULL)
  *                 if res != 0:             # <<<<<<<<<<<<<<
@@ -42769,19 +42879,19 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
           __pyx_t_1 = ((__pyx_v_res != 0) != 0);
           if (__pyx_t_1) {
 
-            /* "src/fuse_api.pxi":464
+            /* "src/fuse_api.pxi":460
  *                     res = pthread_join(wd[i].thread_id, NULL)
  *                 if res != 0:
  *                     log.error('pthread_join failed with: %s', strerror(res))             # <<<<<<<<<<<<<<
  * 
  *             if wd[i].buf != NULL:
  */
-            __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_log); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 464, __pyx_L1_error)
+            __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_log); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 460, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_error); if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 464, __pyx_L1_error)
+            __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_error); if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 460, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_12);
             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-            __pyx_t_4 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 464, __pyx_L1_error)
+            __pyx_t_4 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 460, __pyx_L1_error)
             __Pyx_GOTREF(__pyx_t_4);
             __pyx_t_3 = NULL;
             __pyx_t_11 = 0;
@@ -42798,7 +42908,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
             #if CYTHON_FAST_PYCALL
             if (PyFunction_Check(__pyx_t_12)) {
               PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u_pthread_join_failed_with_s, __pyx_t_4};
-              __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 464, __pyx_L1_error)
+              __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L1_error)
               __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
               __Pyx_GOTREF(__pyx_t_2);
               __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -42807,14 +42917,14 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
             #if CYTHON_FAST_PYCCALL
             if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
               PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_u_pthread_join_failed_with_s, __pyx_t_4};
-              __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 464, __pyx_L1_error)
+              __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L1_error)
               __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
               __Pyx_GOTREF(__pyx_t_2);
               __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
             } else
             #endif
             {
-              __pyx_t_10 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 464, __pyx_L1_error)
+              __pyx_t_10 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 460, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_10);
               if (__pyx_t_3) {
                 __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_3); __pyx_t_3 = NULL;
@@ -42825,14 +42935,14 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
               __Pyx_GIVEREF(__pyx_t_4);
               PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_11, __pyx_t_4);
               __pyx_t_4 = 0;
-              __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 464, __pyx_L1_error)
+              __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L1_error)
               __Pyx_GOTREF(__pyx_t_2);
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
             }
             __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-            /* "src/fuse_api.pxi":463
+            /* "src/fuse_api.pxi":459
  *                 with nogil:
  *                     res = pthread_join(wd[i].thread_id, NULL)
  *                 if res != 0:             # <<<<<<<<<<<<<<
@@ -42841,7 +42951,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
           }
 
-          /* "src/fuse_api.pxi":456
+          /* "src/fuse_api.pxi":452
  *     finally:
  *         for i in range(workers):
  *             if wd[i].started:             # <<<<<<<<<<<<<<
@@ -42850,7 +42960,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
         }
 
-        /* "src/fuse_api.pxi":466
+        /* "src/fuse_api.pxi":462
  *                     log.error('pthread_join failed with: %s', strerror(res))
  * 
  *             if wd[i].buf != NULL:             # <<<<<<<<<<<<<<
@@ -42860,7 +42970,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
         __pyx_t_1 = (((__pyx_v_wd[__pyx_v_i]).buf != NULL) != 0);
         if (__pyx_t_1) {
 
-          /* "src/fuse_api.pxi":467
+          /* "src/fuse_api.pxi":463
  * 
  *             if wd[i].buf != NULL:
  *                 stdlib.free(wd[i].buf)             # <<<<<<<<<<<<<<
@@ -42869,7 +42979,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
           free((__pyx_v_wd[__pyx_v_i]).buf);
 
-          /* "src/fuse_api.pxi":466
+          /* "src/fuse_api.pxi":462
  *                     log.error('pthread_join failed with: %s', strerror(res))
  * 
  *             if wd[i].buf != NULL:             # <<<<<<<<<<<<<<
@@ -42879,7 +42989,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
         }
       }
 
-      /* "src/fuse_api.pxi":469
+      /* "src/fuse_api.pxi":465
  *                 stdlib.free(wd[i].buf)
  * 
  *         stdlib.free(wd)             # <<<<<<<<<<<<<<
@@ -42908,19 +43018,19 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
       __pyx_t_9 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
       {
 
-        /* "src/fuse_api.pxi":455
+        /* "src/fuse_api.pxi":451
  * 
  *     finally:
  *         for i in range(workers):             # <<<<<<<<<<<<<<
  *             if wd[i].started:
  *                 res = pthread_kill(wd[i].thread_id, signal.SIGUSR1)
  */
-        __pyx_t_7 = __Pyx_PyInt_As_long(__pyx_v_workers); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) __PYX_ERR(3, 455, __pyx_L27_error)
+        __pyx_t_7 = __Pyx_PyInt_As_long(__pyx_v_workers); if (unlikely((__pyx_t_7 == (long)-1) && PyErr_Occurred())) __PYX_ERR(3, 451, __pyx_L27_error)
         __pyx_t_8 = __pyx_t_7;
         for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_8; __pyx_t_20+=1) {
           __pyx_v_i = __pyx_t_20;
 
-          /* "src/fuse_api.pxi":456
+          /* "src/fuse_api.pxi":452
  *     finally:
  *         for i in range(workers):
  *             if wd[i].started:             # <<<<<<<<<<<<<<
@@ -42930,7 +43040,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
           __pyx_t_1 = ((__pyx_v_wd[__pyx_v_i]).started != 0);
           if (__pyx_t_1) {
 
-            /* "src/fuse_api.pxi":457
+            /* "src/fuse_api.pxi":453
  *         for i in range(workers):
  *             if wd[i].started:
  *                 res = pthread_kill(wd[i].thread_id, signal.SIGUSR1)             # <<<<<<<<<<<<<<
@@ -42939,7 +43049,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
             __pyx_v_res = pthread_kill((__pyx_v_wd[__pyx_v_i]).thread_id, SIGUSR1);
 
-            /* "src/fuse_api.pxi":459
+            /* "src/fuse_api.pxi":455
  *                 res = pthread_kill(wd[i].thread_id, signal.SIGUSR1)
  *                 # Thread may have terminated already
  *                 if res != 0 and res != errno.ESRCH:             # <<<<<<<<<<<<<<
@@ -42957,19 +43067,19 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
             }
             if (__pyx_t_1) {
 
-              /* "src/fuse_api.pxi":460
+              /* "src/fuse_api.pxi":456
  *                 # Thread may have terminated already
  *                 if res != 0 and res != errno.ESRCH:
  *                     log.error('pthread_kill failed with: %s', strerror(res))             # <<<<<<<<<<<<<<
  *                 with nogil:
  *                     res = pthread_join(wd[i].thread_id, NULL)
  */
-              __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_log); if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 460, __pyx_L27_error)
+              __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_log); if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 456, __pyx_L27_error)
               __Pyx_GOTREF(__pyx_t_12);
-              __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_error); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 460, __pyx_L27_error)
+              __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_error); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 456, __pyx_L27_error)
               __Pyx_GOTREF(__pyx_t_10);
               __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-              __pyx_t_12 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 460, __pyx_L27_error)
+              __pyx_t_12 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 456, __pyx_L27_error)
               __Pyx_GOTREF(__pyx_t_12);
               __pyx_t_4 = NULL;
               __pyx_t_21 = 0;
@@ -42986,7 +43096,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
               #if CYTHON_FAST_PYCALL
               if (PyFunction_Check(__pyx_t_10)) {
                 PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_kp_u_pthread_kill_failed_with_s, __pyx_t_12};
-                __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L27_error)
+                __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 456, __pyx_L27_error)
                 __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                 __Pyx_GOTREF(__pyx_t_2);
                 __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
@@ -42995,14 +43105,14 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
               #if CYTHON_FAST_PYCCALL
               if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
                 PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_kp_u_pthread_kill_failed_with_s, __pyx_t_12};
-                __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L27_error)
+                __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 456, __pyx_L27_error)
                 __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                 __Pyx_GOTREF(__pyx_t_2);
                 __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
               } else
               #endif
               {
-                __pyx_t_3 = PyTuple_New(2+__pyx_t_21); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 460, __pyx_L27_error)
+                __pyx_t_3 = PyTuple_New(2+__pyx_t_21); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 456, __pyx_L27_error)
                 __Pyx_GOTREF(__pyx_t_3);
                 if (__pyx_t_4) {
                   __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -43013,14 +43123,14 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
                 __Pyx_GIVEREF(__pyx_t_12);
                 PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_21, __pyx_t_12);
                 __pyx_t_12 = 0;
-                __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L27_error)
+                __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 456, __pyx_L27_error)
                 __Pyx_GOTREF(__pyx_t_2);
                 __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
               }
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
               __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-              /* "src/fuse_api.pxi":459
+              /* "src/fuse_api.pxi":455
  *                 res = pthread_kill(wd[i].thread_id, signal.SIGUSR1)
  *                 # Thread may have terminated already
  *                 if res != 0 and res != errno.ESRCH:             # <<<<<<<<<<<<<<
@@ -43029,7 +43139,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
             }
 
-            /* "src/fuse_api.pxi":461
+            /* "src/fuse_api.pxi":457
  *                 if res != 0 and res != errno.ESRCH:
  *                     log.error('pthread_kill failed with: %s', strerror(res))
  *                 with nogil:             # <<<<<<<<<<<<<<
@@ -43044,7 +43154,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
                 #endif
                 /*try:*/ {
 
-                  /* "src/fuse_api.pxi":462
+                  /* "src/fuse_api.pxi":458
  *                     log.error('pthread_kill failed with: %s', strerror(res))
  *                 with nogil:
  *                     res = pthread_join(wd[i].thread_id, NULL)             # <<<<<<<<<<<<<<
@@ -43054,7 +43164,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
                   __pyx_v_res = pthread_join((__pyx_v_wd[__pyx_v_i]).thread_id, NULL);
                 }
 
-                /* "src/fuse_api.pxi":461
+                /* "src/fuse_api.pxi":457
  *                 if res != 0 and res != errno.ESRCH:
  *                     log.error('pthread_kill failed with: %s', strerror(res))
  *                 with nogil:             # <<<<<<<<<<<<<<
@@ -43073,7 +43183,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
                 }
             }
 
-            /* "src/fuse_api.pxi":463
+            /* "src/fuse_api.pxi":459
  *                 with nogil:
  *                     res = pthread_join(wd[i].thread_id, NULL)
  *                 if res != 0:             # <<<<<<<<<<<<<<
@@ -43083,19 +43193,19 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
             __pyx_t_1 = ((__pyx_v_res != 0) != 0);
             if (__pyx_t_1) {
 
-              /* "src/fuse_api.pxi":464
+              /* "src/fuse_api.pxi":460
  *                     res = pthread_join(wd[i].thread_id, NULL)
  *                 if res != 0:
  *                     log.error('pthread_join failed with: %s', strerror(res))             # <<<<<<<<<<<<<<
  * 
  *             if wd[i].buf != NULL:
  */
-              __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 464, __pyx_L27_error)
+              __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 460, __pyx_L27_error)
               __Pyx_GOTREF(__pyx_t_10);
-              __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_error); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 464, __pyx_L27_error)
+              __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_error); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 460, __pyx_L27_error)
               __Pyx_GOTREF(__pyx_t_3);
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-              __pyx_t_10 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 464, __pyx_L27_error)
+              __pyx_t_10 = __pyx_f_6llfuse_strerror(__pyx_v_res); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 460, __pyx_L27_error)
               __Pyx_GOTREF(__pyx_t_10);
               __pyx_t_12 = NULL;
               __pyx_t_21 = 0;
@@ -43112,7 +43222,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
               #if CYTHON_FAST_PYCALL
               if (PyFunction_Check(__pyx_t_3)) {
                 PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_kp_u_pthread_join_failed_with_s, __pyx_t_10};
-                __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 464, __pyx_L27_error)
+                __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L27_error)
                 __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
                 __Pyx_GOTREF(__pyx_t_2);
                 __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
@@ -43121,14 +43231,14 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
               #if CYTHON_FAST_PYCCALL
               if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
                 PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_kp_u_pthread_join_failed_with_s, __pyx_t_10};
-                __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 464, __pyx_L27_error)
+                __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_21, 2+__pyx_t_21); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L27_error)
                 __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
                 __Pyx_GOTREF(__pyx_t_2);
                 __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
               } else
               #endif
               {
-                __pyx_t_4 = PyTuple_New(2+__pyx_t_21); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 464, __pyx_L27_error)
+                __pyx_t_4 = PyTuple_New(2+__pyx_t_21); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 460, __pyx_L27_error)
                 __Pyx_GOTREF(__pyx_t_4);
                 if (__pyx_t_12) {
                   __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_12); __pyx_t_12 = NULL;
@@ -43139,14 +43249,14 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
                 __Pyx_GIVEREF(__pyx_t_10);
                 PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_21, __pyx_t_10);
                 __pyx_t_10 = 0;
-                __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 464, __pyx_L27_error)
+                __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 460, __pyx_L27_error)
                 __Pyx_GOTREF(__pyx_t_2);
                 __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
               }
               __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
               __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-              /* "src/fuse_api.pxi":463
+              /* "src/fuse_api.pxi":459
  *                 with nogil:
  *                     res = pthread_join(wd[i].thread_id, NULL)
  *                 if res != 0:             # <<<<<<<<<<<<<<
@@ -43155,7 +43265,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
             }
 
-            /* "src/fuse_api.pxi":456
+            /* "src/fuse_api.pxi":452
  *     finally:
  *         for i in range(workers):
  *             if wd[i].started:             # <<<<<<<<<<<<<<
@@ -43164,7 +43274,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
           }
 
-          /* "src/fuse_api.pxi":466
+          /* "src/fuse_api.pxi":462
  *                     log.error('pthread_join failed with: %s', strerror(res))
  * 
  *             if wd[i].buf != NULL:             # <<<<<<<<<<<<<<
@@ -43174,7 +43284,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
           __pyx_t_1 = (((__pyx_v_wd[__pyx_v_i]).buf != NULL) != 0);
           if (__pyx_t_1) {
 
-            /* "src/fuse_api.pxi":467
+            /* "src/fuse_api.pxi":463
  * 
  *             if wd[i].buf != NULL:
  *                 stdlib.free(wd[i].buf)             # <<<<<<<<<<<<<<
@@ -43183,7 +43293,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
  */
             free((__pyx_v_wd[__pyx_v_i]).buf);
 
-            /* "src/fuse_api.pxi":466
+            /* "src/fuse_api.pxi":462
  *                     log.error('pthread_join failed with: %s', strerror(res))
  * 
  *             if wd[i].buf != NULL:             # <<<<<<<<<<<<<<
@@ -43193,7 +43303,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
           }
         }
 
-        /* "src/fuse_api.pxi":469
+        /* "src/fuse_api.pxi":465
  *                 stdlib.free(wd[i].buf)
  * 
  *         stdlib.free(wd)             # <<<<<<<<<<<<<<
@@ -43231,7 +43341,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
     __pyx_L6:;
   }
 
-  /* "src/fuse_api.pxi":414
+  /* "src/fuse_api.pxi":410
  *         sem_post(wd.sem)
  * 
  * cdef session_loop_mt(workers):             # <<<<<<<<<<<<<<
@@ -43256,7 +43366,7 @@ static PyObject *__pyx_f_6llfuse_session_loop_mt(PyObject *__pyx_v_workers) {
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":472
+/* "src/fuse_api.pxi":468
  * 
  * 
  * def close(unmount=True):             # <<<<<<<<<<<<<<
@@ -43298,7 +43408,7 @@ static PyObject *__pyx_pw_6llfuse_13close(PyObject *__pyx_self, PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "close") < 0)) __PYX_ERR(3, 472, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "close") < 0)) __PYX_ERR(3, 468, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -43312,7 +43422,7 @@ static PyObject *__pyx_pw_6llfuse_13close(PyObject *__pyx_self, PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("close", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 472, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("close", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 468, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("llfuse.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -43340,16 +43450,16 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
 
-  /* "src/fuse_api.pxi":496
+  /* "src/fuse_api.pxi":492
  *     global exc_info
  * 
  *     log.debug('Calling fuse_session_remove_chan')             # <<<<<<<<<<<<<<
  *     fuse_session_remove_chan(channel)
  *     log.debug('Calling fuse_session_destroy')
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 496, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 492, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 496, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 492, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
@@ -43364,12 +43474,12 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
   }
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_kp_u_Calling_fuse_session_remove_chan) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u_Calling_fuse_session_remove_chan);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 496, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 492, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/fuse_api.pxi":497
+  /* "src/fuse_api.pxi":493
  * 
  *     log.debug('Calling fuse_session_remove_chan')
  *     fuse_session_remove_chan(channel)             # <<<<<<<<<<<<<<
@@ -43378,16 +43488,16 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
  */
   fuse_session_remove_chan(__pyx_v_6llfuse_channel);
 
-  /* "src/fuse_api.pxi":498
+  /* "src/fuse_api.pxi":494
  *     log.debug('Calling fuse_session_remove_chan')
  *     fuse_session_remove_chan(channel)
  *     log.debug('Calling fuse_session_destroy')             # <<<<<<<<<<<<<<
  *     fuse_session_destroy(session)
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_log); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 498, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_log); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 494, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 498, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 494, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = NULL;
@@ -43402,12 +43512,12 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_kp_u_Calling_fuse_session_destroy) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_Calling_fuse_session_destroy);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 498, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 494, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/fuse_api.pxi":499
+  /* "src/fuse_api.pxi":495
  *     fuse_session_remove_chan(channel)
  *     log.debug('Calling fuse_session_destroy')
  *     fuse_session_destroy(session)             # <<<<<<<<<<<<<<
@@ -43416,26 +43526,26 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
  */
   fuse_session_destroy(__pyx_v_6llfuse_session);
 
-  /* "src/fuse_api.pxi":501
+  /* "src/fuse_api.pxi":497
  *     fuse_session_destroy(session)
  * 
  *     if unmount:             # <<<<<<<<<<<<<<
  *         log.debug('Calling fuse_unmount')
  *         fuse_unmount(<char*>mountpoint_b, channel)
  */
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_unmount); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(3, 501, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_unmount); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(3, 497, __pyx_L1_error)
   if (__pyx_t_4) {
 
-    /* "src/fuse_api.pxi":502
+    /* "src/fuse_api.pxi":498
  * 
  *     if unmount:
  *         log.debug('Calling fuse_unmount')             # <<<<<<<<<<<<<<
  *         fuse_unmount(<char*>mountpoint_b, channel)
  *     else:
  */
-    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 502, __pyx_L1_error)
+    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 498, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 502, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 498, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_2 = NULL;
@@ -43450,22 +43560,22 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
     }
     __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_kp_u_Calling_fuse_unmount) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_u_Calling_fuse_unmount);
     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 502, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 498, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "src/fuse_api.pxi":503
+    /* "src/fuse_api.pxi":499
  *     if unmount:
  *         log.debug('Calling fuse_unmount')
  *         fuse_unmount(<char*>mountpoint_b, channel)             # <<<<<<<<<<<<<<
  *     else:
  *         fuse_chan_destroy(channel)
  */
-    __pyx_t_5 = __Pyx_PyObject_AsWritableString(__pyx_v_6llfuse_mountpoint_b); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(3, 503, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_AsWritableString(__pyx_v_6llfuse_mountpoint_b); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) __PYX_ERR(3, 499, __pyx_L1_error)
     fuse_unmount(((char *)__pyx_t_5), __pyx_v_6llfuse_channel);
 
-    /* "src/fuse_api.pxi":501
+    /* "src/fuse_api.pxi":497
  *     fuse_session_destroy(session)
  * 
  *     if unmount:             # <<<<<<<<<<<<<<
@@ -43475,7 +43585,7 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
     goto __pyx_L3;
   }
 
-  /* "src/fuse_api.pxi":505
+  /* "src/fuse_api.pxi":501
  *         fuse_unmount(<char*>mountpoint_b, channel)
  *     else:
  *         fuse_chan_destroy(channel)             # <<<<<<<<<<<<<<
@@ -43487,7 +43597,7 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
   }
   __pyx_L3:;
 
-  /* "src/fuse_api.pxi":507
+  /* "src/fuse_api.pxi":503
  *         fuse_chan_destroy(channel)
  * 
  *     mountpoint_b = None             # <<<<<<<<<<<<<<
@@ -43499,7 +43609,7 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
   __Pyx_DECREF_SET(__pyx_v_6llfuse_mountpoint_b, Py_None);
   __Pyx_GIVEREF(Py_None);
 
-  /* "src/fuse_api.pxi":508
+  /* "src/fuse_api.pxi":504
  * 
  *     mountpoint_b = None
  *     session = NULL             # <<<<<<<<<<<<<<
@@ -43508,7 +43618,7 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
  */
   __pyx_v_6llfuse_session = NULL;
 
-  /* "src/fuse_api.pxi":509
+  /* "src/fuse_api.pxi":505
  *     mountpoint_b = None
  *     session = NULL
  *     channel = NULL             # <<<<<<<<<<<<<<
@@ -43517,17 +43627,17 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
  */
   __pyx_v_6llfuse_channel = NULL;
 
-  /* "src/fuse_api.pxi":512
+  /* "src/fuse_api.pxi":508
  * 
  *     # destroy handler may have given us an exception
  *     if exc_info:             # <<<<<<<<<<<<<<
  *         tmp = exc_info
  *         exc_info = None
  */
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_6llfuse_exc_info); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(3, 512, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_6llfuse_exc_info); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(3, 508, __pyx_L1_error)
   if (unlikely(__pyx_t_4)) {
 
-    /* "src/fuse_api.pxi":513
+    /* "src/fuse_api.pxi":509
  *     # destroy handler may have given us an exception
  *     if exc_info:
  *         tmp = exc_info             # <<<<<<<<<<<<<<
@@ -43537,7 +43647,7 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
     __Pyx_INCREF(__pyx_v_6llfuse_exc_info);
     __pyx_v_tmp = __pyx_v_6llfuse_exc_info;
 
-    /* "src/fuse_api.pxi":514
+    /* "src/fuse_api.pxi":510
  *     if exc_info:
  *         tmp = exc_info
  *         exc_info = None             # <<<<<<<<<<<<<<
@@ -43549,19 +43659,19 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
     __Pyx_DECREF_SET(__pyx_v_6llfuse_exc_info, Py_None);
     __Pyx_GIVEREF(Py_None);
 
-    /* "src/fuse_api.pxi":516
+    /* "src/fuse_api.pxi":512
  *         exc_info = None
  * 
  *         raise tmp[1].with_traceback(tmp[2])             # <<<<<<<<<<<<<<
  * 
  * def invalidate_inode(fuse_ino_t inode, attr_only=False):
  */
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_tmp, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 516, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_tmp, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 512, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_with_traceback); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 516, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_with_traceback); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 512, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_tmp, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 516, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_tmp, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 512, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_6 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -43576,14 +43686,14 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
     __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 516, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 512, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(3, 516, __pyx_L1_error)
+    __PYX_ERR(3, 512, __pyx_L1_error)
 
-    /* "src/fuse_api.pxi":512
+    /* "src/fuse_api.pxi":508
  * 
  *     # destroy handler may have given us an exception
  *     if exc_info:             # <<<<<<<<<<<<<<
@@ -43592,7 +43702,7 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
  */
   }
 
-  /* "src/fuse_api.pxi":472
+  /* "src/fuse_api.pxi":468
  * 
  * 
  * def close(unmount=True):             # <<<<<<<<<<<<<<
@@ -43617,7 +43727,7 @@ static PyObject *__pyx_pf_6llfuse_12close(CYTHON_UNUSED PyObject *__pyx_self, Py
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":518
+/* "src/fuse_api.pxi":514
  *         raise tmp[1].with_traceback(tmp[2])
  * 
  * def invalidate_inode(fuse_ino_t inode, attr_only=False):             # <<<<<<<<<<<<<<
@@ -43666,7 +43776,7 @@ static PyObject *__pyx_pw_6llfuse_15invalidate_inode(PyObject *__pyx_self, PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "invalidate_inode") < 0)) __PYX_ERR(3, 518, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "invalidate_inode") < 0)) __PYX_ERR(3, 514, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -43677,12 +43787,12 @@ static PyObject *__pyx_pw_6llfuse_15invalidate_inode(PyObject *__pyx_self, PyObj
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_inode = __Pyx_PyInt_As_fuse_ino_t(values[0]); if (unlikely((__pyx_v_inode == ((fuse_ino_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 518, __pyx_L3_error)
+    __pyx_v_inode = __Pyx_PyInt_As_fuse_ino_t(values[0]); if (unlikely((__pyx_v_inode == ((fuse_ino_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 514, __pyx_L3_error)
     __pyx_v_attr_only = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("invalidate_inode", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 518, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("invalidate_inode", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 514, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("llfuse.invalidate_inode", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -43708,19 +43818,19 @@ static PyObject *__pyx_pf_6llfuse_14invalidate_inode(CYTHON_UNUSED PyObject *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("invalidate_inode", 0);
 
-  /* "src/fuse_api.pxi":528
+  /* "src/fuse_api.pxi":524
  * 
  *     cdef NotifyRequest req
  *     req = NotifyRequest.__new__(NotifyRequest)             # <<<<<<<<<<<<<<
  *     req.kind = NOTIFY_INVAL_INODE
  *     req.ino = inode
  */
-  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6llfuse_NotifyRequest(((PyTypeObject *)__pyx_ptype_6llfuse_NotifyRequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 528, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6llfuse_NotifyRequest(((PyTypeObject *)__pyx_ptype_6llfuse_NotifyRequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 524, __pyx_L1_error)
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_req = ((struct __pyx_obj_6llfuse_NotifyRequest *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/fuse_api.pxi":529
+  /* "src/fuse_api.pxi":525
  *     cdef NotifyRequest req
  *     req = NotifyRequest.__new__(NotifyRequest)
  *     req.kind = NOTIFY_INVAL_INODE             # <<<<<<<<<<<<<<
@@ -43729,7 +43839,7 @@ static PyObject *__pyx_pf_6llfuse_14invalidate_inode(CYTHON_UNUSED PyObject *__p
  */
   __pyx_v_req->kind = NOTIFY_INVAL_INODE;
 
-  /* "src/fuse_api.pxi":530
+  /* "src/fuse_api.pxi":526
  *     req = NotifyRequest.__new__(NotifyRequest)
  *     req.kind = NOTIFY_INVAL_INODE
  *     req.ino = inode             # <<<<<<<<<<<<<<
@@ -43738,24 +43848,24 @@ static PyObject *__pyx_pf_6llfuse_14invalidate_inode(CYTHON_UNUSED PyObject *__p
  */
   __pyx_v_req->ino = __pyx_v_inode;
 
-  /* "src/fuse_api.pxi":531
+  /* "src/fuse_api.pxi":527
  *     req.kind = NOTIFY_INVAL_INODE
  *     req.ino = inode
  *     req.attr_only = bool(attr_only)             # <<<<<<<<<<<<<<
  *     _notify_queue.put(req)
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_attr_only); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(3, 531, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_attr_only); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(3, 527, __pyx_L1_error)
   __pyx_v_req->attr_only = (!(!__pyx_t_2));
 
-  /* "src/fuse_api.pxi":532
+  /* "src/fuse_api.pxi":528
  *     req.ino = inode
  *     req.attr_only = bool(attr_only)
  *     _notify_queue.put(req)             # <<<<<<<<<<<<<<
  * 
  * def invalidate_entry(fuse_ino_t inode_p, bytes name):
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_6llfuse__notify_queue, __pyx_n_s_put); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 532, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_6llfuse__notify_queue, __pyx_n_s_put); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -43769,12 +43879,12 @@ static PyObject *__pyx_pf_6llfuse_14invalidate_inode(CYTHON_UNUSED PyObject *__p
   }
   __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, ((PyObject *)__pyx_v_req)) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_req));
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 532, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/fuse_api.pxi":518
+  /* "src/fuse_api.pxi":514
  *         raise tmp[1].with_traceback(tmp[2])
  * 
  * def invalidate_inode(fuse_ino_t inode, attr_only=False):             # <<<<<<<<<<<<<<
@@ -43798,7 +43908,7 @@ static PyObject *__pyx_pf_6llfuse_14invalidate_inode(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":534
+/* "src/fuse_api.pxi":530
  *     _notify_queue.put(req)
  * 
  * def invalidate_entry(fuse_ino_t inode_p, bytes name):             # <<<<<<<<<<<<<<
@@ -43842,11 +43952,11 @@ static PyObject *__pyx_pw_6llfuse_17invalidate_entry(PyObject *__pyx_self, PyObj
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("invalidate_entry", 1, 2, 2, 1); __PYX_ERR(3, 534, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("invalidate_entry", 1, 2, 2, 1); __PYX_ERR(3, 530, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "invalidate_entry") < 0)) __PYX_ERR(3, 534, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "invalidate_entry") < 0)) __PYX_ERR(3, 530, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -43854,18 +43964,18 @@ static PyObject *__pyx_pw_6llfuse_17invalidate_entry(PyObject *__pyx_self, PyObj
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_inode_p = __Pyx_PyInt_As_fuse_ino_t(values[0]); if (unlikely((__pyx_v_inode_p == ((fuse_ino_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 534, __pyx_L3_error)
+    __pyx_v_inode_p = __Pyx_PyInt_As_fuse_ino_t(values[0]); if (unlikely((__pyx_v_inode_p == ((fuse_ino_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 530, __pyx_L3_error)
     __pyx_v_name = ((PyObject*)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("invalidate_entry", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 534, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("invalidate_entry", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 530, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("llfuse.invalidate_entry", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyBytes_Type), 1, "name", 1))) __PYX_ERR(3, 534, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyBytes_Type), 1, "name", 1))) __PYX_ERR(3, 530, __pyx_L1_error)
   __pyx_r = __pyx_pf_6llfuse_16invalidate_entry(__pyx_self, __pyx_v_inode_p, __pyx_v_name);
 
   /* function exit code */
@@ -43889,19 +43999,19 @@ static PyObject *__pyx_pf_6llfuse_16invalidate_entry(CYTHON_UNUSED PyObject *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("invalidate_entry", 0);
 
-  /* "src/fuse_api.pxi":544
+  /* "src/fuse_api.pxi":540
  * 
  *     cdef NotifyRequest req
  *     req = NotifyRequest.__new__(NotifyRequest)             # <<<<<<<<<<<<<<
  *     req.kind = NOTIFY_INVAL_ENTRY
  *     req.ino = inode_p
  */
-  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6llfuse_NotifyRequest(((PyTypeObject *)__pyx_ptype_6llfuse_NotifyRequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 544, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6llfuse_NotifyRequest(((PyTypeObject *)__pyx_ptype_6llfuse_NotifyRequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 540, __pyx_L1_error)
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_req = ((struct __pyx_obj_6llfuse_NotifyRequest *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "src/fuse_api.pxi":545
+  /* "src/fuse_api.pxi":541
  *     cdef NotifyRequest req
  *     req = NotifyRequest.__new__(NotifyRequest)
  *     req.kind = NOTIFY_INVAL_ENTRY             # <<<<<<<<<<<<<<
@@ -43910,7 +44020,7 @@ static PyObject *__pyx_pf_6llfuse_16invalidate_entry(CYTHON_UNUSED PyObject *__p
  */
   __pyx_v_req->kind = NOTIFY_INVAL_ENTRY;
 
-  /* "src/fuse_api.pxi":546
+  /* "src/fuse_api.pxi":542
  *     req = NotifyRequest.__new__(NotifyRequest)
  *     req.kind = NOTIFY_INVAL_ENTRY
  *     req.ino = inode_p             # <<<<<<<<<<<<<<
@@ -43919,7 +44029,7 @@ static PyObject *__pyx_pf_6llfuse_16invalidate_entry(CYTHON_UNUSED PyObject *__p
  */
   __pyx_v_req->ino = __pyx_v_inode_p;
 
-  /* "src/fuse_api.pxi":547
+  /* "src/fuse_api.pxi":543
  *     req.kind = NOTIFY_INVAL_ENTRY
  *     req.ino = inode_p
  *     req.name = name             # <<<<<<<<<<<<<<
@@ -43932,14 +44042,14 @@ static PyObject *__pyx_pf_6llfuse_16invalidate_entry(CYTHON_UNUSED PyObject *__p
   __Pyx_DECREF(__pyx_v_req->name);
   __pyx_v_req->name = __pyx_v_name;
 
-  /* "src/fuse_api.pxi":548
+  /* "src/fuse_api.pxi":544
  *     req.ino = inode_p
  *     req.name = name
  *     _notify_queue.put(req)             # <<<<<<<<<<<<<<
  * 
  * def get_ino_t_bits():
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_6llfuse__notify_queue, __pyx_n_s_put); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 548, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_6llfuse__notify_queue, __pyx_n_s_put); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 544, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -43953,12 +44063,12 @@ static PyObject *__pyx_pf_6llfuse_16invalidate_entry(CYTHON_UNUSED PyObject *__p
   }
   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, ((PyObject *)__pyx_v_req)) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_req));
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 548, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 544, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "src/fuse_api.pxi":534
+  /* "src/fuse_api.pxi":530
  *     _notify_queue.put(req)
  * 
  * def invalidate_entry(fuse_ino_t inode_p, bytes name):             # <<<<<<<<<<<<<<
@@ -43982,7 +44092,7 @@ static PyObject *__pyx_pf_6llfuse_16invalidate_entry(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":550
+/* "src/fuse_api.pxi":546
  *     _notify_queue.put(req)
  * 
  * def get_ino_t_bits():             # <<<<<<<<<<<<<<
@@ -44017,7 +44127,7 @@ static PyObject *__pyx_pf_6llfuse_18get_ino_t_bits(CYTHON_UNUSED PyObject *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_ino_t_bits", 0);
 
-  /* "src/fuse_api.pxi":556
+  /* "src/fuse_api.pxi":552
  *     `OverflowError`.
  *     '''
  *     return min(sizeof(ino_t), sizeof(fuse_ino_t)) * 8             # <<<<<<<<<<<<<<
@@ -44032,13 +44142,13 @@ static PyObject *__pyx_pf_6llfuse_18get_ino_t_bits(CYTHON_UNUSED PyObject *__pyx
   } else {
     __pyx_t_3 = __pyx_t_2;
   }
-  __pyx_t_4 = __Pyx_PyInt_FromSize_t((__pyx_t_3 * 8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 556, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_FromSize_t((__pyx_t_3 * 8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 552, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "src/fuse_api.pxi":550
+  /* "src/fuse_api.pxi":546
  *     _notify_queue.put(req)
  * 
  * def get_ino_t_bits():             # <<<<<<<<<<<<<<
@@ -44057,7 +44167,7 @@ static PyObject *__pyx_pf_6llfuse_18get_ino_t_bits(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":558
+/* "src/fuse_api.pxi":554
  *     return min(sizeof(ino_t), sizeof(fuse_ino_t)) * 8
  * 
  * def get_off_t_bits():             # <<<<<<<<<<<<<<
@@ -44089,7 +44199,7 @@ static PyObject *__pyx_pf_6llfuse_20get_off_t_bits(CYTHON_UNUSED PyObject *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_off_t_bits", 0);
 
-  /* "src/fuse_api.pxi":564
+  /* "src/fuse_api.pxi":560
  *     result in `OverflowError`.
  *     '''
  *     return sizeof(off_t) * 8             # <<<<<<<<<<<<<<
@@ -44097,13 +44207,13 @@ static PyObject *__pyx_pf_6llfuse_20get_off_t_bits(CYTHON_UNUSED PyObject *__pyx
  * def notify_store(inode, offset, data):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_FromSize_t(((sizeof(off_t)) * 8)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 564, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_FromSize_t(((sizeof(off_t)) * 8)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 560, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "src/fuse_api.pxi":558
+  /* "src/fuse_api.pxi":554
  *     return min(sizeof(ino_t), sizeof(fuse_ino_t)) * 8
  * 
  * def get_off_t_bits():             # <<<<<<<<<<<<<<
@@ -44122,7 +44232,7 @@ static PyObject *__pyx_pf_6llfuse_20get_off_t_bits(CYTHON_UNUSED PyObject *__pyx
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":566
+/* "src/fuse_api.pxi":562
  *     return sizeof(off_t) * 8
  * 
  * def notify_store(inode, offset, data):             # <<<<<<<<<<<<<<
@@ -44169,17 +44279,17 @@ static PyObject *__pyx_pw_6llfuse_23notify_store(PyObject *__pyx_self, PyObject
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("notify_store", 1, 3, 3, 1); __PYX_ERR(3, 566, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("notify_store", 1, 3, 3, 1); __PYX_ERR(3, 562, __pyx_L3_error)
         }
         CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("notify_store", 1, 3, 3, 2); __PYX_ERR(3, 566, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("notify_store", 1, 3, 3, 2); __PYX_ERR(3, 562, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "notify_store") < 0)) __PYX_ERR(3, 566, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "notify_store") < 0)) __PYX_ERR(3, 562, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -44194,7 +44304,7 @@ static PyObject *__pyx_pw_6llfuse_23notify_store(PyObject *__pyx_self, PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("notify_store", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 566, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("notify_store", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 562, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("llfuse.notify_store", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -44230,16 +44340,16 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("notify_store", 0);
 
-  /* "src/fuse_api.pxi":584
+  /* "src/fuse_api.pxi":580
  *     cdef fuse_buf *buf
  * 
  *     PyObject_GetBuffer(data, &pybuf, PyBUF_CONTIG_RO)             # <<<<<<<<<<<<<<
  *     bufvec.count = 1
  *     bufvec.idx = 0
  */
-  __pyx_t_1 = PyObject_GetBuffer(__pyx_v_data, (&__pyx_v_pybuf), PyBUF_CONTIG_RO); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 584, __pyx_L1_error)
+  __pyx_t_1 = PyObject_GetBuffer(__pyx_v_data, (&__pyx_v_pybuf), PyBUF_CONTIG_RO); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 580, __pyx_L1_error)
 
-  /* "src/fuse_api.pxi":585
+  /* "src/fuse_api.pxi":581
  * 
  *     PyObject_GetBuffer(data, &pybuf, PyBUF_CONTIG_RO)
  *     bufvec.count = 1             # <<<<<<<<<<<<<<
@@ -44248,7 +44358,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
  */
   __pyx_v_bufvec.count = 1;
 
-  /* "src/fuse_api.pxi":586
+  /* "src/fuse_api.pxi":582
  *     PyObject_GetBuffer(data, &pybuf, PyBUF_CONTIG_RO)
  *     bufvec.count = 1
  *     bufvec.idx = 0             # <<<<<<<<<<<<<<
@@ -44257,7 +44367,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
  */
   __pyx_v_bufvec.idx = 0;
 
-  /* "src/fuse_api.pxi":587
+  /* "src/fuse_api.pxi":583
  *     bufvec.count = 1
  *     bufvec.idx = 0
  *     bufvec.off = 0             # <<<<<<<<<<<<<<
@@ -44266,7 +44376,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
  */
   __pyx_v_bufvec.off = 0;
 
-  /* "src/fuse_api.pxi":589
+  /* "src/fuse_api.pxi":585
  *     bufvec.off = 0
  * 
  *     buf = bufvec.buf             # <<<<<<<<<<<<<<
@@ -44276,7 +44386,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
   __pyx_t_2 = __pyx_v_bufvec.buf;
   __pyx_v_buf = __pyx_t_2;
 
-  /* "src/fuse_api.pxi":590
+  /* "src/fuse_api.pxi":586
  * 
  *     buf = bufvec.buf
  *     buf[0].flags = 0             # <<<<<<<<<<<<<<
@@ -44285,7 +44395,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
  */
   (__pyx_v_buf[0]).flags = 0;
 
-  /* "src/fuse_api.pxi":591
+  /* "src/fuse_api.pxi":587
  *     buf = bufvec.buf
  *     buf[0].flags = 0
  *     buf[0].mem = pybuf.buf             # <<<<<<<<<<<<<<
@@ -44295,7 +44405,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
   __pyx_t_3 = __pyx_v_pybuf.buf;
   (__pyx_v_buf[0]).mem = __pyx_t_3;
 
-  /* "src/fuse_api.pxi":592
+  /* "src/fuse_api.pxi":588
  *     buf[0].flags = 0
  *     buf[0].mem = pybuf.buf
  *     buf[0].size = <size_t> pybuf.len # guaranteed positive             # <<<<<<<<<<<<<<
@@ -44304,27 +44414,27 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
  */
   (__pyx_v_buf[0]).size = ((size_t)__pyx_v_pybuf.len);
 
-  /* "src/fuse_api.pxi":594
+  /* "src/fuse_api.pxi":590
  *     buf[0].size = <size_t> pybuf.len # guaranteed positive
  * 
  *     ino = inode             # <<<<<<<<<<<<<<
  *     off = offset
  *     with nogil:
  */
-  __pyx_t_4 = __Pyx_PyInt_As_fuse_ino_t(__pyx_v_inode); if (unlikely((__pyx_t_4 == ((fuse_ino_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 594, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_As_fuse_ino_t(__pyx_v_inode); if (unlikely((__pyx_t_4 == ((fuse_ino_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 590, __pyx_L1_error)
   __pyx_v_ino = __pyx_t_4;
 
-  /* "src/fuse_api.pxi":595
+  /* "src/fuse_api.pxi":591
  * 
  *     ino = inode
  *     off = offset             # <<<<<<<<<<<<<<
  *     with nogil:
  *         ret = fuse_lowlevel_notify_store(channel, ino, off, &bufvec, 0)
  */
-  __pyx_t_5 = __Pyx_PyInt_As_off_t(__pyx_v_offset); if (unlikely((__pyx_t_5 == ((off_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 595, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_As_off_t(__pyx_v_offset); if (unlikely((__pyx_t_5 == ((off_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 591, __pyx_L1_error)
   __pyx_v_off = __pyx_t_5;
 
-  /* "src/fuse_api.pxi":596
+  /* "src/fuse_api.pxi":592
  *     ino = inode
  *     off = offset
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -44339,7 +44449,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
       #endif
       /*try:*/ {
 
-        /* "src/fuse_api.pxi":597
+        /* "src/fuse_api.pxi":593
  *     off = offset
  *     with nogil:
  *         ret = fuse_lowlevel_notify_store(channel, ino, off, &bufvec, 0)             # <<<<<<<<<<<<<<
@@ -44349,7 +44459,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
         __pyx_v_ret = fuse_lowlevel_notify_store(__pyx_v_6llfuse_channel, __pyx_v_ino, __pyx_v_off, (&__pyx_v_bufvec), 0);
       }
 
-      /* "src/fuse_api.pxi":596
+      /* "src/fuse_api.pxi":592
  *     ino = inode
  *     off = offset
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -44368,7 +44478,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
       }
   }
 
-  /* "src/fuse_api.pxi":599
+  /* "src/fuse_api.pxi":595
  *         ret = fuse_lowlevel_notify_store(channel, ino, off, &bufvec, 0)
  * 
  *     PyBuffer_Release(&pybuf)             # <<<<<<<<<<<<<<
@@ -44377,7 +44487,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
  */
   PyBuffer_Release((&__pyx_v_pybuf));
 
-  /* "src/fuse_api.pxi":600
+  /* "src/fuse_api.pxi":596
  * 
  *     PyBuffer_Release(&pybuf)
  *     if ret != 0:             # <<<<<<<<<<<<<<
@@ -44387,21 +44497,21 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
   __pyx_t_6 = ((__pyx_v_ret != 0) != 0);
   if (unlikely(__pyx_t_6)) {
 
-    /* "src/fuse_api.pxi":601
+    /* "src/fuse_api.pxi":597
  *     PyBuffer_Release(&pybuf)
  *     if ret != 0:
  *         raise OSError(-ret, 'fuse_lowlevel_notify_store returned: ' + strerror(-ret))             # <<<<<<<<<<<<<<
  * 
  * def get_sup_groups(pid):
  */
-    __pyx_t_7 = __Pyx_PyInt_From_int((-__pyx_v_ret)); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 601, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyInt_From_int((-__pyx_v_ret)); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 597, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = __pyx_f_6llfuse_strerror((-__pyx_v_ret)); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 601, __pyx_L1_error)
+    __pyx_t_8 = __pyx_f_6llfuse_strerror((-__pyx_v_ret)); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 597, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_9 = PyNumber_Add(__pyx_kp_u_fuse_lowlevel_notify_store_retur, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 601, __pyx_L1_error)
+    __pyx_t_9 = PyNumber_Add(__pyx_kp_u_fuse_lowlevel_notify_store_retur, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 597, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 601, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 597, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
@@ -44409,14 +44519,14 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
     PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_9);
     __pyx_t_7 = 0;
     __pyx_t_9 = 0;
-    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_OSError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 601, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_OSError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 597, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_Raise(__pyx_t_9, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __PYX_ERR(3, 601, __pyx_L1_error)
+    __PYX_ERR(3, 597, __pyx_L1_error)
 
-    /* "src/fuse_api.pxi":600
+    /* "src/fuse_api.pxi":596
  * 
  *     PyBuffer_Release(&pybuf)
  *     if ret != 0:             # <<<<<<<<<<<<<<
@@ -44425,7 +44535,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
  */
   }
 
-  /* "src/fuse_api.pxi":566
+  /* "src/fuse_api.pxi":562
  *     return sizeof(off_t) * 8
  * 
  * def notify_store(inode, offset, data):             # <<<<<<<<<<<<<<
@@ -44448,7 +44558,7 @@ static PyObject *__pyx_pf_6llfuse_22notify_store(CYTHON_UNUSED PyObject *__pyx_s
   return __pyx_r;
 }
 
-/* "src/fuse_api.pxi":603
+/* "src/fuse_api.pxi":599
  *         raise OSError(-ret, 'fuse_lowlevel_notify_store returned: ' + strerror(-ret))
  * 
  * def get_sup_groups(pid):             # <<<<<<<<<<<<<<
@@ -44497,7 +44607,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_sup_groups", 0);
 
-  /* "src/fuse_api.pxi":613
+  /* "src/fuse_api.pxi":609
  *     '''
  * 
  *     with open('/proc/%d/status' % pid, 'r') as fh:             # <<<<<<<<<<<<<<
@@ -44505,9 +44615,9 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
  *             if line.startswith('Groups:'):
  */
   /*with:*/ {
-    __pyx_t_1 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_proc_d_status, __pyx_v_pid); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 613, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_proc_d_status, __pyx_v_pid); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 609, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 613, __pyx_L1_error)
+    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 609, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
@@ -44515,12 +44625,12 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
     __Pyx_GIVEREF(__pyx_n_u_r);
     PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_u_r);
     __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 613, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 609, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 613, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 609, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 613, __pyx_L3_error)
+    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 609, __pyx_L3_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
@@ -44534,7 +44644,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
     }
     __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 613, __pyx_L3_error)
+    if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 609, __pyx_L3_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = __pyx_t_2;
@@ -44552,7 +44662,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
           __pyx_v_fh = __pyx_t_4;
           __pyx_t_4 = 0;
 
-          /* "src/fuse_api.pxi":614
+          /* "src/fuse_api.pxi":610
  * 
  *     with open('/proc/%d/status' % pid, 'r') as fh:
  *         for line in fh:             # <<<<<<<<<<<<<<
@@ -44563,26 +44673,26 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
             __pyx_t_4 = __pyx_v_fh; __Pyx_INCREF(__pyx_t_4); __pyx_t_9 = 0;
             __pyx_t_10 = NULL;
           } else {
-            __pyx_t_9 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_fh); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 614, __pyx_L7_error)
+            __pyx_t_9 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_fh); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 610, __pyx_L7_error)
             __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 614, __pyx_L7_error)
+            __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 610, __pyx_L7_error)
           }
           for (;;) {
             if (likely(!__pyx_t_10)) {
               if (likely(PyList_CheckExact(__pyx_t_4))) {
                 if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_4)) break;
                 #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-                __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(3, 614, __pyx_L7_error)
+                __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(3, 610, __pyx_L7_error)
                 #else
-                __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 614, __pyx_L7_error)
+                __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 610, __pyx_L7_error)
                 __Pyx_GOTREF(__pyx_t_1);
                 #endif
               } else {
                 if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
                 #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-                __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(3, 614, __pyx_L7_error)
+                __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(3, 610, __pyx_L7_error)
                 #else
-                __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 614, __pyx_L7_error)
+                __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 610, __pyx_L7_error)
                 __Pyx_GOTREF(__pyx_t_1);
                 #endif
               }
@@ -44592,7 +44702,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
                 PyObject* exc_type = PyErr_Occurred();
                 if (exc_type) {
                   if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-                  else __PYX_ERR(3, 614, __pyx_L7_error)
+                  else __PYX_ERR(3, 610, __pyx_L7_error)
                 }
                 break;
               }
@@ -44601,14 +44711,14 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
             __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_1);
             __pyx_t_1 = 0;
 
-            /* "src/fuse_api.pxi":615
+            /* "src/fuse_api.pxi":611
  *     with open('/proc/%d/status' % pid, 'r') as fh:
  *         for line in fh:
  *             if line.startswith('Groups:'):             # <<<<<<<<<<<<<<
  *                 break
  *         else:
  */
-            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_line, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 615, __pyx_L7_error)
+            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_line, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 611, __pyx_L7_error)
             __Pyx_GOTREF(__pyx_t_2);
             __pyx_t_5 = NULL;
             if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
@@ -44622,14 +44732,14 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
             }
             __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_kp_u_Groups) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_u_Groups);
             __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-            if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 615, __pyx_L7_error)
+            if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 611, __pyx_L7_error)
             __Pyx_GOTREF(__pyx_t_1);
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-            __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(3, 615, __pyx_L7_error)
+            __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(3, 611, __pyx_L7_error)
             __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
             if (__pyx_t_11) {
 
-              /* "src/fuse_api.pxi":616
+              /* "src/fuse_api.pxi":612
  *         for line in fh:
  *             if line.startswith('Groups:'):
  *                 break             # <<<<<<<<<<<<<<
@@ -44638,7 +44748,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
  */
               goto __pyx_L14_break;
 
-              /* "src/fuse_api.pxi":615
+              /* "src/fuse_api.pxi":611
  *     with open('/proc/%d/status' % pid, 'r') as fh:
  *         for line in fh:
  *             if line.startswith('Groups:'):             # <<<<<<<<<<<<<<
@@ -44647,7 +44757,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
  */
             }
 
-            /* "src/fuse_api.pxi":614
+            /* "src/fuse_api.pxi":610
  * 
  *     with open('/proc/%d/status' % pid, 'r') as fh:
  *         for line in fh:             # <<<<<<<<<<<<<<
@@ -44657,27 +44767,27 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
           }
           /*else*/ {
 
-            /* "src/fuse_api.pxi":618
+            /* "src/fuse_api.pxi":614
  *                 break
  *         else:
  *             raise RuntimeError("Unable to parse %s" % fh.name)             # <<<<<<<<<<<<<<
  *     gids = set()
  *     for x in line.split()[1:]:
  */
-            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_fh, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 618, __pyx_L7_error)
+            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_fh, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 614, __pyx_L7_error)
             __Pyx_GOTREF(__pyx_t_1);
-            __pyx_t_2 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_Unable_to_parse_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 618, __pyx_L7_error)
+            __pyx_t_2 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_Unable_to_parse_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 614, __pyx_L7_error)
             __Pyx_GOTREF(__pyx_t_2);
             __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-            __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 618, __pyx_L7_error)
+            __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 614, __pyx_L7_error)
             __Pyx_GOTREF(__pyx_t_1);
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
             __Pyx_Raise(__pyx_t_1, 0, 0, 0);
             __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-            __PYX_ERR(3, 618, __pyx_L7_error)
+            __PYX_ERR(3, 614, __pyx_L7_error)
           }
 
-          /* "src/fuse_api.pxi":614
+          /* "src/fuse_api.pxi":610
  * 
  *     with open('/proc/%d/status' % pid, 'r') as fh:
  *         for line in fh:             # <<<<<<<<<<<<<<
@@ -44687,7 +44797,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
           __pyx_L14_break:;
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-          /* "src/fuse_api.pxi":613
+          /* "src/fuse_api.pxi":609
  *     '''
  * 
  *     with open('/proc/%d/status' % pid, 'r') as fh:             # <<<<<<<<<<<<<<
@@ -44706,20 +44816,20 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
         __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         /*except:*/ {
           __Pyx_AddTraceback("llfuse.get_sup_groups", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(3, 613, __pyx_L9_except_error)
+          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(3, 609, __pyx_L9_except_error)
           __Pyx_GOTREF(__pyx_t_4);
           __Pyx_GOTREF(__pyx_t_1);
           __Pyx_GOTREF(__pyx_t_2);
-          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 613, __pyx_L9_except_error)
+          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 609, __pyx_L9_except_error)
           __Pyx_GOTREF(__pyx_t_5);
           __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-          if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 613, __pyx_L9_except_error)
+          if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 609, __pyx_L9_except_error)
           __Pyx_GOTREF(__pyx_t_12);
           __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_12);
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-          if (__pyx_t_11 < 0) __PYX_ERR(3, 613, __pyx_L9_except_error)
+          if (__pyx_t_11 < 0) __PYX_ERR(3, 609, __pyx_L9_except_error)
           __pyx_t_13 = ((!(__pyx_t_11 != 0)) != 0);
           if (__pyx_t_13) {
             __Pyx_GIVEREF(__pyx_t_4);
@@ -44727,7 +44837,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
             __Pyx_XGIVEREF(__pyx_t_2);
             __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_1, __pyx_t_2);
             __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_2 = 0; 
-            __PYX_ERR(3, 613, __pyx_L9_except_error)
+            __PYX_ERR(3, 609, __pyx_L9_except_error)
           }
           __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
           __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -44753,7 +44863,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
         if (__pyx_t_3) {
           __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__3, NULL);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 613, __pyx_L1_error)
+          if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 609, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_8);
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         }
@@ -44768,27 +44878,27 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
     __pyx_L20:;
   }
 
-  /* "src/fuse_api.pxi":619
+  /* "src/fuse_api.pxi":615
  *         else:
  *             raise RuntimeError("Unable to parse %s" % fh.name)
  *     gids = set()             # <<<<<<<<<<<<<<
  *     for x in line.split()[1:]:
  *         gids.add(int(x))
  */
-  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 619, __pyx_L1_error)
+  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 615, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gids = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "src/fuse_api.pxi":620
+  /* "src/fuse_api.pxi":616
  *             raise RuntimeError("Unable to parse %s" % fh.name)
  *     gids = set()
  *     for x in line.split()[1:]:             # <<<<<<<<<<<<<<
  *         gids.add(int(x))
  * 
  */
-  if (unlikely(!__pyx_v_line)) { __Pyx_RaiseUnboundLocalError("line"); __PYX_ERR(3, 620, __pyx_L1_error) }
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_line, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 620, __pyx_L1_error)
+  if (unlikely(!__pyx_v_line)) { __Pyx_RaiseUnboundLocalError("line"); __PYX_ERR(3, 616, __pyx_L1_error) }
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_line, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 616, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_4 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -44802,19 +44912,19 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
   }
   __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 620, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 616, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_t_2, 1, 0, NULL, NULL, &__pyx_slice__32, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 620, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_t_2, 1, 0, NULL, NULL, &__pyx_slice__32, 1, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 616, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
     __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_9 = 0;
     __pyx_t_10 = NULL;
   } else {
-    __pyx_t_9 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 620, __pyx_L1_error)
+    __pyx_t_9 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 616, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_10 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 620, __pyx_L1_error)
+    __pyx_t_10 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 616, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   for (;;) {
@@ -44822,17 +44932,17 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
       if (likely(PyList_CheckExact(__pyx_t_2))) {
         if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_2)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(3, 620, __pyx_L1_error)
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(3, 616, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 620, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 616, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       } else {
         if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(3, 620, __pyx_L1_error)
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(3, 616, __pyx_L1_error)
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 620, __pyx_L1_error)
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 616, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_1);
         #endif
       }
@@ -44842,7 +44952,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(3, 620, __pyx_L1_error)
+          else __PYX_ERR(3, 616, __pyx_L1_error)
         }
         break;
       }
@@ -44851,19 +44961,19 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
     __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "src/fuse_api.pxi":621
+    /* "src/fuse_api.pxi":617
  *     gids = set()
  *     for x in line.split()[1:]:
  *         gids.add(int(x))             # <<<<<<<<<<<<<<
  * 
  *     return gids
  */
-    __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 621, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 617, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_14 = PySet_Add(__pyx_v_gids, __pyx_t_1); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(3, 621, __pyx_L1_error)
+    __pyx_t_14 = PySet_Add(__pyx_v_gids, __pyx_t_1); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(3, 617, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "src/fuse_api.pxi":620
+    /* "src/fuse_api.pxi":616
  *             raise RuntimeError("Unable to parse %s" % fh.name)
  *     gids = set()
  *     for x in line.split()[1:]:             # <<<<<<<<<<<<<<
@@ -44873,7 +44983,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "src/fuse_api.pxi":623
+  /* "src/fuse_api.pxi":619
  *         gids.add(int(x))
  * 
  *     return gids             # <<<<<<<<<<<<<<
@@ -44883,7 +44993,7 @@ static PyObject *__pyx_pf_6llfuse_24get_sup_groups(CYTHON_UNUSED PyObject *__pyx
   __pyx_r = __pyx_v_gids;
   goto __pyx_L0;
 
-  /* "src/fuse_api.pxi":603
+  /* "src/fuse_api.pxi":599
  *         raise OSError(-ret, 'fuse_lowlevel_notify_store returned: ' + strerror(-ret))
  * 
  * def get_sup_groups(pid):             # <<<<<<<<<<<<<<
@@ -44997,12 +45107,12 @@ static PyObject *__pyx_pf_6llfuse_26__pyx_unpickle_Lock(CYTHON_UNUSED PyObject *
   PyObject *__pyx_v___pyx_result = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_t_6;
+  PyObject *__pyx_t_6 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -45011,114 +45121,118 @@ static PyObject *__pyx_pf_6llfuse_26__pyx_unpickle_Lock(CYTHON_UNUSED PyObject *
   /* "(tree fragment)":4
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0xd41d8cd:             # <<<<<<<<<<<<<<
+ *     if __pyx_checksum not in (0xd41d8cd, 0xe3b0c44, 0xda39a3e):             # <<<<<<<<<<<<<<
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  */
-  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xd41d8cd) != 0);
-  if (__pyx_t_1) {
+  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__33, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
 
     /* "(tree fragment)":5
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0xd41d8cd:
+ *     if __pyx_checksum not in (0xd41d8cd, 0xe3b0c44, 0xda39a3e):
  *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  *     __pyx_result = Lock.__new__(__pyx_type)
  */
-    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_n_s_PickleError);
     __Pyx_GIVEREF(__pyx_n_s_PickleError);
-    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
-    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_INCREF(__pyx_t_2);
-    __pyx_v___pyx_PickleError = __pyx_t_2;
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError);
+    __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_1);
+    __pyx_v___pyx_PickleError = __pyx_t_1;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "(tree fragment)":6
- *     if __pyx_checksum != 0xd41d8cd:
+ *     if __pyx_checksum not in (0xd41d8cd, 0xe3b0c44, 0xda39a3e):
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)             # <<<<<<<<<<<<<<
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)             # <<<<<<<<<<<<<<
  *     __pyx_result = Lock.__new__(__pyx_type)
  *     if __pyx_state is not None:
  */
-    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xd4, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_INCREF(__pyx_v___pyx_PickleError);
-    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
-    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
-      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
-      if (likely(__pyx_t_5)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-        __Pyx_INCREF(__pyx_t_5);
+    __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL;
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
+      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
+      if (likely(__pyx_t_6)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+        __Pyx_INCREF(__pyx_t_6);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_2, function);
+        __Pyx_DECREF_SET(__pyx_t_1, function);
       }
     }
-    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
-    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __PYX_ERR(4, 6, __pyx_L1_error)
 
     /* "(tree fragment)":4
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0xd41d8cd:             # <<<<<<<<<<<<<<
+ *     if __pyx_checksum not in (0xd41d8cd, 0xe3b0c44, 0xda39a3e):             # <<<<<<<<<<<<<<
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  */
   }
 
   /* "(tree fragment)":7
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  *     __pyx_result = Lock.__new__(__pyx_type)             # <<<<<<<<<<<<<<
  *     if __pyx_state is not None:
  *         __pyx_unpickle_Lock__set_state(<Lock> __pyx_result, __pyx_state)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6llfuse_Lock), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = NULL;
-  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_4)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_4);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6llfuse_Lock), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_5 = NULL;
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
+    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
+    if (likely(__pyx_t_5)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+      __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
+      __Pyx_DECREF_SET(__pyx_t_1, function);
     }
   }
-  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
-  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_v___pyx_result = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type);
+  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v___pyx_result = __pyx_t_4;
+  __pyx_t_4 = 0;
 
   /* "(tree fragment)":8
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  *     __pyx_result = Lock.__new__(__pyx_type)
  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
  *         __pyx_unpickle_Lock__set_state(<Lock> __pyx_result, __pyx_state)
  *     return __pyx_result
  */
-  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
-  __pyx_t_6 = (__pyx_t_1 != 0);
-  if (__pyx_t_6) {
+  __pyx_t_3 = (__pyx_v___pyx_state != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
 
     /* "(tree fragment)":9
  *     __pyx_result = Lock.__new__(__pyx_type)
@@ -45128,12 +45242,12 @@ static PyObject *__pyx_pf_6llfuse_26__pyx_unpickle_Lock(CYTHON_UNUSED PyObject *
  * cdef __pyx_unpickle_Lock__set_state(Lock __pyx_result, tuple __pyx_state):
  */
     if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(4, 9, __pyx_L1_error)
-    __pyx_t_3 = __pyx_f_6llfuse___pyx_unpickle_Lock__set_state(((struct __pyx_obj_6llfuse_Lock *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 9, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_4 = __pyx_f_6llfuse___pyx_unpickle_Lock__set_state(((struct __pyx_obj_6llfuse_Lock *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 9, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "(tree fragment)":8
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  *     __pyx_result = Lock.__new__(__pyx_type)
  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
  *         __pyx_unpickle_Lock__set_state(<Lock> __pyx_result, __pyx_state)
@@ -45161,10 +45275,10 @@ static PyObject *__pyx_pf_6llfuse_26__pyx_unpickle_Lock(CYTHON_UNUSED PyObject *
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("llfuse.__pyx_unpickle_Lock", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -45376,12 +45490,12 @@ static PyObject *__pyx_pf_6llfuse_28__pyx_unpickle_NoLockManager(CYTHON_UNUSED P
   PyObject *__pyx_v___pyx_result = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_t_6;
+  PyObject *__pyx_t_6 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -45390,114 +45504,118 @@ static PyObject *__pyx_pf_6llfuse_28__pyx_unpickle_NoLockManager(CYTHON_UNUSED P
   /* "(tree fragment)":4
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0xd41d8cd:             # <<<<<<<<<<<<<<
+ *     if __pyx_checksum not in (0xd41d8cd, 0xe3b0c44, 0xda39a3e):             # <<<<<<<<<<<<<<
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  */
-  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xd41d8cd) != 0);
-  if (__pyx_t_1) {
+  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__33, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
 
     /* "(tree fragment)":5
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0xd41d8cd:
+ *     if __pyx_checksum not in (0xd41d8cd, 0xe3b0c44, 0xda39a3e):
  *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  *     __pyx_result = NoLockManager.__new__(__pyx_type)
  */
-    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_n_s_PickleError);
     __Pyx_GIVEREF(__pyx_n_s_PickleError);
-    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
-    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_INCREF(__pyx_t_2);
-    __pyx_v___pyx_PickleError = __pyx_t_2;
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError);
+    __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_1);
+    __pyx_v___pyx_PickleError = __pyx_t_1;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "(tree fragment)":6
- *     if __pyx_checksum != 0xd41d8cd:
+ *     if __pyx_checksum not in (0xd41d8cd, 0xe3b0c44, 0xda39a3e):
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)             # <<<<<<<<<<<<<<
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)             # <<<<<<<<<<<<<<
  *     __pyx_result = NoLockManager.__new__(__pyx_type)
  *     if __pyx_state is not None:
  */
-    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xd4, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_INCREF(__pyx_v___pyx_PickleError);
-    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
-    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
-      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
-      if (likely(__pyx_t_5)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-        __Pyx_INCREF(__pyx_t_5);
+    __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL;
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
+      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
+      if (likely(__pyx_t_6)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+        __Pyx_INCREF(__pyx_t_6);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_2, function);
+        __Pyx_DECREF_SET(__pyx_t_1, function);
       }
     }
-    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
-    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __PYX_ERR(4, 6, __pyx_L1_error)
 
     /* "(tree fragment)":4
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0xd41d8cd:             # <<<<<<<<<<<<<<
+ *     if __pyx_checksum not in (0xd41d8cd, 0xe3b0c44, 0xda39a3e):             # <<<<<<<<<<<<<<
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  */
   }
 
   /* "(tree fragment)":7
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  *     __pyx_result = NoLockManager.__new__(__pyx_type)             # <<<<<<<<<<<<<<
  *     if __pyx_state is not None:
  *         __pyx_unpickle_NoLockManager__set_state(<NoLockManager> __pyx_result, __pyx_state)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6llfuse_NoLockManager), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = NULL;
-  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_4)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_4);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6llfuse_NoLockManager), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_5 = NULL;
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
+    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
+    if (likely(__pyx_t_5)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+      __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
+      __Pyx_DECREF_SET(__pyx_t_1, function);
     }
   }
-  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
-  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_v___pyx_result = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type);
+  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v___pyx_result = __pyx_t_4;
+  __pyx_t_4 = 0;
 
   /* "(tree fragment)":8
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  *     __pyx_result = NoLockManager.__new__(__pyx_type)
  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
  *         __pyx_unpickle_NoLockManager__set_state(<NoLockManager> __pyx_result, __pyx_state)
  *     return __pyx_result
  */
-  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
-  __pyx_t_6 = (__pyx_t_1 != 0);
-  if (__pyx_t_6) {
+  __pyx_t_3 = (__pyx_v___pyx_state != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
 
     /* "(tree fragment)":9
  *     __pyx_result = NoLockManager.__new__(__pyx_type)
@@ -45507,12 +45625,12 @@ static PyObject *__pyx_pf_6llfuse_28__pyx_unpickle_NoLockManager(CYTHON_UNUSED P
  * cdef __pyx_unpickle_NoLockManager__set_state(NoLockManager __pyx_result, tuple __pyx_state):
  */
     if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(4, 9, __pyx_L1_error)
-    __pyx_t_3 = __pyx_f_6llfuse___pyx_unpickle_NoLockManager__set_state(((struct __pyx_obj_6llfuse_NoLockManager *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 9, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_4 = __pyx_f_6llfuse___pyx_unpickle_NoLockManager__set_state(((struct __pyx_obj_6llfuse_NoLockManager *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 9, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "(tree fragment)":8
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
  *     __pyx_result = NoLockManager.__new__(__pyx_type)
  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
  *         __pyx_unpickle_NoLockManager__set_state(<NoLockManager> __pyx_result, __pyx_state)
@@ -45540,10 +45658,10 @@ static PyObject *__pyx_pf_6llfuse_28__pyx_unpickle_NoLockManager(CYTHON_UNUSED P
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("llfuse.__pyx_unpickle_NoLockManager", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -45755,12 +45873,12 @@ static PyObject *__pyx_pf_6llfuse_30__pyx_unpickle_RequestContext(CYTHON_UNUSED
   PyObject *__pyx_v___pyx_result = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_t_6;
+  PyObject *__pyx_t_6 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -45769,114 +45887,118 @@ static PyObject *__pyx_pf_6llfuse_30__pyx_unpickle_RequestContext(CYTHON_UNUSED
   /* "(tree fragment)":4
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0x223b7a8:             # <<<<<<<<<<<<<<
+ *     if __pyx_checksum not in (0x223b7a8, 0xe56624f, 0x8a019cd):             # <<<<<<<<<<<<<<
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x223b7a8 = (gid, pid, uid, umask))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x223b7a8, 0xe56624f, 0x8a019cd) = (gid, pid, uid, umask))" % __pyx_checksum)
  */
-  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x223b7a8) != 0);
-  if (__pyx_t_1) {
+  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__34, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
 
     /* "(tree fragment)":5
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0x223b7a8:
+ *     if __pyx_checksum not in (0x223b7a8, 0xe56624f, 0x8a019cd):
  *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x223b7a8 = (gid, pid, uid, umask))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x223b7a8, 0xe56624f, 0x8a019cd) = (gid, pid, uid, umask))" % __pyx_checksum)
  *     __pyx_result = RequestContext.__new__(__pyx_type)
  */
-    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_n_s_PickleError);
     __Pyx_GIVEREF(__pyx_n_s_PickleError);
-    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
-    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_INCREF(__pyx_t_2);
-    __pyx_v___pyx_PickleError = __pyx_t_2;
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError);
+    __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_1);
+    __pyx_v___pyx_PickleError = __pyx_t_1;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "(tree fragment)":6
- *     if __pyx_checksum != 0x223b7a8:
+ *     if __pyx_checksum not in (0x223b7a8, 0xe56624f, 0x8a019cd):
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x223b7a8 = (gid, pid, uid, umask))" % __pyx_checksum)             # <<<<<<<<<<<<<<
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x223b7a8, 0xe56624f, 0x8a019cd) = (gid, pid, uid, umask))" % __pyx_checksum)             # <<<<<<<<<<<<<<
  *     __pyx_result = RequestContext.__new__(__pyx_type)
  *     if __pyx_state is not None:
  */
-    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x22, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_INCREF(__pyx_v___pyx_PickleError);
-    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
-    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
-      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
-      if (likely(__pyx_t_5)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-        __Pyx_INCREF(__pyx_t_5);
+    __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL;
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
+      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
+      if (likely(__pyx_t_6)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+        __Pyx_INCREF(__pyx_t_6);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_2, function);
+        __Pyx_DECREF_SET(__pyx_t_1, function);
       }
     }
-    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
-    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __PYX_ERR(4, 6, __pyx_L1_error)
 
     /* "(tree fragment)":4
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0x223b7a8:             # <<<<<<<<<<<<<<
+ *     if __pyx_checksum not in (0x223b7a8, 0xe56624f, 0x8a019cd):             # <<<<<<<<<<<<<<
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x223b7a8 = (gid, pid, uid, umask))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x223b7a8, 0xe56624f, 0x8a019cd) = (gid, pid, uid, umask))" % __pyx_checksum)
  */
   }
 
   /* "(tree fragment)":7
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x223b7a8 = (gid, pid, uid, umask))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x223b7a8, 0xe56624f, 0x8a019cd) = (gid, pid, uid, umask))" % __pyx_checksum)
  *     __pyx_result = RequestContext.__new__(__pyx_type)             # <<<<<<<<<<<<<<
  *     if __pyx_state is not None:
  *         __pyx_unpickle_RequestContext__set_state(<RequestContext> __pyx_result, __pyx_state)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6llfuse_RequestContext), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = NULL;
-  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_4)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_4);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6llfuse_RequestContext), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_5 = NULL;
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
+    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
+    if (likely(__pyx_t_5)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+      __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
+      __Pyx_DECREF_SET(__pyx_t_1, function);
     }
   }
-  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
-  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_v___pyx_result = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type);
+  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v___pyx_result = __pyx_t_4;
+  __pyx_t_4 = 0;
 
   /* "(tree fragment)":8
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x223b7a8 = (gid, pid, uid, umask))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x223b7a8, 0xe56624f, 0x8a019cd) = (gid, pid, uid, umask))" % __pyx_checksum)
  *     __pyx_result = RequestContext.__new__(__pyx_type)
  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
  *         __pyx_unpickle_RequestContext__set_state(<RequestContext> __pyx_result, __pyx_state)
  *     return __pyx_result
  */
-  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
-  __pyx_t_6 = (__pyx_t_1 != 0);
-  if (__pyx_t_6) {
+  __pyx_t_3 = (__pyx_v___pyx_state != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
 
     /* "(tree fragment)":9
  *     __pyx_result = RequestContext.__new__(__pyx_type)
@@ -45886,12 +46008,12 @@ static PyObject *__pyx_pf_6llfuse_30__pyx_unpickle_RequestContext(CYTHON_UNUSED
  * cdef __pyx_unpickle_RequestContext__set_state(RequestContext __pyx_result, tuple __pyx_state):
  */
     if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(4, 9, __pyx_L1_error)
-    __pyx_t_3 = __pyx_f_6llfuse___pyx_unpickle_RequestContext__set_state(((struct __pyx_obj_6llfuse_RequestContext *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 9, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_4 = __pyx_f_6llfuse___pyx_unpickle_RequestContext__set_state(((struct __pyx_obj_6llfuse_RequestContext *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 9, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "(tree fragment)":8
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x223b7a8 = (gid, pid, uid, umask))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x223b7a8, 0xe56624f, 0x8a019cd) = (gid, pid, uid, umask))" % __pyx_checksum)
  *     __pyx_result = RequestContext.__new__(__pyx_type)
  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
  *         __pyx_unpickle_RequestContext__set_state(<RequestContext> __pyx_result, __pyx_state)
@@ -45919,10 +46041,10 @@ static PyObject *__pyx_pf_6llfuse_30__pyx_unpickle_RequestContext(CYTHON_UNUSED
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("llfuse.__pyx_unpickle_RequestContext", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -46182,12 +46304,12 @@ static PyObject *__pyx_pf_6llfuse_32__pyx_unpickle_NotifyRequest(CYTHON_UNUSED P
   PyObject *__pyx_v___pyx_result = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_t_6;
+  PyObject *__pyx_t_6 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -46196,114 +46318,118 @@ static PyObject *__pyx_pf_6llfuse_32__pyx_unpickle_NotifyRequest(CYTHON_UNUSED P
   /* "(tree fragment)":4
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0x822d368:             # <<<<<<<<<<<<<<
+ *     if __pyx_checksum not in (0x822d368, 0x6efe08a, 0xd633613):             # <<<<<<<<<<<<<<
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x822d368 = (attr_only, ino, kind, name))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x822d368, 0x6efe08a, 0xd633613) = (attr_only, ino, kind, name))" % __pyx_checksum)
  */
-  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x822d368) != 0);
-  if (__pyx_t_1) {
+  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__35, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
 
     /* "(tree fragment)":5
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0x822d368:
+ *     if __pyx_checksum not in (0x822d368, 0x6efe08a, 0xd633613):
  *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x822d368 = (attr_only, ino, kind, name))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x822d368, 0x6efe08a, 0xd633613) = (attr_only, ino, kind, name))" % __pyx_checksum)
  *     __pyx_result = NotifyRequest.__new__(__pyx_type)
  */
-    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_n_s_PickleError);
     __Pyx_GIVEREF(__pyx_n_s_PickleError);
-    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
-    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 5, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_INCREF(__pyx_t_2);
-    __pyx_v___pyx_PickleError = __pyx_t_2;
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError);
+    __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 5, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_1);
+    __pyx_v___pyx_PickleError = __pyx_t_1;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "(tree fragment)":6
- *     if __pyx_checksum != 0x822d368:
+ *     if __pyx_checksum not in (0x822d368, 0x6efe08a, 0xd633613):
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x822d368 = (attr_only, ino, kind, name))" % __pyx_checksum)             # <<<<<<<<<<<<<<
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x822d368, 0x6efe08a, 0xd633613) = (attr_only, ino, kind, name))" % __pyx_checksum)             # <<<<<<<<<<<<<<
  *     __pyx_result = NotifyRequest.__new__(__pyx_type)
  *     if __pyx_state is not None:
  */
-    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x82, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_INCREF(__pyx_v___pyx_PickleError);
-    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
-    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
-      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
-      if (likely(__pyx_t_5)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-        __Pyx_INCREF(__pyx_t_5);
+    __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL;
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
+      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
+      if (likely(__pyx_t_6)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+        __Pyx_INCREF(__pyx_t_6);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_2, function);
+        __Pyx_DECREF_SET(__pyx_t_1, function);
       }
     }
-    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
-    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 6, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 6, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __PYX_ERR(4, 6, __pyx_L1_error)
 
     /* "(tree fragment)":4
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
- *     if __pyx_checksum != 0x822d368:             # <<<<<<<<<<<<<<
+ *     if __pyx_checksum not in (0x822d368, 0x6efe08a, 0xd633613):             # <<<<<<<<<<<<<<
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x822d368 = (attr_only, ino, kind, name))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x822d368, 0x6efe08a, 0xd633613) = (attr_only, ino, kind, name))" % __pyx_checksum)
  */
   }
 
   /* "(tree fragment)":7
  *         from pickle import PickleError as __pyx_PickleError
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x822d368 = (attr_only, ino, kind, name))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x822d368, 0x6efe08a, 0xd633613) = (attr_only, ino, kind, name))" % __pyx_checksum)
  *     __pyx_result = NotifyRequest.__new__(__pyx_type)             # <<<<<<<<<<<<<<
  *     if __pyx_state is not None:
  *         __pyx_unpickle_NotifyRequest__set_state(<NotifyRequest> __pyx_result, __pyx_state)
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6llfuse_NotifyRequest), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = NULL;
-  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
-    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
-    if (likely(__pyx_t_4)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
-      __Pyx_INCREF(__pyx_t_4);
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6llfuse_NotifyRequest), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_5 = NULL;
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
+    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
+    if (likely(__pyx_t_5)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+      __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_2, function);
+      __Pyx_DECREF_SET(__pyx_t_1, function);
     }
   }
-  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
-  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_v___pyx_result = __pyx_t_3;
-  __pyx_t_3 = 0;
+  __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type);
+  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v___pyx_result = __pyx_t_4;
+  __pyx_t_4 = 0;
 
   /* "(tree fragment)":8
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x822d368 = (attr_only, ino, kind, name))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x822d368, 0x6efe08a, 0xd633613) = (attr_only, ino, kind, name))" % __pyx_checksum)
  *     __pyx_result = NotifyRequest.__new__(__pyx_type)
  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
  *         __pyx_unpickle_NotifyRequest__set_state(<NotifyRequest> __pyx_result, __pyx_state)
  *     return __pyx_result
  */
-  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
-  __pyx_t_6 = (__pyx_t_1 != 0);
-  if (__pyx_t_6) {
+  __pyx_t_3 = (__pyx_v___pyx_state != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
 
     /* "(tree fragment)":9
  *     __pyx_result = NotifyRequest.__new__(__pyx_type)
@@ -46313,12 +46439,12 @@ static PyObject *__pyx_pf_6llfuse_32__pyx_unpickle_NotifyRequest(CYTHON_UNUSED P
  * cdef __pyx_unpickle_NotifyRequest__set_state(NotifyRequest __pyx_result, tuple __pyx_state):
  */
     if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(4, 9, __pyx_L1_error)
-    __pyx_t_3 = __pyx_f_6llfuse___pyx_unpickle_NotifyRequest__set_state(((struct __pyx_obj_6llfuse_NotifyRequest *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 9, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_4 = __pyx_f_6llfuse___pyx_unpickle_NotifyRequest__set_state(((struct __pyx_obj_6llfuse_NotifyRequest *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 9, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "(tree fragment)":8
- *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x822d368 = (attr_only, ino, kind, name))" % __pyx_checksum)
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x822d368, 0x6efe08a, 0xd633613) = (attr_only, ino, kind, name))" % __pyx_checksum)
  *     __pyx_result = NotifyRequest.__new__(__pyx_type)
  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
  *         __pyx_unpickle_NotifyRequest__set_state(<NotifyRequest> __pyx_result, __pyx_state)
@@ -46346,10 +46472,10 @@ static PyObject *__pyx_pf_6llfuse_32__pyx_unpickle_NotifyRequest(CYTHON_UNUSED P
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("llfuse.__pyx_unpickle_NotifyRequest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -46615,12 +46741,15 @@ static PyTypeObject __pyx_type_6llfuse_Lock = {
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  0, /*tp_pypy_flags*/
+  #endif
 };
 
 static PyObject *__pyx_tp_new_6llfuse_NoLockManager(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
@@ -46713,12 +46842,15 @@ static PyTypeObject __pyx_type_6llfuse_NoLockManager = {
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  0, /*tp_pypy_flags*/
+  #endif
 };
 
 static struct __pyx_obj_6llfuse_RequestContext *__pyx_freelist_6llfuse_RequestContext[10];
@@ -46846,12 +46978,15 @@ static PyTypeObject __pyx_type_6llfuse_RequestContext = {
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  0, /*tp_pypy_flags*/
+  #endif
 };
 
 static struct __pyx_obj_6llfuse_SetattrFields *__pyx_freelist_6llfuse_SetattrFields[10];
@@ -47058,12 +47193,15 @@ static PyTypeObject __pyx_type_6llfuse_SetattrFields = {
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  0, /*tp_pypy_flags*/
+  #endif
 };
 
 static struct __pyx_obj_6llfuse_EntryAttributes *__pyx_freelist_6llfuse_EntryAttributes[30];
@@ -47416,12 +47554,15 @@ static PyTypeObject __pyx_type_6llfuse_EntryAttributes = {
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  0, /*tp_pypy_flags*/
+  #endif
 };
 
 static struct __pyx_obj_6llfuse_StatvfsData *__pyx_freelist_6llfuse_StatvfsData[1];
@@ -47669,12 +47810,15 @@ static PyTypeObject __pyx_type_6llfuse_StatvfsData = {
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  0, /*tp_pypy_flags*/
+  #endif
 };
 
 static PyObject *__pyx_tp_new_6llfuse_FUSEError(PyTypeObject *t, PyObject *a, PyObject *k) {
@@ -47790,12 +47934,15 @@ static PyTypeObject __pyx_type_6llfuse_FUSEError = {
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  0, /*tp_pypy_flags*/
+  #endif
 };
 
 static struct __pyx_obj_6llfuse_NotifyRequest *__pyx_freelist_6llfuse_NotifyRequest[300];
@@ -47923,12 +48070,15 @@ static PyTypeObject __pyx_type_6llfuse_NotifyRequest = {
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  0, /*tp_pypy_flags*/
+  #endif
 };
 
 static PyObject *__pyx_tp_new_6llfuse_VoidPtrCapsule(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
@@ -48018,12 +48168,15 @@ static PyTypeObject __pyx_type_6llfuse_VoidPtrCapsule = {
   #if PY_VERSION_HEX >= 0x030400a1
   0, /*tp_finalize*/
   #endif
-  #if PY_VERSION_HEX >= 0x030800b1
+  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
   0, /*tp_vectorcall*/
   #endif
   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
   0, /*tp_print*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+  0, /*tp_pypy_flags*/
+  #endif
 };
 
 static PyMethodDef __pyx_methods[] = {
@@ -48080,7 +48233,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_u_Calling_fuse_session_loop, __pyx_k_Calling_fuse_session_loop, sizeof(__pyx_k_Calling_fuse_session_loop), 0, 1, 0, 0},
   {&__pyx_kp_u_Calling_fuse_session_remove_chan, __pyx_k_Calling_fuse_session_remove_chan, sizeof(__pyx_k_Calling_fuse_session_remove_chan), 0, 1, 0, 0},
   {&__pyx_kp_u_Calling_fuse_unmount, __pyx_k_Calling_fuse_unmount, sizeof(__pyx_k_Calling_fuse_unmount), 0, 1, 0, 0},
-  {&__pyx_n_u_Darwin, __pyx_k_Darwin, sizeof(__pyx_k_Darwin), 0, 1, 0, 1},
   {&__pyx_n_u_ENOATTR, __pyx_k_ENOATTR, sizeof(__pyx_k_ENOATTR), 0, 1, 0, 1},
   {&__pyx_n_s_EntryAttributes, __pyx_k_EntryAttributes, sizeof(__pyx_k_EntryAttributes), 0, 0, 1, 1},
   {&__pyx_kp_u_Exception_after_kill, __pyx_k_Exception_after_kill, sizeof(__pyx_k_Exception_after_kill), 0, 1, 0, 0},
@@ -48089,9 +48241,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_u_FUSE_worker_thread_d_terminated, __pyx_k_FUSE_worker_thread_d_terminated, sizeof(__pyx_k_FUSE_worker_thread_d_terminated), 0, 1, 0, 0},
   {&__pyx_kp_u_Global_lock_cannot_be_acquired_m, __pyx_k_Global_lock_cannot_be_acquired_m, sizeof(__pyx_k_Global_lock_cannot_be_acquired_m), 0, 1, 0, 0},
   {&__pyx_kp_u_Groups, __pyx_k_Groups, sizeof(__pyx_k_Groups), 0, 1, 0, 0},
-  {&__pyx_kp_s_Incompatible_checksums_s_vs_0x22, __pyx_k_Incompatible_checksums_s_vs_0x22, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x22), 0, 0, 1, 0},
-  {&__pyx_kp_s_Incompatible_checksums_s_vs_0x82, __pyx_k_Incompatible_checksums_s_vs_0x82, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x82), 0, 0, 1, 0},
-  {&__pyx_kp_s_Incompatible_checksums_s_vs_0xd4, __pyx_k_Incompatible_checksums_s_vs_0xd4, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xd4), 0, 0, 1, 0},
+  {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0},
+  {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_k_Incompatible_checksums_0x_x_vs_0_2, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_2), 0, 0, 1, 0},
+  {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_k_Incompatible_checksums_0x_x_vs_0_3, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_3), 0, 0, 1, 0},
   {&__pyx_kp_u_Initializing_llfuse, __pyx_k_Initializing_llfuse, sizeof(__pyx_k_Initializing_llfuse), 0, 1, 0, 0},
   {&__pyx_n_s_Lock, __pyx_k_Lock, sizeof(__pyx_k_Lock), 0, 0, 1, 1},
   {&__pyx_kp_u_Lock_can_only_be_released_by_the, __pyx_k_Lock_can_only_be_released_by_the, sizeof(__pyx_k_Lock_can_only_be_released_by_the), 0, 1, 0, 0},
@@ -48340,7 +48492,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_new_parent_inode, __pyx_k_new_parent_inode, sizeof(__pyx_k_new_parent_inode), 0, 0, 1, 1},
   {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0},
   {&__pyx_n_u_no_splice_read, __pyx_k_no_splice_read, sizeof(__pyx_k_no_splice_read), 0, 1, 0, 1},
-  {&__pyx_n_u_nonempty, __pyx_k_nonempty, sizeof(__pyx_k_nonempty), 0, 1, 0, 1},
   {&__pyx_n_s_notify_loop, __pyx_k_notify_loop, sizeof(__pyx_k_notify_loop), 0, 0, 1, 1},
   {&__pyx_n_s_notify_store, __pyx_k_notify_store, sizeof(__pyx_k_notify_store), 0, 0, 1, 1},
   {&__pyx_kp_b_o, __pyx_k_o, sizeof(__pyx_k_o), 0, 0, 0, 0},
@@ -48449,7 +48600,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_timeout, __pyx_k_timeout, sizeof(__pyx_k_timeout), 0, 0, 1, 1},
   {&__pyx_n_s_tmp, __pyx_k_tmp, sizeof(__pyx_k_tmp), 0, 0, 1, 1},
   {&__pyx_n_s_traceback, __pyx_k_traceback, sizeof(__pyx_k_traceback), 0, 0, 1, 1},
-  {&__pyx_n_s_uname, __pyx_k_uname, sizeof(__pyx_k_uname), 0, 0, 1, 1},
   {&__pyx_kp_u_unknown_flag_s_o, __pyx_k_unknown_flag_s_o, sizeof(__pyx_k_unknown_flag_s_o), 0, 1, 0, 0},
   {&__pyx_n_s_unlink, __pyx_k_unlink, sizeof(__pyx_k_unlink), 0, 0, 1, 1},
   {&__pyx_n_s_unmount, __pyx_k_unmount, sizeof(__pyx_k_unmount), 0, 0, 1, 1},
@@ -48474,7 +48624,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
   __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(2, 175, __pyx_L1_error)
   __pyx_builtin_OSError = __Pyx_GetBuiltinName(__pyx_n_s_OSError); if (!__pyx_builtin_OSError) __PYX_ERR(2, 668, __pyx_L1_error)
   __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(2, 738, __pyx_L1_error)
-  __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) __PYX_ERR(3, 613, __pyx_L1_error)
+  __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) __PYX_ERR(3, 609, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -48711,72 +48861,89 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple__25);
   __Pyx_GIVEREF(__pyx_tuple__25);
 
-  /* "src/fuse_api.pxi":231
+  /* "src/fuse_api.pxi":227
  * 
  *     if not isinstance(mountpoint, str_t):
  *         raise TypeError('*mountpoint_* argument must be of type str')             # <<<<<<<<<<<<<<
  * 
  *     global operations
  */
-  __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_u_mountpoint__argument_must_be_of); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(3, 231, __pyx_L1_error)
+  __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_u_mountpoint__argument_must_be_of); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(3, 227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__27);
   __Pyx_GIVEREF(__pyx_tuple__27);
 
-  /* "src/fuse_api.pxi":246
+  /* "src/fuse_api.pxi":242
  *     channel = fuse_mount(<char*>mountpoint_b, &f_args)
  *     if not channel:
  *         raise RuntimeError('fuse_mount failed')             # <<<<<<<<<<<<<<
  * 
  *     log.debug('Calling fuse_lowlevel_new')
  */
-  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_u_fuse_mount_failed); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(3, 246, __pyx_L1_error)
+  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_u_fuse_mount_failed); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(3, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__28);
   __Pyx_GIVEREF(__pyx_tuple__28);
 
-  /* "src/fuse_api.pxi":253
+  /* "src/fuse_api.pxi":249
  *     if not session:
  *         fuse_unmount(<char*>mountpoint_b, channel)
  *         raise RuntimeError("fuse_lowlevel_new() failed")             # <<<<<<<<<<<<<<
  * 
  *     log.debug('Calling fuse_session_add_chan')
  */
-  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_u_fuse_lowlevel_new_failed); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(3, 253, __pyx_L1_error)
+  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_u_fuse_lowlevel_new_failed); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(3, 249, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__29);
   __Pyx_GIVEREF(__pyx_tuple__29);
 
-  /* "src/fuse_api.pxi":290
+  /* "src/fuse_api.pxi":286
  * 
  *     if session == NULL:
  *         raise RuntimeError('Need to call init() before main()')             # <<<<<<<<<<<<<<
  * 
  *     if workers == 0:
  */
-  __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_u_Need_to_call_init_before_main); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(3, 290, __pyx_L1_error)
+  __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_u_Need_to_call_init_before_main); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(3, 286, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__30);
   __Pyx_GIVEREF(__pyx_tuple__30);
 
-  /* "src/fuse_api.pxi":293
+  /* "src/fuse_api.pxi":289
  * 
  *     if workers == 0:
  *         raise ValueError('No workers is not a good idea')             # <<<<<<<<<<<<<<
  * 
  *     if workers is None:
  */
-  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_u_No_workers_is_not_a_good_idea); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(3, 293, __pyx_L1_error)
+  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_u_No_workers_is_not_a_good_idea); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(3, 289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__31);
   __Pyx_GIVEREF(__pyx_tuple__31);
 
-  /* "src/fuse_api.pxi":620
+  /* "src/fuse_api.pxi":616
  *             raise RuntimeError("Unable to parse %s" % fh.name)
  *     gids = set()
  *     for x in line.split()[1:]:             # <<<<<<<<<<<<<<
  *         gids.add(int(x))
  * 
  */
-  __pyx_slice__32 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__32)) __PYX_ERR(3, 620, __pyx_L1_error)
+  __pyx_slice__32 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__32)) __PYX_ERR(3, 616, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_slice__32);
   __Pyx_GIVEREF(__pyx_slice__32);
 
+  /* "(tree fragment)":4
+ *     cdef object __pyx_PickleError
+ *     cdef object __pyx_result
+ *     if __pyx_checksum not in (0xd41d8cd, 0xe3b0c44, 0xda39a3e):             # <<<<<<<<<<<<<<
+ *         from pickle import PickleError as __pyx_PickleError
+ *         raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xd41d8cd, 0xe3b0c44, 0xda39a3e) = ())" % __pyx_checksum)
+ */
+  __pyx_tuple__33 = PyTuple_Pack(3, __pyx_int_222419149, __pyx_int_238750788, __pyx_int_228825662); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__33);
+  __Pyx_GIVEREF(__pyx_tuple__33);
+  __pyx_tuple__34 = PyTuple_Pack(3, __pyx_int_35895208, __pyx_int_240542287, __pyx_int_144710093); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__34);
+  __Pyx_GIVEREF(__pyx_tuple__34);
+  __pyx_tuple__35 = PyTuple_Pack(3, __pyx_int_136500072, __pyx_int_116383882, __pyx_int_224605715); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(4, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__35);
+  __Pyx_GIVEREF(__pyx_tuple__35);
+
   /* "llfuse.pyx":122
  * ##################
  * 
@@ -48784,9 +48951,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * fse = sys.getfilesystemencoding()
  * 
  */
-  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_n_u_llfuse); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(5, 122, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__33);
-  __Pyx_GIVEREF(__pyx_tuple__33);
+  __pyx_tuple__36 = PyTuple_Pack(1, __pyx_n_u_llfuse); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(5, 122, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__36);
+  __Pyx_GIVEREF(__pyx_tuple__36);
 
   /* "src/operations.pxi":11
  * '''
@@ -48795,9 +48962,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     '''
  *     This class defines the general and request handler methods that an
  */
-  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 11, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__34);
-  __Pyx_GIVEREF(__pyx_tuple__34);
+  __pyx_tuple__37 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__37);
+  __Pyx_GIVEREF(__pyx_tuple__37);
 
   /* "src/operations.pxi":28
  *     '''
@@ -48806,10 +48973,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Initialize operations
  * 
  */
-  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 28, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__35);
-  __Pyx_GIVEREF(__pyx_tuple__35);
-  __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_init, 28, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 28, __pyx_L1_error)
+  __pyx_tuple__38 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__38);
+  __Pyx_GIVEREF(__pyx_tuple__38);
+  __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_init, 28, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 28, __pyx_L1_error)
 
   /* "src/operations.pxi":38
  *         pass
@@ -48818,10 +48985,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Clean up operations.
  * 
  */
-  __pyx_tuple__37 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 38, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__37);
-  __Pyx_GIVEREF(__pyx_tuple__37);
-  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_destroy, 38, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(0, 38, __pyx_L1_error)
+  __pyx_tuple__40 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__40);
+  __Pyx_GIVEREF(__pyx_tuple__40);
+  __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_destroy, 38, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 38, __pyx_L1_error)
 
   /* "src/operations.pxi":50
  *         pass
@@ -48830,10 +48997,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Look up a directory entry by name and get its attributes.
  * 
  */
-  __pyx_tuple__39 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 50, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__39);
-  __Pyx_GIVEREF(__pyx_tuple__39);
-  __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_lookup, 50, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __pyx_tuple__42 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__42);
+  __Pyx_GIVEREF(__pyx_tuple__42);
+  __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_lookup, 50, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 50, __pyx_L1_error)
 
   /* "src/operations.pxi":73
  *         raise FUSEError(errno.ENOSYS)
@@ -48842,10 +49009,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Decrease lookup counts for inodes in *inode_list*
  * 
  */
-  __pyx_tuple__41 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_inode_list); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 73, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__41);
-  __Pyx_GIVEREF(__pyx_tuple__41);
-  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_forget, 73, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 73, __pyx_L1_error)
+  __pyx_tuple__44 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_inode_list); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 73, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__44);
+  __Pyx_GIVEREF(__pyx_tuple__44);
+  __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_forget, 73, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 73, __pyx_L1_error)
 
   /* "src/operations.pxi":96
  *         pass
@@ -48854,10 +49021,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Get attributes for *inode*
  * 
  */
-  __pyx_tuple__43 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 96, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__43);
-  __Pyx_GIVEREF(__pyx_tuple__43);
-  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_getattr, 96, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 96, __pyx_L1_error)
+  __pyx_tuple__46 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 96, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__46);
+  __Pyx_GIVEREF(__pyx_tuple__46);
+  __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_getattr, 96, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 96, __pyx_L1_error)
 
   /* "src/operations.pxi":109
  * 
@@ -48866,10 +49033,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Change attributes of *inode*
  * 
  */
-  __pyx_tuple__45 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_attr, __pyx_n_s_fields, __pyx_n_s_fh, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 109, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__45);
-  __Pyx_GIVEREF(__pyx_tuple__45);
-  __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_setattr, 109, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(0, 109, __pyx_L1_error)
+  __pyx_tuple__48 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_attr, __pyx_n_s_fields, __pyx_n_s_fh, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 109, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__48);
+  __Pyx_GIVEREF(__pyx_tuple__48);
+  __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_setattr, 109, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 109, __pyx_L1_error)
 
   /* "src/operations.pxi":136
  *         raise FUSEError(errno.ENOSYS)
@@ -48878,10 +49045,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Return target of symbolic link *inode*.
  * 
  */
-  __pyx_tuple__47 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 136, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__47);
-  __Pyx_GIVEREF(__pyx_tuple__47);
-  __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_readlink, 136, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) __PYX_ERR(0, 136, __pyx_L1_error)
+  __pyx_tuple__50 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 136, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__50);
+  __Pyx_GIVEREF(__pyx_tuple__50);
+  __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_readlink, 136, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 136, __pyx_L1_error)
 
   /* "src/operations.pxi":145
  * 
@@ -48890,10 +49057,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Create (possibly special) file
  * 
  */
-  __pyx_tuple__49 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_mode, __pyx_n_s_rdev, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 145, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__49);
-  __Pyx_GIVEREF(__pyx_tuple__49);
-  __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_mknod, 145, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) __PYX_ERR(0, 145, __pyx_L1_error)
+  __pyx_tuple__52 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_mode, __pyx_n_s_rdev, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 145, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__52);
+  __Pyx_GIVEREF(__pyx_tuple__52);
+  __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_mknod, 145, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 145, __pyx_L1_error)
 
   /* "src/operations.pxi":163
  *         raise FUSEError(errno.ENOSYS)
@@ -48902,10 +49069,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Create a directory
  * 
  */
-  __pyx_tuple__51 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_mode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 163, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__51);
-  __Pyx_GIVEREF(__pyx_tuple__51);
-  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_mkdir, 163, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) __PYX_ERR(0, 163, __pyx_L1_error)
+  __pyx_tuple__54 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_mode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 163, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__54);
+  __Pyx_GIVEREF(__pyx_tuple__54);
+  __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_mkdir, 163, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) __PYX_ERR(0, 163, __pyx_L1_error)
 
   /* "src/operations.pxi":179
  *         raise FUSEError(errno.ENOSYS)
@@ -48914,10 +49081,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Remove a (possibly special) file
  * 
  */
-  __pyx_tuple__53 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 179, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__53);
-  __Pyx_GIVEREF(__pyx_tuple__53);
-  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_unlink, 179, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) __PYX_ERR(0, 179, __pyx_L1_error)
+  __pyx_tuple__56 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(0, 179, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__56);
+  __Pyx_GIVEREF(__pyx_tuple__56);
+  __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_unlink, 179, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) __PYX_ERR(0, 179, __pyx_L1_error)
 
   /* "src/operations.pxi":201
  *         raise FUSEError(errno.ENOSYS)
@@ -48926,10 +49093,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Remove directory *name*
  * 
  */
-  __pyx_tuple__55 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 201, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__55);
-  __Pyx_GIVEREF(__pyx_tuple__55);
-  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_rmdir, 201, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 201, __pyx_L1_error)
+  __pyx_tuple__58 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(0, 201, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__58);
+  __Pyx_GIVEREF(__pyx_tuple__58);
+  __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_rmdir, 201, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) __PYX_ERR(0, 201, __pyx_L1_error)
 
   /* "src/operations.pxi":225
  *         raise FUSEError(errno.ENOSYS)
@@ -48938,10 +49105,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Create a symbolic link
  * 
  */
-  __pyx_tuple__57 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_target, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 225, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__57);
-  __Pyx_GIVEREF(__pyx_tuple__57);
-  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_symlink, 225, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) __PYX_ERR(0, 225, __pyx_L1_error)
+  __pyx_tuple__60 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_target, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(0, 225, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__60);
+  __Pyx_GIVEREF(__pyx_tuple__60);
+  __pyx_codeobj__61 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__60, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_symlink, 225, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__61)) __PYX_ERR(0, 225, __pyx_L1_error)
 
   /* "src/operations.pxi":241
  *         raise FUSEError(errno.ENOSYS)
@@ -48950,10 +49117,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *                name_new, ctx):
  *         '''Rename a directory entry.
  */
-  __pyx_tuple__59 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_parent_inode_old, __pyx_n_s_name_old, __pyx_n_s_parent_inode_new, __pyx_n_s_name_new, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(0, 241, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__59);
-  __Pyx_GIVEREF(__pyx_tuple__59);
-  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_rename, 241, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __pyx_tuple__62 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_parent_inode_old, __pyx_n_s_name_old, __pyx_n_s_parent_inode_new, __pyx_n_s_name_new, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__62);
+  __Pyx_GIVEREF(__pyx_tuple__62);
+  __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__62, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_rename, 241, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(0, 241, __pyx_L1_error)
 
   /* "src/operations.pxi":266
  *         raise FUSEError(errno.ENOSYS)
@@ -48962,10 +49129,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Create directory entry *name* in *parent_inode* refering to *inode*.
  * 
  */
-  __pyx_tuple__61 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_new_parent_inode, __pyx_n_s_new_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(0, 266, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__61);
-  __Pyx_GIVEREF(__pyx_tuple__61);
-  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_link, 266, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(0, 266, __pyx_L1_error)
+  __pyx_tuple__64 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_new_parent_inode, __pyx_n_s_new_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(0, 266, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__64);
+  __Pyx_GIVEREF(__pyx_tuple__64);
+  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_link, 266, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(0, 266, __pyx_L1_error)
 
   /* "src/operations.pxi":280
  *         raise FUSEError(errno.ENOSYS)
@@ -48974,10 +49141,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Open a inode *inode* with *flags*.
  * 
  */
-  __pyx_tuple__63 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_flags, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(0, 280, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__63);
-  __Pyx_GIVEREF(__pyx_tuple__63);
-  __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_open, 280, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) __PYX_ERR(0, 280, __pyx_L1_error)
+  __pyx_tuple__66 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_flags, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 280, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__66);
+  __Pyx_GIVEREF(__pyx_tuple__66);
+  __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_open, 280, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(0, 280, __pyx_L1_error)
 
   /* "src/operations.pxi":296
  *         raise FUSEError(errno.ENOSYS)
@@ -48986,10 +49153,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Read *size* bytes from *fh* at position *off*
  * 
  */
-  __pyx_tuple__65 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_fh, __pyx_n_s_off, __pyx_n_s_size); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(0, 296, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__65);
-  __Pyx_GIVEREF(__pyx_tuple__65);
-  __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_read, 296, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) __PYX_ERR(0, 296, __pyx_L1_error)
+  __pyx_tuple__68 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_fh, __pyx_n_s_off, __pyx_n_s_size); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 296, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__68);
+  __Pyx_GIVEREF(__pyx_tuple__68);
+  __pyx_codeobj__69 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_read, 296, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__69)) __PYX_ERR(0, 296, __pyx_L1_error)
 
   /* "src/operations.pxi":309
  *         raise FUSEError(errno.ENOSYS)
@@ -48998,10 +49165,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Write *buf* into *fh* at *off*
  * 
  */
-  __pyx_tuple__67 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_fh, __pyx_n_s_off, __pyx_n_s_buf); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(0, 309, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__67);
-  __Pyx_GIVEREF(__pyx_tuple__67);
-  __pyx_codeobj__68 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__67, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_write, 309, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__68)) __PYX_ERR(0, 309, __pyx_L1_error)
+  __pyx_tuple__70 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_fh, __pyx_n_s_off, __pyx_n_s_buf); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(0, 309, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__70);
+  __Pyx_GIVEREF(__pyx_tuple__70);
+  __pyx_codeobj__71 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__70, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_write, 309, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__71)) __PYX_ERR(0, 309, __pyx_L1_error)
 
   /* "src/operations.pxi":323
  *         raise FUSEError(errno.ENOSYS)
@@ -49010,10 +49177,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Handle close() syscall.
  * 
  */
-  __pyx_tuple__69 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_fh); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 323, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__69);
-  __Pyx_GIVEREF(__pyx_tuple__69);
-  __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_flush, 323, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) __PYX_ERR(0, 323, __pyx_L1_error)
+  __pyx_tuple__72 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_fh); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(0, 323, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__72);
+  __Pyx_GIVEREF(__pyx_tuple__72);
+  __pyx_codeobj__73 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__72, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_flush, 323, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__73)) __PYX_ERR(0, 323, __pyx_L1_error)
 
   /* "src/operations.pxi":336
  *         raise FUSEError(errno.ENOSYS)
@@ -49022,10 +49189,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Release open file
  * 
  */
-  __pyx_tuple__71 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_fh); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 336, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__71);
-  __Pyx_GIVEREF(__pyx_tuple__71);
-  __pyx_codeobj__72 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_release, 336, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__72)) __PYX_ERR(0, 336, __pyx_L1_error)
+  __pyx_tuple__74 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_fh); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(0, 336, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__74);
+  __Pyx_GIVEREF(__pyx_tuple__74);
+  __pyx_codeobj__75 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__74, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_release, 336, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__75)) __PYX_ERR(0, 336, __pyx_L1_error)
 
   /* "src/operations.pxi":354
  *         raise FUSEError(errno.ENOSYS)
@@ -49034,10 +49201,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Flush buffers for open file *fh*
  * 
  */
-  __pyx_tuple__73 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_fh, __pyx_n_s_datasync); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(0, 354, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__73);
-  __Pyx_GIVEREF(__pyx_tuple__73);
-  __pyx_codeobj__74 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_fsync, 354, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__74)) __PYX_ERR(0, 354, __pyx_L1_error)
+  __pyx_tuple__76 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_fh, __pyx_n_s_datasync); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(0, 354, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__76);
+  __Pyx_GIVEREF(__pyx_tuple__76);
+  __pyx_codeobj__77 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__76, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_fsync, 354, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__77)) __PYX_ERR(0, 354, __pyx_L1_error)
 
   /* "src/operations.pxi":366
  *         raise FUSEError(errno.ENOSYS)
@@ -49046,10 +49213,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Open the directory with inode *inode*
  * 
  */
-  __pyx_tuple__75 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(0, 366, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__75);
-  __Pyx_GIVEREF(__pyx_tuple__75);
-  __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_opendir, 366, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) __PYX_ERR(0, 366, __pyx_L1_error)
+  __pyx_tuple__78 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(0, 366, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__78);
+  __Pyx_GIVEREF(__pyx_tuple__78);
+  __pyx_codeobj__79 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__78, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_opendir, 366, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__79)) __PYX_ERR(0, 366, __pyx_L1_error)
 
   /* "src/operations.pxi":379
  * 
@@ -49058,10 +49225,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Read entries in open directory *fh*.
  * 
  */
-  __pyx_tuple__77 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_fh, __pyx_n_s_off); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(0, 379, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__77);
-  __Pyx_GIVEREF(__pyx_tuple__77);
-  __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_readdir, 379, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(0, 379, __pyx_L1_error)
+  __pyx_tuple__80 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_fh, __pyx_n_s_off); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(0, 379, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__80);
+  __Pyx_GIVEREF(__pyx_tuple__80);
+  __pyx_codeobj__81 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__80, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_readdir, 379, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__81)) __PYX_ERR(0, 379, __pyx_L1_error)
 
   /* "src/operations.pxi":403
  *         raise FUSEError(errno.ENOSYS)
@@ -49070,10 +49237,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Release open directory
  * 
  */
-  __pyx_tuple__79 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_fh); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(0, 403, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__79);
-  __Pyx_GIVEREF(__pyx_tuple__79);
-  __pyx_codeobj__80 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__79, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_releasedir, 403, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__80)) __PYX_ERR(0, 403, __pyx_L1_error)
+  __pyx_tuple__82 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_fh); if (unlikely(!__pyx_tuple__82)) __PYX_ERR(0, 403, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__82);
+  __Pyx_GIVEREF(__pyx_tuple__82);
+  __pyx_codeobj__83 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_releasedir, 403, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__83)) __PYX_ERR(0, 403, __pyx_L1_error)
 
   /* "src/operations.pxi":413
  *         raise FUSEError(errno.ENOSYS)
@@ -49082,10 +49249,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Flush buffers for open directory *fh*
  * 
  */
-  __pyx_tuple__81 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_fh, __pyx_n_s_datasync); if (unlikely(!__pyx_tuple__81)) __PYX_ERR(0, 413, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__81);
-  __Pyx_GIVEREF(__pyx_tuple__81);
-  __pyx_codeobj__82 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__81, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_fsyncdir, 413, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__82)) __PYX_ERR(0, 413, __pyx_L1_error)
+  __pyx_tuple__84 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_fh, __pyx_n_s_datasync); if (unlikely(!__pyx_tuple__84)) __PYX_ERR(0, 413, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__84);
+  __Pyx_GIVEREF(__pyx_tuple__84);
+  __pyx_codeobj__85 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_fsyncdir, 413, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__85)) __PYX_ERR(0, 413, __pyx_L1_error)
 
   /* "src/operations.pxi":422
  *         raise FUSEError(errno.ENOSYS)
@@ -49094,10 +49261,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Get file system statistics
  * 
  */
-  __pyx_tuple__83 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__83)) __PYX_ERR(0, 422, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__83);
-  __Pyx_GIVEREF(__pyx_tuple__83);
-  __pyx_codeobj__84 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__83, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_statfs, 422, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__84)) __PYX_ERR(0, 422, __pyx_L1_error)
+  __pyx_tuple__86 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__86)) __PYX_ERR(0, 422, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__86);
+  __Pyx_GIVEREF(__pyx_tuple__86);
+  __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_statfs, 422, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) __PYX_ERR(0, 422, __pyx_L1_error)
 
   /* "src/operations.pxi":432
  *         raise FUSEError(errno.ENOSYS)
@@ -49106,10 +49273,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Asynchronous debugging
  * 
  */
-  __pyx_tuple__85 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_sys, __pyx_n_s_traceback, __pyx_n_s_code, __pyx_n_s_threadId, __pyx_n_s_frame, __pyx_n_s_filename, __pyx_n_s_lineno, __pyx_n_s_name, __pyx_n_s_line); if (unlikely(!__pyx_tuple__85)) __PYX_ERR(0, 432, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__85);
-  __Pyx_GIVEREF(__pyx_tuple__85);
-  __pyx_codeobj__86 = (PyObject*)__Pyx_PyCode_New(1, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__85, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_stacktrace, 432, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__86)) __PYX_ERR(0, 432, __pyx_L1_error)
+  __pyx_tuple__88 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_sys, __pyx_n_s_traceback, __pyx_n_s_code, __pyx_n_s_threadId, __pyx_n_s_frame, __pyx_n_s_filename, __pyx_n_s_lineno, __pyx_n_s_name, __pyx_n_s_line); if (unlikely(!__pyx_tuple__88)) __PYX_ERR(0, 432, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__88);
+  __Pyx_GIVEREF(__pyx_tuple__88);
+  __pyx_codeobj__89 = (PyObject*)__Pyx_PyCode_New(1, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__88, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_stacktrace, 432, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__89)) __PYX_ERR(0, 432, __pyx_L1_error)
 
   /* "src/operations.pxi":455
  *         log.error("\n".join(code))
@@ -49118,10 +49285,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Set extended attribute *name* of *inode* to *value*.
  * 
  */
-  __pyx_tuple__87 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_name, __pyx_n_s_value, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__87)) __PYX_ERR(0, 455, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__87);
-  __Pyx_GIVEREF(__pyx_tuple__87);
-  __pyx_codeobj__88 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__87, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_setxattr, 455, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__88)) __PYX_ERR(0, 455, __pyx_L1_error)
+  __pyx_tuple__90 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_name, __pyx_n_s_value, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__90)) __PYX_ERR(0, 455, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__90);
+  __Pyx_GIVEREF(__pyx_tuple__90);
+  __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__90, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_setxattr, 455, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) __PYX_ERR(0, 455, __pyx_L1_error)
 
   /* "src/operations.pxi":467
  *         raise FUSEError(errno.ENOSYS)
@@ -49130,10 +49297,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Return extended attribute *name* of *inode*
  * 
  */
-  __pyx_tuple__89 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__89)) __PYX_ERR(0, 467, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__89);
-  __Pyx_GIVEREF(__pyx_tuple__89);
-  __pyx_codeobj__90 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__89, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_getxattr, 467, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__90)) __PYX_ERR(0, 467, __pyx_L1_error)
+  __pyx_tuple__92 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__92)) __PYX_ERR(0, 467, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__92);
+  __Pyx_GIVEREF(__pyx_tuple__92);
+  __pyx_codeobj__93 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_getxattr, 467, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__93)) __PYX_ERR(0, 467, __pyx_L1_error)
 
   /* "src/operations.pxi":479
  *         raise FUSEError(errno.ENOSYS)
@@ -49142,10 +49309,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Get list of extended attributes for *inode*
  * 
  */
-  __pyx_tuple__91 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__91)) __PYX_ERR(0, 479, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__91);
-  __Pyx_GIVEREF(__pyx_tuple__91);
-  __pyx_codeobj__92 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__91, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_listxattr, 479, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__92)) __PYX_ERR(0, 479, __pyx_L1_error)
+  __pyx_tuple__94 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__94)) __PYX_ERR(0, 479, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__94);
+  __Pyx_GIVEREF(__pyx_tuple__94);
+  __pyx_codeobj__95 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__94, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_listxattr, 479, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__95)) __PYX_ERR(0, 479, __pyx_L1_error)
 
   /* "src/operations.pxi":490
  *         raise FUSEError(errno.ENOSYS)
@@ -49154,10 +49321,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Remove extended attribute *name* of *inode*
  * 
  */
-  __pyx_tuple__93 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__93)) __PYX_ERR(0, 490, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__93);
-  __Pyx_GIVEREF(__pyx_tuple__93);
-  __pyx_codeobj__94 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__93, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_removexattr, 490, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__94)) __PYX_ERR(0, 490, __pyx_L1_error)
+  __pyx_tuple__96 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_name, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__96)) __PYX_ERR(0, 490, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__96);
+  __Pyx_GIVEREF(__pyx_tuple__96);
+  __pyx_codeobj__97 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__96, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_removexattr, 490, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__97)) __PYX_ERR(0, 490, __pyx_L1_error)
 
   /* "src/operations.pxi":503
  * 
@@ -49166,10 +49333,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Check if requesting process has *mode* rights on *inode*.
  * 
  */
-  __pyx_tuple__95 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_mode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__95)) __PYX_ERR(0, 503, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__95);
-  __Pyx_GIVEREF(__pyx_tuple__95);
-  __pyx_codeobj__96 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__95, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_access, 503, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__96)) __PYX_ERR(0, 503, __pyx_L1_error)
+  __pyx_tuple__98 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_inode, __pyx_n_s_mode, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__98)) __PYX_ERR(0, 503, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__98);
+  __Pyx_GIVEREF(__pyx_tuple__98);
+  __pyx_codeobj__99 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__98, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_access, 503, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__99)) __PYX_ERR(0, 503, __pyx_L1_error)
 
   /* "src/operations.pxi":519
  *         raise FUSEError(errno.ENOSYS)
@@ -49178,10 +49345,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         '''Create a file with permissions *mode* and open it with *flags*
  * 
  */
-  __pyx_tuple__97 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_mode, __pyx_n_s_flags, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__97)) __PYX_ERR(0, 519, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__97);
-  __Pyx_GIVEREF(__pyx_tuple__97);
-  __pyx_codeobj__98 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__97, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_create, 519, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__98)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_tuple__100 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_parent_inode, __pyx_n_s_name, __pyx_n_s_mode, __pyx_n_s_flags, __pyx_n_s_ctx); if (unlikely(!__pyx_tuple__100)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__100);
+  __Pyx_GIVEREF(__pyx_tuple__100);
+  __pyx_codeobj__101 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__100, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_operations_pxi, __pyx_n_s_create, 519, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__101)) __PYX_ERR(0, 519, __pyx_L1_error)
 
   /* "src/misc.pxi":260
  *         raise PicklingError("NoLockManager instances can't be pickled")
@@ -49190,10 +49357,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     '''Read notifications from queue and send to FUSE kernel module'''
  * 
  */
-  __pyx_tuple__99 = PyTuple_Pack(3, __pyx_n_s_len, __pyx_n_s_cname, __pyx_n_s_req); if (unlikely(!__pyx_tuple__99)) __PYX_ERR(2, 260, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__99);
-  __Pyx_GIVEREF(__pyx_tuple__99);
-  __pyx_codeobj__100 = (PyObject*)__Pyx_PyCode_New(0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__99, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_misc_pxi, __pyx_n_s_notify_loop, 260, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__100)) __PYX_ERR(2, 260, __pyx_L1_error)
+  __pyx_tuple__102 = PyTuple_Pack(3, __pyx_n_s_len, __pyx_n_s_cname, __pyx_n_s_req); if (unlikely(!__pyx_tuple__102)) __PYX_ERR(2, 260, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__102);
+  __Pyx_GIVEREF(__pyx_tuple__102);
+  __pyx_codeobj__103 = (PyObject*)__Pyx_PyCode_New(0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__102, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_misc_pxi, __pyx_n_s_notify_loop, 260, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__103)) __PYX_ERR(2, 260, __pyx_L1_error)
 
   /* "src/fuse_api.pxi":17
  * 
@@ -49202,10 +49369,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     '''Like `os.listdir`, but releases the GIL.
  * 
  */
-  __pyx_tuple__101 = PyTuple_Pack(6, __pyx_n_s_path, __pyx_n_s_dirp, __pyx_n_s_res, __pyx_n_s_buf, __pyx_n_s_path_b, __pyx_n_s_names); if (unlikely(!__pyx_tuple__101)) __PYX_ERR(3, 17, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__101);
-  __Pyx_GIVEREF(__pyx_tuple__101);
-  __pyx_codeobj__102 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__101, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_listdir, 17, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__102)) __PYX_ERR(3, 17, __pyx_L1_error)
+  __pyx_tuple__104 = PyTuple_Pack(6, __pyx_n_s_path, __pyx_n_s_dirp, __pyx_n_s_res, __pyx_n_s_buf, __pyx_n_s_path_b, __pyx_n_s_names); if (unlikely(!__pyx_tuple__104)) __PYX_ERR(3, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__104);
+  __Pyx_GIVEREF(__pyx_tuple__104);
+  __pyx_codeobj__105 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__104, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_listdir, 17, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__105)) __PYX_ERR(3, 17, __pyx_L1_error)
 
   /* "src/fuse_api.pxi":69
  * 
@@ -49214,10 +49381,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     '''Set extended attribute
  * 
  */
-  __pyx_tuple__103 = PyTuple_Pack(12, __pyx_n_s_path, __pyx_n_s_name, __pyx_n_s_value, __pyx_n_s_namespace, __pyx_n_s_ret, __pyx_n_s_len, __pyx_n_s_cvalue, __pyx_n_s_cpath, __pyx_n_s_cname, __pyx_n_s_cnamespace, __pyx_n_s_path_b, __pyx_n_s_name_b); if (unlikely(!__pyx_tuple__103)) __PYX_ERR(3, 69, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__103);
-  __Pyx_GIVEREF(__pyx_tuple__103);
-  __pyx_codeobj__104 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__103, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_setxattr, 69, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__104)) __PYX_ERR(3, 69, __pyx_L1_error)
+  __pyx_tuple__106 = PyTuple_Pack(12, __pyx_n_s_path, __pyx_n_s_name, __pyx_n_s_value, __pyx_n_s_namespace, __pyx_n_s_ret, __pyx_n_s_len, __pyx_n_s_cvalue, __pyx_n_s_cpath, __pyx_n_s_cname, __pyx_n_s_cnamespace, __pyx_n_s_path_b, __pyx_n_s_name_b); if (unlikely(!__pyx_tuple__106)) __PYX_ERR(3, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__106);
+  __Pyx_GIVEREF(__pyx_tuple__106);
+  __pyx_codeobj__107 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__106, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_setxattr, 69, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__107)) __PYX_ERR(3, 69, __pyx_L1_error)
 
   /* "src/fuse_api.pxi":119
  * 
@@ -49226,156 +49393,145 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     '''Get extended attribute
  * 
  */
-  __pyx_tuple__105 = PyTuple_Pack(12, __pyx_n_s_path, __pyx_n_s_name, __pyx_n_s_size_guess, __pyx_n_s_namespace, __pyx_n_s_ret, __pyx_n_s_buf, __pyx_n_s_cpath, __pyx_n_s_cname, __pyx_n_s_bufsize, __pyx_n_s_cnamespace, __pyx_n_s_path_b, __pyx_n_s_name_b); if (unlikely(!__pyx_tuple__105)) __PYX_ERR(3, 119, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__105);
-  __Pyx_GIVEREF(__pyx_tuple__105);
-  __pyx_codeobj__106 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__105, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_getxattr, 119, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__106)) __PYX_ERR(3, 119, __pyx_L1_error)
+  __pyx_tuple__108 = PyTuple_Pack(12, __pyx_n_s_path, __pyx_n_s_name, __pyx_n_s_size_guess, __pyx_n_s_namespace, __pyx_n_s_ret, __pyx_n_s_buf, __pyx_n_s_cpath, __pyx_n_s_cname, __pyx_n_s_bufsize, __pyx_n_s_cnamespace, __pyx_n_s_path_b, __pyx_n_s_name_b); if (unlikely(!__pyx_tuple__108)) __PYX_ERR(3, 119, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__108);
+  __Pyx_GIVEREF(__pyx_tuple__108);
+  __pyx_codeobj__109 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__108, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_getxattr, 119, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__109)) __PYX_ERR(3, 119, __pyx_L1_error)
 
-  /* "src/fuse_api.pxi":199
+  /* "src/fuse_api.pxi":198
+ *         stdlib.free(buf)
  * 
- * if os.uname()[0] == 'Darwin':
- *     default_options = frozenset(('big_writes', 'default_permissions',             # <<<<<<<<<<<<<<
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
- * else:
- */
-  __pyx_tuple__107 = PyTuple_Pack(5, __pyx_n_u_big_writes, __pyx_n_u_default_permissions, __pyx_n_u_no_splice_read, __pyx_n_u_splice_write, __pyx_n_u_splice_move); if (unlikely(!__pyx_tuple__107)) __PYX_ERR(3, 199, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__107);
-  __Pyx_GIVEREF(__pyx_tuple__107);
-
-  /* "src/fuse_api.pxi":202
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
- * else:
- *     default_options = frozenset(('big_writes', 'nonempty', 'default_permissions',             # <<<<<<<<<<<<<<
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
+ * default_options = frozenset(('big_writes', 'default_permissions',             # <<<<<<<<<<<<<<
+ *                              'no_splice_read', 'splice_write', 'splice_move'))
  * 
  */
-  __pyx_tuple__108 = PyTuple_Pack(6, __pyx_n_u_big_writes, __pyx_n_u_nonempty, __pyx_n_u_default_permissions, __pyx_n_u_no_splice_read, __pyx_n_u_splice_write, __pyx_n_u_splice_move); if (unlikely(!__pyx_tuple__108)) __PYX_ERR(3, 202, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__108);
-  __Pyx_GIVEREF(__pyx_tuple__108);
+  __pyx_tuple__110 = PyTuple_Pack(5, __pyx_n_u_big_writes, __pyx_n_u_default_permissions, __pyx_n_u_no_splice_read, __pyx_n_u_splice_write, __pyx_n_u_splice_move); if (unlikely(!__pyx_tuple__110)) __PYX_ERR(3, 198, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__110);
+  __Pyx_GIVEREF(__pyx_tuple__110);
 
-  /* "src/fuse_api.pxi":205
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
+  /* "src/fuse_api.pxi":201
+ *                              'no_splice_read', 'splice_write', 'splice_move'))
  * 
  * def init(ops, mountpoint, options=default_options):             # <<<<<<<<<<<<<<
  *     '''Initialize and mount FUSE file system
  * 
  */
-  __pyx_tuple__109 = PyTuple_Pack(4, __pyx_n_s_ops, __pyx_n_s_mountpoint, __pyx_n_s_options, __pyx_n_s_f_args); if (unlikely(!__pyx_tuple__109)) __PYX_ERR(3, 205, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__109);
-  __Pyx_GIVEREF(__pyx_tuple__109);
-  __pyx_codeobj__110 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__109, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_init, 205, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__110)) __PYX_ERR(3, 205, __pyx_L1_error)
+  __pyx_tuple__111 = PyTuple_Pack(4, __pyx_n_s_ops, __pyx_n_s_mountpoint, __pyx_n_s_options, __pyx_n_s_f_args); if (unlikely(!__pyx_tuple__111)) __PYX_ERR(3, 201, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__111);
+  __Pyx_GIVEREF(__pyx_tuple__111);
+  __pyx_codeobj__112 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__111, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_init, 201, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__112)) __PYX_ERR(3, 201, __pyx_L1_error)
 
-  /* "src/fuse_api.pxi":260
+  /* "src/fuse_api.pxi":256
  *     pthread_mutex_init(&exc_info_mutex, NULL)
  * 
  * def main(workers=None, handle_signals=True):             # <<<<<<<<<<<<<<
  *     '''Run FUSE main loop
  * 
  */
-  __pyx_tuple__111 = PyTuple_Pack(5, __pyx_n_s_workers, __pyx_n_s_handle_signals, __pyx_n_s_on_exit, __pyx_n_s_t, __pyx_n_s_tmp); if (unlikely(!__pyx_tuple__111)) __PYX_ERR(3, 260, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__111);
-  __Pyx_GIVEREF(__pyx_tuple__111);
-  __pyx_codeobj__112 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__111, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_main_2, 260, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__112)) __PYX_ERR(3, 260, __pyx_L1_error)
+  __pyx_tuple__113 = PyTuple_Pack(5, __pyx_n_s_workers, __pyx_n_s_handle_signals, __pyx_n_s_on_exit, __pyx_n_s_t, __pyx_n_s_tmp); if (unlikely(!__pyx_tuple__113)) __PYX_ERR(3, 256, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__113);
+  __Pyx_GIVEREF(__pyx_tuple__113);
+  __pyx_codeobj__114 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__113, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_main_2, 256, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__114)) __PYX_ERR(3, 256, __pyx_L1_error)
 
-  /* "src/fuse_api.pxi":472
+  /* "src/fuse_api.pxi":468
  * 
  * 
  * def close(unmount=True):             # <<<<<<<<<<<<<<
  *     '''Clean up and ensure filesystem is unmounted
  * 
  */
-  __pyx_tuple__113 = PyTuple_Pack(2, __pyx_n_s_unmount, __pyx_n_s_tmp); if (unlikely(!__pyx_tuple__113)) __PYX_ERR(3, 472, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__113);
-  __Pyx_GIVEREF(__pyx_tuple__113);
-  __pyx_codeobj__114 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__113, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_close, 472, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__114)) __PYX_ERR(3, 472, __pyx_L1_error)
+  __pyx_tuple__115 = PyTuple_Pack(2, __pyx_n_s_unmount, __pyx_n_s_tmp); if (unlikely(!__pyx_tuple__115)) __PYX_ERR(3, 468, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__115);
+  __Pyx_GIVEREF(__pyx_tuple__115);
+  __pyx_codeobj__116 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__115, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_close, 468, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__116)) __PYX_ERR(3, 468, __pyx_L1_error)
 
-  /* "src/fuse_api.pxi":518
+  /* "src/fuse_api.pxi":514
  *         raise tmp[1].with_traceback(tmp[2])
  * 
  * def invalidate_inode(fuse_ino_t inode, attr_only=False):             # <<<<<<<<<<<<<<
  *     '''Invalidate cache for *inode*
  * 
  */
-  __pyx_tuple__115 = PyTuple_Pack(3, __pyx_n_s_inode, __pyx_n_s_attr_only, __pyx_n_s_req); if (unlikely(!__pyx_tuple__115)) __PYX_ERR(3, 518, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__115);
-  __Pyx_GIVEREF(__pyx_tuple__115);
-  __pyx_codeobj__116 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__115, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_invalidate_inode, 518, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__116)) __PYX_ERR(3, 518, __pyx_L1_error)
+  __pyx_tuple__117 = PyTuple_Pack(3, __pyx_n_s_inode, __pyx_n_s_attr_only, __pyx_n_s_req); if (unlikely(!__pyx_tuple__117)) __PYX_ERR(3, 514, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__117);
+  __Pyx_GIVEREF(__pyx_tuple__117);
+  __pyx_codeobj__118 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__117, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_invalidate_inode, 514, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__118)) __PYX_ERR(3, 514, __pyx_L1_error)
 
-  /* "src/fuse_api.pxi":534
+  /* "src/fuse_api.pxi":530
  *     _notify_queue.put(req)
  * 
  * def invalidate_entry(fuse_ino_t inode_p, bytes name):             # <<<<<<<<<<<<<<
  *     '''Invalidate directory entry
  * 
  */
-  __pyx_tuple__117 = PyTuple_Pack(3, __pyx_n_s_inode_p, __pyx_n_s_name, __pyx_n_s_req); if (unlikely(!__pyx_tuple__117)) __PYX_ERR(3, 534, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__117);
-  __Pyx_GIVEREF(__pyx_tuple__117);
-  __pyx_codeobj__118 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__117, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_invalidate_entry, 534, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__118)) __PYX_ERR(3, 534, __pyx_L1_error)
+  __pyx_tuple__119 = PyTuple_Pack(3, __pyx_n_s_inode_p, __pyx_n_s_name, __pyx_n_s_req); if (unlikely(!__pyx_tuple__119)) __PYX_ERR(3, 530, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__119);
+  __Pyx_GIVEREF(__pyx_tuple__119);
+  __pyx_codeobj__120 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__119, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_invalidate_entry, 530, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__120)) __PYX_ERR(3, 530, __pyx_L1_error)
 
-  /* "src/fuse_api.pxi":550
+  /* "src/fuse_api.pxi":546
  *     _notify_queue.put(req)
  * 
  * def get_ino_t_bits():             # <<<<<<<<<<<<<<
  *     '''Return number of bits available for inode numbers
  * 
  */
-  __pyx_codeobj__119 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_get_ino_t_bits, 550, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__119)) __PYX_ERR(3, 550, __pyx_L1_error)
+  __pyx_codeobj__121 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_get_ino_t_bits, 546, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__121)) __PYX_ERR(3, 546, __pyx_L1_error)
 
-  /* "src/fuse_api.pxi":558
+  /* "src/fuse_api.pxi":554
  *     return min(sizeof(ino_t), sizeof(fuse_ino_t)) * 8
  * 
  * def get_off_t_bits():             # <<<<<<<<<<<<<<
  *     '''Return number of bytes available for file offsets
  * 
  */
-  __pyx_codeobj__120 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_get_off_t_bits, 558, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__120)) __PYX_ERR(3, 558, __pyx_L1_error)
+  __pyx_codeobj__122 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_get_off_t_bits, 554, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__122)) __PYX_ERR(3, 554, __pyx_L1_error)
 
-  /* "src/fuse_api.pxi":566
+  /* "src/fuse_api.pxi":562
  *     return sizeof(off_t) * 8
  * 
  * def notify_store(inode, offset, data):             # <<<<<<<<<<<<<<
  *     '''Store data in kernel page cache
  * 
  */
-  __pyx_tuple__121 = PyTuple_Pack(9, __pyx_n_s_inode, __pyx_n_s_offset, __pyx_n_s_data, __pyx_n_s_ret, __pyx_n_s_ino, __pyx_n_s_off, __pyx_n_s_pybuf, __pyx_n_s_bufvec, __pyx_n_s_buf); if (unlikely(!__pyx_tuple__121)) __PYX_ERR(3, 566, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__121);
-  __Pyx_GIVEREF(__pyx_tuple__121);
-  __pyx_codeobj__122 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__121, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_notify_store, 566, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__122)) __PYX_ERR(3, 566, __pyx_L1_error)
+  __pyx_tuple__123 = PyTuple_Pack(9, __pyx_n_s_inode, __pyx_n_s_offset, __pyx_n_s_data, __pyx_n_s_ret, __pyx_n_s_ino, __pyx_n_s_off, __pyx_n_s_pybuf, __pyx_n_s_bufvec, __pyx_n_s_buf); if (unlikely(!__pyx_tuple__123)) __PYX_ERR(3, 562, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__123);
+  __Pyx_GIVEREF(__pyx_tuple__123);
+  __pyx_codeobj__124 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__123, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_notify_store, 562, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__124)) __PYX_ERR(3, 562, __pyx_L1_error)
 
-  /* "src/fuse_api.pxi":603
+  /* "src/fuse_api.pxi":599
  *         raise OSError(-ret, 'fuse_lowlevel_notify_store returned: ' + strerror(-ret))
  * 
  * def get_sup_groups(pid):             # <<<<<<<<<<<<<<
  *     '''Return supplementary group ids of *pid*
  * 
  */
-  __pyx_tuple__123 = PyTuple_Pack(5, __pyx_n_s_pid, __pyx_n_s_fh, __pyx_n_s_line, __pyx_n_s_gids, __pyx_n_s_x); if (unlikely(!__pyx_tuple__123)) __PYX_ERR(3, 603, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__123);
-  __Pyx_GIVEREF(__pyx_tuple__123);
-  __pyx_codeobj__124 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__123, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_get_sup_groups, 603, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__124)) __PYX_ERR(3, 603, __pyx_L1_error)
+  __pyx_tuple__125 = PyTuple_Pack(5, __pyx_n_s_pid, __pyx_n_s_fh, __pyx_n_s_line, __pyx_n_s_gids, __pyx_n_s_x); if (unlikely(!__pyx_tuple__125)) __PYX_ERR(3, 599, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__125);
+  __Pyx_GIVEREF(__pyx_tuple__125);
+  __pyx_codeobj__126 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__125, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_fuse_api_pxi, __pyx_n_s_get_sup_groups, 599, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__126)) __PYX_ERR(3, 599, __pyx_L1_error)
 
   /* "(tree fragment)":1
  * def __pyx_unpickle_Lock(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
  */
-  __pyx_tuple__125 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__125)) __PYX_ERR(4, 1, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__125);
-  __Pyx_GIVEREF(__pyx_tuple__125);
-  __pyx_codeobj__126 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__125, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Lock, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__126)) __PYX_ERR(4, 1, __pyx_L1_error)
   __pyx_tuple__127 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__127)) __PYX_ERR(4, 1, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__127);
   __Pyx_GIVEREF(__pyx_tuple__127);
-  __pyx_codeobj__128 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_NoLockManager, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__128)) __PYX_ERR(4, 1, __pyx_L1_error)
+  __pyx_codeobj__128 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Lock, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__128)) __PYX_ERR(4, 1, __pyx_L1_error)
   __pyx_tuple__129 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__129)) __PYX_ERR(4, 1, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__129);
   __Pyx_GIVEREF(__pyx_tuple__129);
-  __pyx_codeobj__130 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__129, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_RequestContext, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__130)) __PYX_ERR(4, 1, __pyx_L1_error)
+  __pyx_codeobj__130 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__129, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_NoLockManager, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__130)) __PYX_ERR(4, 1, __pyx_L1_error)
   __pyx_tuple__131 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__131)) __PYX_ERR(4, 1, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__131);
   __Pyx_GIVEREF(__pyx_tuple__131);
-  __pyx_codeobj__132 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__131, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_NotifyRequest, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__132)) __PYX_ERR(4, 1, __pyx_L1_error)
+  __pyx_codeobj__132 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__131, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_RequestContext, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__132)) __PYX_ERR(4, 1, __pyx_L1_error)
+  __pyx_tuple__133 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__133)) __PYX_ERR(4, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__133);
+  __Pyx_GIVEREF(__pyx_tuple__133);
+  __pyx_codeobj__134 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__133, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_NotifyRequest, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__134)) __PYX_ERR(4, 1, __pyx_L1_error)
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -49391,8 +49547,14 @@ static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
   __pyx_int_30 = PyInt_FromLong(30); if (unlikely(!__pyx_int_30)) __PYX_ERR(5, 1, __pyx_L1_error)
   __pyx_int_1000 = PyInt_FromLong(1000); if (unlikely(!__pyx_int_1000)) __PYX_ERR(5, 1, __pyx_L1_error)
   __pyx_int_35895208 = PyInt_FromLong(35895208L); if (unlikely(!__pyx_int_35895208)) __PYX_ERR(5, 1, __pyx_L1_error)
+  __pyx_int_116383882 = PyInt_FromLong(116383882L); if (unlikely(!__pyx_int_116383882)) __PYX_ERR(5, 1, __pyx_L1_error)
   __pyx_int_136500072 = PyInt_FromLong(136500072L); if (unlikely(!__pyx_int_136500072)) __PYX_ERR(5, 1, __pyx_L1_error)
+  __pyx_int_144710093 = PyInt_FromLong(144710093L); if (unlikely(!__pyx_int_144710093)) __PYX_ERR(5, 1, __pyx_L1_error)
   __pyx_int_222419149 = PyInt_FromLong(222419149L); if (unlikely(!__pyx_int_222419149)) __PYX_ERR(5, 1, __pyx_L1_error)
+  __pyx_int_224605715 = PyInt_FromLong(224605715L); if (unlikely(!__pyx_int_224605715)) __PYX_ERR(5, 1, __pyx_L1_error)
+  __pyx_int_228825662 = PyInt_FromLong(228825662L); if (unlikely(!__pyx_int_228825662)) __PYX_ERR(5, 1, __pyx_L1_error)
+  __pyx_int_238750788 = PyInt_FromLong(238750788L); if (unlikely(!__pyx_int_238750788)) __PYX_ERR(5, 1, __pyx_L1_error)
+  __pyx_int_240542287 = PyInt_FromLong(240542287L); if (unlikely(!__pyx_int_240542287)) __PYX_ERR(5, 1, __pyx_L1_error)
   __pyx_int_1000000000 = PyInt_FromLong(1000000000L); if (unlikely(!__pyx_int_1000000000)) __PYX_ERR(5, 1, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
@@ -49680,7 +49842,6 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_llfuse(PyObject *__pyx_pyinit_modu
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -49731,11 +49892,9 @@ if (!__Pyx_RefNanny) {
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
+  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
   PyEval_InitThreads();
   #endif
-  #endif
   /*--- Module creation code ---*/
   #if CYTHON_PEP489_MULTI_PHASE_INIT
   __pyx_m = __pyx_pyinit_module;
@@ -49923,7 +50082,7 @@ if (!__Pyx_RefNanny) {
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getLogger); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 122, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 122, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 122, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_log, __pyx_t_1) < 0) __PYX_ERR(5, 122, __pyx_L1_error)
@@ -50065,9 +50224,9 @@ if (!__Pyx_RefNanny) {
  *     '''
  *     This class defines the general and request handler methods that an
  */
-  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__34); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__37); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_tuple__34, __pyx_n_s_Operations, __pyx_n_s_Operations, (PyObject *) NULL, __pyx_n_s_llfuse, __pyx_kp_s_This_class_defines_the_general); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_tuple__37, __pyx_n_s_Operations, __pyx_n_s_Operations, (PyObject *) NULL, __pyx_n_s_llfuse, __pyx_kp_s_This_class_defines_the_general); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
 
   /* "src/operations.pxi":28
@@ -50077,7 +50236,7 @@ if (!__Pyx_RefNanny) {
  *         '''Initialize operations
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_1init, 0, __pyx_n_s_Operations_init, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_1init, 0, __pyx_n_s_Operations_init, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50089,7 +50248,7 @@ if (!__Pyx_RefNanny) {
  *         '''Clean up operations.
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_3destroy, 0, __pyx_n_s_Operations_destroy, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_3destroy, 0, __pyx_n_s_Operations_destroy, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_destroy, __pyx_t_1) < 0) __PYX_ERR(0, 38, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50101,7 +50260,7 @@ if (!__Pyx_RefNanny) {
  *         '''Look up a directory entry by name and get its attributes.
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_5lookup, 0, __pyx_n_s_Operations_lookup, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_5lookup, 0, __pyx_n_s_Operations_lookup, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_lookup, __pyx_t_1) < 0) __PYX_ERR(0, 50, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50113,7 +50272,7 @@ if (!__Pyx_RefNanny) {
  *         '''Decrease lookup counts for inodes in *inode_list*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_7forget, 0, __pyx_n_s_Operations_forget, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_7forget, 0, __pyx_n_s_Operations_forget, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 73, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_forget, __pyx_t_1) < 0) __PYX_ERR(0, 73, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50125,7 +50284,7 @@ if (!__Pyx_RefNanny) {
  *         '''Get attributes for *inode*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_9getattr, 0, __pyx_n_s_Operations_getattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 96, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_9getattr, 0, __pyx_n_s_Operations_getattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 96, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_getattr, __pyx_t_1) < 0) __PYX_ERR(0, 96, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50137,7 +50296,7 @@ if (!__Pyx_RefNanny) {
  *         '''Change attributes of *inode*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_11setattr, 0, __pyx_n_s_Operations_setattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_11setattr, 0, __pyx_n_s_Operations_setattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_setattr, __pyx_t_1) < 0) __PYX_ERR(0, 109, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50149,7 +50308,7 @@ if (!__Pyx_RefNanny) {
  *         '''Return target of symbolic link *inode*.
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_13readlink, 0, __pyx_n_s_Operations_readlink, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_13readlink, 0, __pyx_n_s_Operations_readlink, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_readlink, __pyx_t_1) < 0) __PYX_ERR(0, 136, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50161,7 +50320,7 @@ if (!__Pyx_RefNanny) {
  *         '''Create (possibly special) file
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_15mknod, 0, __pyx_n_s_Operations_mknod, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_15mknod, 0, __pyx_n_s_Operations_mknod, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_mknod, __pyx_t_1) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50173,7 +50332,7 @@ if (!__Pyx_RefNanny) {
  *         '''Create a directory
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_17mkdir, 0, __pyx_n_s_Operations_mkdir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__52)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_17mkdir, 0, __pyx_n_s_Operations_mkdir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__55)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_mkdir, __pyx_t_1) < 0) __PYX_ERR(0, 163, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50185,7 +50344,7 @@ if (!__Pyx_RefNanny) {
  *         '''Remove a (possibly special) file
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_19unlink, 0, __pyx_n_s_Operations_unlink, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__54)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_19unlink, 0, __pyx_n_s_Operations_unlink, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__57)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_unlink, __pyx_t_1) < 0) __PYX_ERR(0, 179, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50197,7 +50356,7 @@ if (!__Pyx_RefNanny) {
  *         '''Remove directory *name*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_21rmdir, 0, __pyx_n_s_Operations_rmdir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_21rmdir, 0, __pyx_n_s_Operations_rmdir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__59)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_rmdir, __pyx_t_1) < 0) __PYX_ERR(0, 201, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50209,7 +50368,7 @@ if (!__Pyx_RefNanny) {
  *         '''Create a symbolic link
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_23symlink, 0, __pyx_n_s_Operations_symlink, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__58)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_23symlink, 0, __pyx_n_s_Operations_symlink, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__61)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_symlink, __pyx_t_1) < 0) __PYX_ERR(0, 225, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50221,7 +50380,7 @@ if (!__Pyx_RefNanny) {
  *                name_new, ctx):
  *         '''Rename a directory entry.
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_25rename, 0, __pyx_n_s_Operations_rename, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__60)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_25rename, 0, __pyx_n_s_Operations_rename, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__63)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_rename, __pyx_t_1) < 0) __PYX_ERR(0, 241, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50233,7 +50392,7 @@ if (!__Pyx_RefNanny) {
  *         '''Create directory entry *name* in *parent_inode* refering to *inode*.
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_27link, 0, __pyx_n_s_Operations_link, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_27link, 0, __pyx_n_s_Operations_link, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__65)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_link, __pyx_t_1) < 0) __PYX_ERR(0, 266, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50245,7 +50404,7 @@ if (!__Pyx_RefNanny) {
  *         '''Open a inode *inode* with *flags*.
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_29open, 0, __pyx_n_s_Operations_open, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__64)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 280, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_29open, 0, __pyx_n_s_Operations_open, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__67)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_open, __pyx_t_1) < 0) __PYX_ERR(0, 280, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50257,7 +50416,7 @@ if (!__Pyx_RefNanny) {
  *         '''Read *size* bytes from *fh* at position *off*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_31read, 0, __pyx_n_s_Operations_read, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__66)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 296, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_31read, 0, __pyx_n_s_Operations_read, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__69)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 296, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_read, __pyx_t_1) < 0) __PYX_ERR(0, 296, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50269,7 +50428,7 @@ if (!__Pyx_RefNanny) {
  *         '''Write *buf* into *fh* at *off*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_33write, 0, __pyx_n_s_Operations_write, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__68)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_33write, 0, __pyx_n_s_Operations_write, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__71)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_write, __pyx_t_1) < 0) __PYX_ERR(0, 309, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50281,7 +50440,7 @@ if (!__Pyx_RefNanny) {
  *         '''Handle close() syscall.
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_35flush, 0, __pyx_n_s_Operations_flush, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__70)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 323, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_35flush, 0, __pyx_n_s_Operations_flush, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__73)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 323, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_flush, __pyx_t_1) < 0) __PYX_ERR(0, 323, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50293,7 +50452,7 @@ if (!__Pyx_RefNanny) {
  *         '''Release open file
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_37release, 0, __pyx_n_s_Operations_release, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__72)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_37release, 0, __pyx_n_s_Operations_release, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__75)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_release, __pyx_t_1) < 0) __PYX_ERR(0, 336, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50305,7 +50464,7 @@ if (!__Pyx_RefNanny) {
  *         '''Flush buffers for open file *fh*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_39fsync, 0, __pyx_n_s_Operations_fsync, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__74)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 354, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_39fsync, 0, __pyx_n_s_Operations_fsync, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__77)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 354, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_fsync, __pyx_t_1) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50317,7 +50476,7 @@ if (!__Pyx_RefNanny) {
  *         '''Open the directory with inode *inode*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_41opendir, 0, __pyx_n_s_Operations_opendir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__76)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_41opendir, 0, __pyx_n_s_Operations_opendir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__79)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 366, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_opendir, __pyx_t_1) < 0) __PYX_ERR(0, 366, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50329,7 +50488,7 @@ if (!__Pyx_RefNanny) {
  *         '''Read entries in open directory *fh*.
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_43readdir, 0, __pyx_n_s_Operations_readdir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__78)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_43readdir, 0, __pyx_n_s_Operations_readdir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__81)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_readdir, __pyx_t_1) < 0) __PYX_ERR(0, 379, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50341,7 +50500,7 @@ if (!__Pyx_RefNanny) {
  *         '''Release open directory
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_45releasedir, 0, __pyx_n_s_Operations_releasedir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__80)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_45releasedir, 0, __pyx_n_s_Operations_releasedir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__83)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_releasedir, __pyx_t_1) < 0) __PYX_ERR(0, 403, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50353,7 +50512,7 @@ if (!__Pyx_RefNanny) {
  *         '''Flush buffers for open directory *fh*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_47fsyncdir, 0, __pyx_n_s_Operations_fsyncdir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__82)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_47fsyncdir, 0, __pyx_n_s_Operations_fsyncdir, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__85)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_fsyncdir, __pyx_t_1) < 0) __PYX_ERR(0, 413, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50365,7 +50524,7 @@ if (!__Pyx_RefNanny) {
  *         '''Get file system statistics
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_49statfs, 0, __pyx_n_s_Operations_statfs, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__84)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 422, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_49statfs, 0, __pyx_n_s_Operations_statfs, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__87)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 422, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_statfs, __pyx_t_1) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50377,7 +50536,7 @@ if (!__Pyx_RefNanny) {
  *         '''Asynchronous debugging
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_51stacktrace, 0, __pyx_n_s_Operations_stacktrace, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__86)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 432, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_51stacktrace, 0, __pyx_n_s_Operations_stacktrace, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__89)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 432, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_stacktrace, __pyx_t_1) < 0) __PYX_ERR(0, 432, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50389,7 +50548,7 @@ if (!__Pyx_RefNanny) {
  *         '''Set extended attribute *name* of *inode* to *value*.
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_53setxattr, 0, __pyx_n_s_Operations_setxattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__88)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 455, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_53setxattr, 0, __pyx_n_s_Operations_setxattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__91)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 455, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_setxattr, __pyx_t_1) < 0) __PYX_ERR(0, 455, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50401,7 +50560,7 @@ if (!__Pyx_RefNanny) {
  *         '''Return extended attribute *name* of *inode*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_55getxattr, 0, __pyx_n_s_Operations_getxattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__90)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 467, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_55getxattr, 0, __pyx_n_s_Operations_getxattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__93)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 467, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_getxattr, __pyx_t_1) < 0) __PYX_ERR(0, 467, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50413,7 +50572,7 @@ if (!__Pyx_RefNanny) {
  *         '''Get list of extended attributes for *inode*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_57listxattr, 0, __pyx_n_s_Operations_listxattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__92)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 479, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_57listxattr, 0, __pyx_n_s_Operations_listxattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__95)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 479, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_listxattr, __pyx_t_1) < 0) __PYX_ERR(0, 479, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50425,7 +50584,7 @@ if (!__Pyx_RefNanny) {
  *         '''Remove extended attribute *name* of *inode*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_59removexattr, 0, __pyx_n_s_Operations_removexattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__94)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 490, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_59removexattr, 0, __pyx_n_s_Operations_removexattr, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__97)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 490, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_removexattr, __pyx_t_1) < 0) __PYX_ERR(0, 490, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50437,7 +50596,7 @@ if (!__Pyx_RefNanny) {
  *         '''Check if requesting process has *mode* rights on *inode*.
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_61access, 0, __pyx_n_s_Operations_access, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__96)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 503, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_61access, 0, __pyx_n_s_Operations_access, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__99)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 503, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_access, __pyx_t_1) < 0) __PYX_ERR(0, 503, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50449,7 +50608,7 @@ if (!__Pyx_RefNanny) {
  *         '''Create a file with permissions *mode* and open it with *flags*
  * 
  */
-  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_63create, 0, __pyx_n_s_Operations_create, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__98)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6llfuse_10Operations_63create, 0, __pyx_n_s_Operations_create, NULL, __pyx_n_s_llfuse, __pyx_d, ((PyObject *)__pyx_codeobj__101)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_create, __pyx_t_1) < 0) __PYX_ERR(0, 519, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50461,7 +50620,7 @@ if (!__Pyx_RefNanny) {
  *     '''
  *     This class defines the general and request handler methods that an
  */
-  __pyx_t_1 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_Operations, __pyx_tuple__34, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_Operations, __pyx_tuple__37, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_Operations, __pyx_t_1) < 0) __PYX_ERR(0, 11, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -50528,184 +50687,137 @@ if (!__Pyx_RefNanny) {
   /* "src/fuse_api.pxi":198
  *         stdlib.free(buf)
  * 
- * if os.uname()[0] == 'Darwin':             # <<<<<<<<<<<<<<
- *     default_options = frozenset(('big_writes', 'default_permissions',
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
+ * default_options = frozenset(('big_writes', 'default_permissions',             # <<<<<<<<<<<<<<
+ *                              'no_splice_read', 'splice_write', 'splice_move'))
+ * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 198, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyFrozenSet_New(__pyx_tuple__110); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_uname); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 198, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_options, __pyx_t_3) < 0) __PYX_ERR(3, 198, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 198, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 198, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_n_u_Darwin, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(3, 198, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (__pyx_t_4) {
-
-    /* "src/fuse_api.pxi":199
- * 
- * if os.uname()[0] == 'Darwin':
- *     default_options = frozenset(('big_writes', 'default_permissions',             # <<<<<<<<<<<<<<
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
- * else:
- */
-    __pyx_t_2 = __Pyx_PyFrozenSet_New(__pyx_tuple__107); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 199, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_options, __pyx_t_2) < 0) __PYX_ERR(3, 199, __pyx_L1_error)
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-    /* "src/fuse_api.pxi":198
- *         stdlib.free(buf)
- * 
- * if os.uname()[0] == 'Darwin':             # <<<<<<<<<<<<<<
- *     default_options = frozenset(('big_writes', 'default_permissions',
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
- */
-    goto __pyx_L2;
-  }
-
-  /* "src/fuse_api.pxi":202
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
- * else:
- *     default_options = frozenset(('big_writes', 'nonempty', 'default_permissions',             # <<<<<<<<<<<<<<
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
- * 
- */
-  /*else*/ {
-    __pyx_t_2 = __Pyx_PyFrozenSet_New(__pyx_tuple__108); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 202, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_options, __pyx_t_2) < 0) __PYX_ERR(3, 202, __pyx_L1_error)
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  }
-  __pyx_L2:;
 
-  /* "src/fuse_api.pxi":205
- *                                  'no_splice_read', 'splice_write', 'splice_move'))
+  /* "src/fuse_api.pxi":201
+ *                              'no_splice_read', 'splice_write', 'splice_move'))
  * 
  * def init(ops, mountpoint, options=default_options):             # <<<<<<<<<<<<<<
  *     '''Initialize and mount FUSE file system
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_default_options); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 205, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __pyx_k__26 = __pyx_t_2;
-  __Pyx_GIVEREF(__pyx_t_2);
-  __pyx_t_2 = 0;
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_9init, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 205, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_init, __pyx_t_2) < 0) __PYX_ERR(3, 205, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_default_options); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 201, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_k__26 = __pyx_t_3;
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_9init, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 201, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_init, __pyx_t_3) < 0) __PYX_ERR(3, 201, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":260
+  /* "src/fuse_api.pxi":256
  *     pthread_mutex_init(&exc_info_mutex, NULL)
  * 
  * def main(workers=None, handle_signals=True):             # <<<<<<<<<<<<<<
  *     '''Run FUSE main loop
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_11main, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 260, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_main_2, __pyx_t_2) < 0) __PYX_ERR(3, 260, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_11main, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 256, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_main_2, __pyx_t_3) < 0) __PYX_ERR(3, 256, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":472
+  /* "src/fuse_api.pxi":468
  * 
  * 
  * def close(unmount=True):             # <<<<<<<<<<<<<<
  *     '''Clean up and ensure filesystem is unmounted
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_13close, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 472, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_close, __pyx_t_2) < 0) __PYX_ERR(3, 472, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_13close, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 468, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_close, __pyx_t_3) < 0) __PYX_ERR(3, 468, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":518
+  /* "src/fuse_api.pxi":514
  *         raise tmp[1].with_traceback(tmp[2])
  * 
  * def invalidate_inode(fuse_ino_t inode, attr_only=False):             # <<<<<<<<<<<<<<
  *     '''Invalidate cache for *inode*
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_15invalidate_inode, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 518, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_invalidate_inode, __pyx_t_2) < 0) __PYX_ERR(3, 518, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_15invalidate_inode, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 514, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_invalidate_inode, __pyx_t_3) < 0) __PYX_ERR(3, 514, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":534
+  /* "src/fuse_api.pxi":530
  *     _notify_queue.put(req)
  * 
  * def invalidate_entry(fuse_ino_t inode_p, bytes name):             # <<<<<<<<<<<<<<
  *     '''Invalidate directory entry
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_17invalidate_entry, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 534, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_invalidate_entry, __pyx_t_2) < 0) __PYX_ERR(3, 534, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_17invalidate_entry, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 530, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_invalidate_entry, __pyx_t_3) < 0) __PYX_ERR(3, 530, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":550
+  /* "src/fuse_api.pxi":546
  *     _notify_queue.put(req)
  * 
  * def get_ino_t_bits():             # <<<<<<<<<<<<<<
  *     '''Return number of bits available for inode numbers
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_19get_ino_t_bits, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 550, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_ino_t_bits, __pyx_t_2) < 0) __PYX_ERR(3, 550, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_19get_ino_t_bits, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 546, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_ino_t_bits, __pyx_t_3) < 0) __PYX_ERR(3, 546, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":558
+  /* "src/fuse_api.pxi":554
  *     return min(sizeof(ino_t), sizeof(fuse_ino_t)) * 8
  * 
  * def get_off_t_bits():             # <<<<<<<<<<<<<<
  *     '''Return number of bytes available for file offsets
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_21get_off_t_bits, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 558, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_off_t_bits, __pyx_t_2) < 0) __PYX_ERR(3, 558, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_21get_off_t_bits, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 554, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_off_t_bits, __pyx_t_3) < 0) __PYX_ERR(3, 554, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":566
+  /* "src/fuse_api.pxi":562
  *     return sizeof(off_t) * 8
  * 
  * def notify_store(inode, offset, data):             # <<<<<<<<<<<<<<
  *     '''Store data in kernel page cache
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_23notify_store, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 566, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_notify_store, __pyx_t_2) < 0) __PYX_ERR(3, 566, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_23notify_store, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 562, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_notify_store, __pyx_t_3) < 0) __PYX_ERR(3, 562, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "src/fuse_api.pxi":603
+  /* "src/fuse_api.pxi":599
  *         raise OSError(-ret, 'fuse_lowlevel_notify_store returned: ' + strerror(-ret))
  * 
  * def get_sup_groups(pid):             # <<<<<<<<<<<<<<
  *     '''Return supplementary group ids of *pid*
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_25get_sup_groups, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 603, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_sup_groups, __pyx_t_2) < 0) __PYX_ERR(3, 603, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_25get_sup_groups, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 599, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_sup_groups, __pyx_t_3) < 0) __PYX_ERR(3, 599, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "(tree fragment)":1
  * def __pyx_unpickle_Lock(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_27__pyx_unpickle_Lock, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 1, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Lock, __pyx_t_2) < 0) __PYX_ERR(4, 1, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_27__pyx_unpickle_Lock, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Lock, __pyx_t_3) < 0) __PYX_ERR(4, 1, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "(tree fragment)":11
  *         __pyx_unpickle_Lock__set_state(<Lock> __pyx_result, __pyx_state)
@@ -50714,20 +50826,20 @@ if (!__Pyx_RefNanny) {
  *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
  *         __pyx_result.__dict__.update(__pyx_state[0])
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_29__pyx_unpickle_NoLockManager, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 1, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_NoLockManager, __pyx_t_2) < 0) __PYX_ERR(4, 1, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_29__pyx_unpickle_NoLockManager, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_NoLockManager, __pyx_t_3) < 0) __PYX_ERR(4, 1, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "(tree fragment)":1
  * def __pyx_unpickle_RequestContext(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
  *     cdef object __pyx_PickleError
  *     cdef object __pyx_result
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_31__pyx_unpickle_RequestContext, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 1, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_RequestContext, __pyx_t_2) < 0) __PYX_ERR(4, 1, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_31__pyx_unpickle_RequestContext, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_RequestContext, __pyx_t_3) < 0) __PYX_ERR(4, 1, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "(tree fragment)":11
  *         __pyx_unpickle_RequestContext__set_state(<RequestContext> __pyx_result, __pyx_state)
@@ -50736,20 +50848,20 @@ if (!__Pyx_RefNanny) {
  *     __pyx_result.gid = __pyx_state[0]; __pyx_result.pid = __pyx_state[1]; __pyx_result.uid = __pyx_state[2]; __pyx_result.umask = __pyx_state[3]
  *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_33__pyx_unpickle_NotifyRequest, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 1, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_NotifyRequest, __pyx_t_2) < 0) __PYX_ERR(4, 1, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6llfuse_33__pyx_unpickle_NotifyRequest, NULL, __pyx_n_s_llfuse); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_NotifyRequest, __pyx_t_3) < 0) __PYX_ERR(4, 1, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "llfuse.pyx":1
  * '''             # <<<<<<<<<<<<<<
  * llfuse.pxy
  * 
  */
-  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(5, 1, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(5, 1, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /*--- Wrapped vars code ---*/
 
@@ -51111,7 +51223,7 @@ done:
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
     PyObject *result;
-    ternaryfunc call = func->ob_type->tp_call;
+    ternaryfunc call = Py_TYPE(func)->tp_call;
     if (unlikely(!call))
         return PyObject_Call(func, arg, kw);
     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
@@ -51169,7 +51281,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObjec
         if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
             return __Pyx_PyObject_CallMethO(func, arg);
 #if CYTHON_FAST_PYCCALL
-        } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) {
+        } else if (__Pyx_PyFastCFunction_Check(func)) {
             return __Pyx_PyCFunction_FastCall(func, &arg, 1);
 #endif
         }
@@ -52501,7 +52613,7 @@ static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int eq
             return (equals == Py_EQ);
         } else {
             int result;
-#if CYTHON_USE_UNICODE_INTERNALS
+#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000)
             Py_hash_t hash1, hash2;
             hash1 = ((PyBytesObject*)s1)->ob_shash;
             hash2 = ((PyBytesObject*)s2)->ob_shash;
@@ -53029,7 +53141,8 @@ static PyObject *
 __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
 {
 #if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromString(m->func.m_ml->ml_name);
+    Py_INCREF(m->func_qualname);
+    return m->func_qualname;
 #else
     return PyString_FromString(m->func.m_ml->ml_name);
 #endif
@@ -53232,6 +53345,9 @@ static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, P
         self = PyTuple_GetItem(args, 0);
         if (unlikely(!self)) {
             Py_DECREF(new_args);
+            PyErr_Format(PyExc_TypeError,
+                         "unbound method %.200S() needs an argument",
+                         cyfunc->func_qualname);
             return NULL;
         }
         result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
@@ -53300,12 +53416,15 @@ static PyTypeObject __pyx_CyFunctionType_type = {
 #if PY_VERSION_HEX >= 0x030400a1
     0,
 #endif
-#if PY_VERSION_HEX >= 0x030800b1
+#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
     0,
 #endif
 #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
     0,
 #endif
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+    0,
+#endif
 };
 static int __pyx_CyFunction_init(void) {
     __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
@@ -53470,20 +53589,6 @@ done_or_error:
 }
 
 /* CIntToPyUnicode */
-#ifdef _MSC_VER
-    #ifndef _MSC_STDINT_H_
-        #if _MSC_VER < 1300
-           typedef unsigned short    uint16_t;
-        #else
-           typedef unsigned __int16  uint16_t;
-        #endif
-    #endif
-#else
-   #include <stdint.h>
-#endif
-#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
-#define GCC_DIAGNOSTIC
-#endif
 static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_long(long value, Py_ssize_t width, char padding_char, char format_char) {
     char digits[sizeof(long)*3+2];
     char *dpos, *end = digits + sizeof(long)*3+2;
@@ -53491,12 +53596,12 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_long(long value, Py_ssize_t
     Py_ssize_t length, ulength;
     int prepend_sign, last_one_off;
     long remaining;
-#ifdef GCC_DIAGNOSTIC
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wconversion"
 #endif
     const long neg_one = (long) -1, const_zero = (long) 0;
-#ifdef GCC_DIAGNOSTIC
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
 #pragma GCC diagnostic pop
 #endif
     const int is_unsigned = neg_one > const_zero;
@@ -53514,14 +53619,14 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_long(long value, Py_ssize_t
             digit_pos = abs((int)(remaining % (8*8)));
             remaining = (long) (remaining / (8*8));
             dpos -= 2;
-            *(uint16_t*)dpos = ((const uint16_t*)DIGIT_PAIRS_8)[digit_pos];
+            memcpy(dpos, DIGIT_PAIRS_8 + digit_pos * 2, 2);
             last_one_off = (digit_pos < 8);
             break;
         case 'd':
             digit_pos = abs((int)(remaining % (10*10)));
             remaining = (long) (remaining / (10*10));
             dpos -= 2;
-            *(uint16_t*)dpos = ((const uint16_t*)DIGIT_PAIRS_10)[digit_pos];
+            memcpy(dpos, DIGIT_PAIRS_10 + digit_pos * 2, 2);
             last_one_off = (digit_pos < 10);
             break;
         case 'x':
@@ -53779,17 +53884,35 @@ static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
 static int __Pyx_setup_reduce(PyObject* type_obj) {
     int ret = 0;
     PyObject *object_reduce = NULL;
+    PyObject *object_getstate = NULL;
     PyObject *object_reduce_ex = NULL;
     PyObject *reduce = NULL;
     PyObject *reduce_ex = NULL;
     PyObject *reduce_cython = NULL;
     PyObject *setstate = NULL;
     PyObject *setstate_cython = NULL;
+    PyObject *getstate = NULL;
 #if CYTHON_USE_PYTYPE_LOOKUP
-    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
+    getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate);
 #else
-    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
+    getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate);
+    if (!getstate && PyErr_Occurred()) {
+        goto __PYX_BAD;
+    }
 #endif
+    if (getstate) {
+#if CYTHON_USE_PYTYPE_LOOKUP
+        object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_getstate);
+#else
+        object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_n_s_getstate);
+        if (!object_getstate && PyErr_Occurred()) {
+            goto __PYX_BAD;
+        }
+#endif
+        if (object_getstate != getstate) {
+            goto __PYX_GOOD;
+        }
+    }
 #if CYTHON_USE_PYTYPE_LOOKUP
     object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
 #else
@@ -53834,6 +53957,8 @@ __PYX_GOOD:
 #if !CYTHON_USE_PYTYPE_LOOKUP
     Py_XDECREF(object_reduce);
     Py_XDECREF(object_reduce_ex);
+    Py_XDECREF(object_getstate);
+    Py_XDECREF(getstate);
 #endif
     Py_XDECREF(reduce);
     Py_XDECREF(reduce_ex);
@@ -54108,7 +54233,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it) {
         result = PyFrozenSet_New(it);
         if (unlikely(!result))
             return NULL;
-        if (likely(PySet_GET_SIZE(result)))
+        if ((PY_VERSION_HEX >= 0x031000A1) || likely(PySet_GET_SIZE(result)))
             return result;
         Py_DECREF(result);
 #endif
@@ -54152,7 +54277,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int
     }
     if (!use_cline) {
         c_line = 0;
-        PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+        (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
     }
     else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
         c_line = 0;
@@ -54246,33 +54371,40 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
 #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
+#if PY_VERSION_HEX >= 0x030b00a6
+  #ifndef Py_BUILD_CORE
+    #define Py_BUILD_CORE 1
+  #endif
+  #include "internal/pycore_frame.h"
+#endif
 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
             const char *funcname, int c_line,
             int py_line, const char *filename) {
-    PyCodeObject *py_code = 0;
-    PyObject *py_srcfile = 0;
-    PyObject *py_funcname = 0;
+    PyCodeObject *py_code = NULL;
+    PyObject *py_funcname = NULL;
     #if PY_MAJOR_VERSION < 3
+    PyObject *py_srcfile = NULL;
     py_srcfile = PyString_FromString(filename);
-    #else
-    py_srcfile = PyUnicode_FromString(filename);
-    #endif
     if (!py_srcfile) goto bad;
+    #endif
     if (c_line) {
         #if PY_MAJOR_VERSION < 3
         py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        if (!py_funcname) goto bad;
         #else
         py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+        if (!py_funcname) goto bad;
+        funcname = PyUnicode_AsUTF8(py_funcname);
+        if (!funcname) goto bad;
         #endif
     }
     else {
         #if PY_MAJOR_VERSION < 3
         py_funcname = PyString_FromString(funcname);
-        #else
-        py_funcname = PyUnicode_FromString(funcname);
+        if (!py_funcname) goto bad;
         #endif
     }
-    if (!py_funcname) goto bad;
+    #if PY_MAJOR_VERSION < 3
     py_code = __Pyx_PyCode_New(
         0,
         0,
@@ -54291,11 +54423,16 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
         __pyx_empty_bytes  /*PyObject *lnotab*/
     );
     Py_DECREF(py_srcfile);
-    Py_DECREF(py_funcname);
+    #else
+    py_code = PyCode_NewEmpty(filename, funcname, py_line);
+    #endif
+    Py_XDECREF(py_funcname);  // XDECREF since it's only set on Py3 if cline
     return py_code;
 bad:
-    Py_XDECREF(py_srcfile);
     Py_XDECREF(py_funcname);
+    #if PY_MAJOR_VERSION < 3
+    Py_XDECREF(py_srcfile);
+    #endif
     return NULL;
 }
 static void __Pyx_AddTraceback(const char *funcname, int c_line,
@@ -54303,14 +54440,24 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line,
     PyCodeObject *py_code = 0;
     PyFrameObject *py_frame = 0;
     PyThreadState *tstate = __Pyx_PyThreadState_Current;
+    PyObject *ptype, *pvalue, *ptraceback;
     if (c_line) {
         c_line = __Pyx_CLineForTraceback(tstate, c_line);
     }
     py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
     if (!py_code) {
+        __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
         py_code = __Pyx_CreateCodeObjectForTraceback(
             funcname, c_line, py_line, filename);
-        if (!py_code) goto bad;
+        if (!py_code) {
+            /* If the code object creation fails, then we should clear the
+               fetched exception references and propagate the new exception */
+            Py_XDECREF(ptype);
+            Py_XDECREF(pvalue);
+            Py_XDECREF(ptraceback);
+            goto bad;
+        }
+        __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
         __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
     }
     py_frame = PyFrame_New(
@@ -54327,9 +54474,38 @@ bad:
     Py_XDECREF(py_frame);
 }
 
+/* CIntFromPyVerify */
+#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
+    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
+#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
+    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
+#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
+    {\
+        func_type value = func_value;\
+        if (sizeof(target_type) < sizeof(func_type)) {\
+            if (unlikely(value != (func_type) (target_type) value)) {\
+                func_type zero = 0;\
+                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
+                    return (target_type) -1;\
+                if (is_unsigned && unlikely(value < zero))\
+                    goto raise_neg_overflow;\
+                else\
+                    goto raise_overflow;\
+            }\
+        }\
+        return (target_type) value;\
+    }
+
 /* CIntToPy */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_gid_t(gid_t value) {
-    const gid_t neg_one = (gid_t) ((gid_t) 0 - (gid_t) 1), const_zero = (gid_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const gid_t neg_one = (gid_t) -1, const_zero = (gid_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
         if (sizeof(gid_t) < sizeof(long)) {
@@ -54358,31 +54534,212 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_gid_t(gid_t value) {
     }
 }
 
-/* CIntFromPyVerify */
-#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
-    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
-#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
-    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
-#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
-    {\
-        func_type value = func_value;\
-        if (sizeof(target_type) < sizeof(func_type)) {\
-            if (unlikely(value != (func_type) (target_type) value)) {\
-                func_type zero = 0;\
-                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
-                    return (target_type) -1;\
-                if (is_unsigned && unlikely(value < zero))\
-                    goto raise_neg_overflow;\
-                else\
-                    goto raise_overflow;\
-            }\
-        }\
-        return (target_type) value;\
+/* CIntFromPy */
+static CYTHON_INLINE gid_t __Pyx_PyInt_As_gid_t(PyObject *x) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const gid_t neg_one = (gid_t) -1, const_zero = (gid_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(gid_t) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(gid_t, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (gid_t) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (gid_t) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(gid_t, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(gid_t) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(gid_t) >= 2 * PyLong_SHIFT) {
+                            return (gid_t) (((((gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(gid_t) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(gid_t) >= 3 * PyLong_SHIFT) {
+                            return (gid_t) (((((((gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(gid_t) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(gid_t) >= 4 * PyLong_SHIFT) {
+                            return (gid_t) (((((((((gid_t)digits[3]) << PyLong_SHIFT) | (gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (gid_t) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(gid_t) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(gid_t, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(gid_t) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(gid_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (gid_t) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(gid_t, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(gid_t,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(gid_t) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(gid_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(gid_t) - 1 > 2 * PyLong_SHIFT) {
+                            return (gid_t) (((gid_t)-1)*(((((gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(gid_t) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(gid_t) - 1 > 2 * PyLong_SHIFT) {
+                            return (gid_t) ((((((gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(gid_t) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(gid_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(gid_t) - 1 > 3 * PyLong_SHIFT) {
+                            return (gid_t) (((gid_t)-1)*(((((((gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(gid_t) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(gid_t) - 1 > 3 * PyLong_SHIFT) {
+                            return (gid_t) ((((((((gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(gid_t) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(gid_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(gid_t) - 1 > 4 * PyLong_SHIFT) {
+                            return (gid_t) (((gid_t)-1)*(((((((((gid_t)digits[3]) << PyLong_SHIFT) | (gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(gid_t) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(gid_t) - 1 > 4 * PyLong_SHIFT) {
+                            return (gid_t) ((((((((((gid_t)digits[3]) << PyLong_SHIFT) | (gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(gid_t) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(gid_t, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(gid_t) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(gid_t, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            gid_t val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (gid_t) -1;
+        }
+    } else {
+        gid_t val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (gid_t) -1;
+        val = __Pyx_PyInt_As_gid_t(tmp);
+        Py_DECREF(tmp);
+        return val;
     }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to gid_t");
+    return (gid_t) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to gid_t");
+    return (gid_t) -1;
+}
 
 /* CIntToPy */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_pid_t(pid_t value) {
-    const pid_t neg_one = (pid_t) ((pid_t) 0 - (pid_t) 1), const_zero = (pid_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const pid_t neg_one = (pid_t) -1, const_zero = (pid_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
         if (sizeof(pid_t) < sizeof(long)) {
@@ -54411,725 +54768,16 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_pid_t(pid_t value) {
     }
 }
 
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uid_t(uid_t value) {
-    const uid_t neg_one = (uid_t) ((uid_t) 0 - (uid_t) 1), const_zero = (uid_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(uid_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(uid_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(uid_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(uid_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(uid_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(uid_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_mode_t(mode_t value) {
-    const mode_t neg_one = (mode_t) ((mode_t) 0 - (mode_t) 1), const_zero = (mode_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(mode_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(mode_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(mode_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(mode_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(mode_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(mode_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value) {
-    const char neg_one = (char) ((char) 0 - (char) 1), const_zero = (char) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(char) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(char) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(char) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(char),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fuse_ino_t(fuse_ino_t value) {
-    const fuse_ino_t neg_one = (fuse_ino_t) ((fuse_ino_t) 0 - (fuse_ino_t) 1), const_zero = (fuse_ino_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(fuse_ino_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(fuse_ino_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(fuse_ino_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(fuse_ino_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(fuse_ino_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(fuse_ino_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
-    const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(int) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(int) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(int) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(int),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
-    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(long) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(long) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(long) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(long),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) {
-    const unsigned long neg_one = (unsigned long) ((unsigned long) 0 - (unsigned long) 1), const_zero = (unsigned long) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(unsigned long) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(unsigned long) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(unsigned long) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(unsigned long),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value) {
-    const uint64_t neg_one = (uint64_t) ((uint64_t) 0 - (uint64_t) 1), const_zero = (uint64_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(uint64_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(uint64_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(uint64_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(uint64_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(uint64_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(uint64_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_dev_t(dev_t value) {
-    const dev_t neg_one = (dev_t) ((dev_t) 0 - (dev_t) 1), const_zero = (dev_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(dev_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(dev_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(dev_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(dev_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(dev_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(dev_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_off_t(off_t value) {
-    const off_t neg_one = (off_t) ((off_t) 0 - (off_t) 1), const_zero = (off_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(off_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(off_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(off_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(off_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(off_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(off_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value) {
-    const uint32_t neg_one = (uint32_t) ((uint32_t) 0 - (uint32_t) 1), const_zero = (uint32_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(uint32_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(uint32_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(uint32_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(uint32_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(uint32_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(uint32_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_nlink_t(nlink_t value) {
-    const nlink_t neg_one = (nlink_t) ((nlink_t) 0 - (nlink_t) 1), const_zero = (nlink_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(nlink_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(nlink_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(nlink_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(nlink_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(nlink_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(nlink_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_blkcnt_t(blkcnt_t value) {
-    const blkcnt_t neg_one = (blkcnt_t) ((blkcnt_t) 0 - (blkcnt_t) 1), const_zero = (blkcnt_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(blkcnt_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(blkcnt_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(blkcnt_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(blkcnt_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(blkcnt_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(blkcnt_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_blksize_t(blksize_t value) {
-    const blksize_t neg_one = (blksize_t) ((blksize_t) 0 - (blksize_t) 1), const_zero = (blksize_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(blksize_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(blksize_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(blksize_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(blksize_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(blksize_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(blksize_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_time_t(time_t value) {
-    const time_t neg_one = (time_t) ((time_t) 0 - (time_t) 1), const_zero = (time_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(time_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(time_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(time_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(time_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(time_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(time_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fsblkcnt_t(fsblkcnt_t value) {
-    const fsblkcnt_t neg_one = (fsblkcnt_t) ((fsblkcnt_t) 0 - (fsblkcnt_t) 1), const_zero = (fsblkcnt_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(fsblkcnt_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(fsblkcnt_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(fsblkcnt_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(fsblkcnt_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(fsblkcnt_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(fsblkcnt_t),
-                                     little, !is_unsigned);
-    }
-}
-
-/* CIntToPy */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fsfilcnt_t(fsfilcnt_t value) {
-    const fsfilcnt_t neg_one = (fsfilcnt_t) ((fsfilcnt_t) 0 - (fsfilcnt_t) 1), const_zero = (fsfilcnt_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(fsfilcnt_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(fsfilcnt_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(fsfilcnt_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-#endif
-        }
-    } else {
-        if (sizeof(fsfilcnt_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-#ifdef HAVE_LONG_LONG
-        } else if (sizeof(fsfilcnt_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-#endif
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(fsfilcnt_t),
-                                     little, !is_unsigned);
-    }
-}
-
 /* CIntFromPy */
-static CYTHON_INLINE gid_t __Pyx_PyInt_As_gid_t(PyObject *x) {
-    const gid_t neg_one = (gid_t) ((gid_t) 0 - (gid_t) 1), const_zero = (gid_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-#if PY_MAJOR_VERSION < 3
-    if (likely(PyInt_Check(x))) {
-        if (sizeof(gid_t) < sizeof(long)) {
-            __PYX_VERIFY_RETURN_INT(gid_t, long, PyInt_AS_LONG(x))
-        } else {
-            long val = PyInt_AS_LONG(x);
-            if (is_unsigned && unlikely(val < 0)) {
-                goto raise_neg_overflow;
-            }
-            return (gid_t) val;
-        }
-    } else
-#endif
-    if (likely(PyLong_Check(x))) {
-        if (is_unsigned) {
-#if CYTHON_USE_PYLONG_INTERNALS
-            const digit* digits = ((PyLongObject*)x)->ob_digit;
-            switch (Py_SIZE(x)) {
-                case  0: return (gid_t) 0;
-                case  1: __PYX_VERIFY_RETURN_INT(gid_t, digit, digits[0])
-                case 2:
-                    if (8 * sizeof(gid_t) > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(gid_t) >= 2 * PyLong_SHIFT) {
-                            return (gid_t) (((((gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0]));
-                        }
-                    }
-                    break;
-                case 3:
-                    if (8 * sizeof(gid_t) > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(gid_t) >= 3 * PyLong_SHIFT) {
-                            return (gid_t) (((((((gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0]));
-                        }
-                    }
-                    break;
-                case 4:
-                    if (8 * sizeof(gid_t) > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(gid_t) >= 4 * PyLong_SHIFT) {
-                            return (gid_t) (((((((((gid_t)digits[3]) << PyLong_SHIFT) | (gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0]));
-                        }
-                    }
-                    break;
-            }
-#endif
-#if CYTHON_COMPILING_IN_CPYTHON
-            if (unlikely(Py_SIZE(x) < 0)) {
-                goto raise_neg_overflow;
-            }
-#else
-            {
-                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
-                if (unlikely(result < 0))
-                    return (gid_t) -1;
-                if (unlikely(result == 1))
-                    goto raise_neg_overflow;
-            }
-#endif
-            if (sizeof(gid_t) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT_EXC(gid_t, unsigned long, PyLong_AsUnsignedLong(x))
-#ifdef HAVE_LONG_LONG
-            } else if (sizeof(gid_t) <= sizeof(unsigned PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT_EXC(gid_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
-#endif
-            }
-        } else {
-#if CYTHON_USE_PYLONG_INTERNALS
-            const digit* digits = ((PyLongObject*)x)->ob_digit;
-            switch (Py_SIZE(x)) {
-                case  0: return (gid_t) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(gid_t, sdigit, (sdigit) (-(sdigit)digits[0]))
-                case  1: __PYX_VERIFY_RETURN_INT(gid_t,  digit, +digits[0])
-                case -2:
-                    if (8 * sizeof(gid_t) - 1 > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(gid_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(gid_t) - 1 > 2 * PyLong_SHIFT) {
-                            return (gid_t) (((gid_t)-1)*(((((gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
-                        }
-                    }
-                    break;
-                case 2:
-                    if (8 * sizeof(gid_t) > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(gid_t) - 1 > 2 * PyLong_SHIFT) {
-                            return (gid_t) ((((((gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
-                        }
-                    }
-                    break;
-                case -3:
-                    if (8 * sizeof(gid_t) - 1 > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(gid_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(gid_t) - 1 > 3 * PyLong_SHIFT) {
-                            return (gid_t) (((gid_t)-1)*(((((((gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
-                        }
-                    }
-                    break;
-                case 3:
-                    if (8 * sizeof(gid_t) > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(gid_t) - 1 > 3 * PyLong_SHIFT) {
-                            return (gid_t) ((((((((gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
-                        }
-                    }
-                    break;
-                case -4:
-                    if (8 * sizeof(gid_t) - 1 > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(gid_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(gid_t) - 1 > 4 * PyLong_SHIFT) {
-                            return (gid_t) (((gid_t)-1)*(((((((((gid_t)digits[3]) << PyLong_SHIFT) | (gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
-                        }
-                    }
-                    break;
-                case 4:
-                    if (8 * sizeof(gid_t) > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(gid_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(gid_t) - 1 > 4 * PyLong_SHIFT) {
-                            return (gid_t) ((((((((((gid_t)digits[3]) << PyLong_SHIFT) | (gid_t)digits[2]) << PyLong_SHIFT) | (gid_t)digits[1]) << PyLong_SHIFT) | (gid_t)digits[0])));
-                        }
-                    }
-                    break;
-            }
-#endif
-            if (sizeof(gid_t) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT_EXC(gid_t, long, PyLong_AsLong(x))
-#ifdef HAVE_LONG_LONG
-            } else if (sizeof(gid_t) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT_EXC(gid_t, PY_LONG_LONG, PyLong_AsLongLong(x))
+static CYTHON_INLINE pid_t __Pyx_PyInt_As_pid_t(PyObject *x) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
 #endif
-            }
-        }
-        {
-#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
-            PyErr_SetString(PyExc_RuntimeError,
-                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
-#else
-            gid_t val;
-            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
- #if PY_MAJOR_VERSION < 3
-            if (likely(v) && !PyLong_Check(v)) {
-                PyObject *tmp = v;
-                v = PyNumber_Long(tmp);
-                Py_DECREF(tmp);
-            }
- #endif
-            if (likely(v)) {
-                int one = 1; int is_little = (int)*(unsigned char *)&one;
-                unsigned char *bytes = (unsigned char *)&val;
-                int ret = _PyLong_AsByteArray((PyLongObject *)v,
-                                              bytes, sizeof(val),
-                                              is_little, !is_unsigned);
-                Py_DECREF(v);
-                if (likely(!ret))
-                    return val;
-            }
+    const pid_t neg_one = (pid_t) -1, const_zero = (pid_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
 #endif
-            return (gid_t) -1;
-        }
-    } else {
-        gid_t val;
-        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
-        if (!tmp) return (gid_t) -1;
-        val = __Pyx_PyInt_As_gid_t(tmp);
-        Py_DECREF(tmp);
-        return val;
-    }
-raise_overflow:
-    PyErr_SetString(PyExc_OverflowError,
-        "value too large to convert to gid_t");
-    return (gid_t) -1;
-raise_neg_overflow:
-    PyErr_SetString(PyExc_OverflowError,
-        "can't convert negative value to gid_t");
-    return (gid_t) -1;
-}
-
-/* CIntFromPy */
-static CYTHON_INLINE pid_t __Pyx_PyInt_As_pid_t(PyObject *x) {
-    const pid_t neg_one = (pid_t) ((pid_t) 0 - (pid_t) 1), const_zero = (pid_t) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -55316,9 +54964,54 @@ raise_neg_overflow:
     return (pid_t) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uid_t(uid_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const uid_t neg_one = (uid_t) -1, const_zero = (uid_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(uid_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(uid_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(uid_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(uid_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(uid_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(uid_t),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE uid_t __Pyx_PyInt_As_uid_t(PyObject *x) {
-    const uid_t neg_one = (uid_t) ((uid_t) 0 - (uid_t) 1), const_zero = (uid_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const uid_t neg_one = (uid_t) -1, const_zero = (uid_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -55505,9 +55198,54 @@ raise_neg_overflow:
     return (uid_t) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_mode_t(mode_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const mode_t neg_one = (mode_t) -1, const_zero = (mode_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(mode_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(mode_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(mode_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(mode_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(mode_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(mode_t),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE mode_t __Pyx_PyInt_As_mode_t(PyObject *x) {
-    const mode_t neg_one = (mode_t) ((mode_t) 0 - (mode_t) 1), const_zero = (mode_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const mode_t neg_one = (mode_t) -1, const_zero = (mode_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -55694,9 +55432,54 @@ raise_neg_overflow:
     return (mode_t) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const char neg_one = (char) -1, const_zero = (char) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(char) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(char) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(char) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(char),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) {
-    const char neg_one = (char) ((char) 0 - (char) 1), const_zero = (char) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const char neg_one = (char) -1, const_zero = (char) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -55883,9 +55666,54 @@ raise_neg_overflow:
     return (char) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fuse_ino_t(fuse_ino_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const fuse_ino_t neg_one = (fuse_ino_t) -1, const_zero = (fuse_ino_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(fuse_ino_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(fuse_ino_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(fuse_ino_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(fuse_ino_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(fuse_ino_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(fuse_ino_t),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE fuse_ino_t __Pyx_PyInt_As_fuse_ino_t(PyObject *x) {
-    const fuse_ino_t neg_one = (fuse_ino_t) ((fuse_ino_t) 0 - (fuse_ino_t) 1), const_zero = (fuse_ino_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const fuse_ino_t neg_one = (fuse_ino_t) -1, const_zero = (fuse_ino_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -56072,9 +55900,54 @@ raise_neg_overflow:
     return (fuse_ino_t) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const int neg_one = (int) -1, const_zero = (int) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(int) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(int) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(int),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
-    const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const int neg_one = (int) -1, const_zero = (int) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -56263,7 +56136,14 @@ raise_neg_overflow:
 
 /* CIntFromPy */
 static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
-    const size_t neg_one = (size_t) ((size_t) 0 - (size_t) 1), const_zero = (size_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const size_t neg_one = (size_t) -1, const_zero = (size_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -56452,7 +56332,14 @@ raise_neg_overflow:
 
 /* CIntFromPy */
 static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
-    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const long neg_one = (long) -1, const_zero = (long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -56639,9 +56526,130 @@ raise_neg_overflow:
     return (long) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(unsigned long) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(unsigned long) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(unsigned long) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(unsigned long),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const uint64_t neg_one = (uint64_t) -1, const_zero = (uint64_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(uint64_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(uint64_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(uint64_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(uint64_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(uint64_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(uint64_t),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_dev_t(dev_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const dev_t neg_one = (dev_t) -1, const_zero = (dev_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(dev_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(dev_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(dev_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(dev_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(dev_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(dev_t),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) {
-    const uint64_t neg_one = (uint64_t) ((uint64_t) 0 - (uint64_t) 1), const_zero = (uint64_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const uint64_t neg_one = (uint64_t) -1, const_zero = (uint64_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -56828,9 +56836,54 @@ raise_neg_overflow:
     return (uint64_t) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_off_t(off_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const off_t neg_one = (off_t) -1, const_zero = (off_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(off_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(off_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(off_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(off_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(off_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(off_t),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE off_t __Pyx_PyInt_As_off_t(PyObject *x) {
-    const off_t neg_one = (off_t) ((off_t) 0 - (off_t) 1), const_zero = (off_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const off_t neg_one = (off_t) -1, const_zero = (off_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -57017,9 +57070,92 @@ raise_neg_overflow:
     return (off_t) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const uint32_t neg_one = (uint32_t) -1, const_zero = (uint32_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(uint32_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(uint32_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(uint32_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(uint32_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(uint32_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(uint32_t),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const long neg_one = (long) -1, const_zero = (long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(long) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(long) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(long) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(long),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE ino_t __Pyx_PyInt_As_ino_t(PyObject *x) {
-    const ino_t neg_one = (ino_t) ((ino_t) 0 - (ino_t) 1), const_zero = (ino_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const ino_t neg_one = (ino_t) -1, const_zero = (ino_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -57208,7 +57344,14 @@ raise_neg_overflow:
 
 /* CIntFromPy */
 static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) {
-    const unsigned long neg_one = (unsigned long) ((unsigned long) 0 - (unsigned long) 1), const_zero = (unsigned long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -57395,9 +57538,54 @@ raise_neg_overflow:
     return (unsigned long) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_nlink_t(nlink_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const nlink_t neg_one = (nlink_t) -1, const_zero = (nlink_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(nlink_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(nlink_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(nlink_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(nlink_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(nlink_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(nlink_t),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE nlink_t __Pyx_PyInt_As_nlink_t(PyObject *x) {
-    const nlink_t neg_one = (nlink_t) ((nlink_t) 0 - (nlink_t) 1), const_zero = (nlink_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const nlink_t neg_one = (nlink_t) -1, const_zero = (nlink_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -57586,7 +57774,14 @@ raise_neg_overflow:
 
 /* CIntFromPy */
 static CYTHON_INLINE dev_t __Pyx_PyInt_As_dev_t(PyObject *x) {
-    const dev_t neg_one = (dev_t) ((dev_t) 0 - (dev_t) 1), const_zero = (dev_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const dev_t neg_one = (dev_t) -1, const_zero = (dev_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -57773,9 +57968,54 @@ raise_neg_overflow:
     return (dev_t) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_blkcnt_t(blkcnt_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const blkcnt_t neg_one = (blkcnt_t) -1, const_zero = (blkcnt_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(blkcnt_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(blkcnt_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(blkcnt_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(blkcnt_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(blkcnt_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(blkcnt_t),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE blkcnt_t __Pyx_PyInt_As_blkcnt_t(PyObject *x) {
-    const blkcnt_t neg_one = (blkcnt_t) ((blkcnt_t) 0 - (blkcnt_t) 1), const_zero = (blkcnt_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const blkcnt_t neg_one = (blkcnt_t) -1, const_zero = (blkcnt_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -57962,9 +58202,54 @@ raise_neg_overflow:
     return (blkcnt_t) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_blksize_t(blksize_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const blksize_t neg_one = (blksize_t) -1, const_zero = (blksize_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(blksize_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(blksize_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(blksize_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(blksize_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(blksize_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(blksize_t),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE blksize_t __Pyx_PyInt_As_blksize_t(PyObject *x) {
-    const blksize_t neg_one = (blksize_t) ((blksize_t) 0 - (blksize_t) 1), const_zero = (blksize_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const blksize_t neg_one = (blksize_t) -1, const_zero = (blksize_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -58151,9 +58436,54 @@ raise_neg_overflow:
     return (blksize_t) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_time_t(time_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const time_t neg_one = (time_t) -1, const_zero = (time_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(time_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(time_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(time_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(time_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(time_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(time_t),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE time_t __Pyx_PyInt_As_time_t(PyObject *x) {
-    const time_t neg_one = (time_t) ((time_t) 0 - (time_t) 1), const_zero = (time_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const time_t neg_one = (time_t) -1, const_zero = (time_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -58340,9 +58670,54 @@ raise_neg_overflow:
     return (time_t) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fsblkcnt_t(fsblkcnt_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const fsblkcnt_t neg_one = (fsblkcnt_t) -1, const_zero = (fsblkcnt_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(fsblkcnt_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(fsblkcnt_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(fsblkcnt_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(fsblkcnt_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(fsblkcnt_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(fsblkcnt_t),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE fsblkcnt_t __Pyx_PyInt_As_fsblkcnt_t(PyObject *x) {
-    const fsblkcnt_t neg_one = (fsblkcnt_t) ((fsblkcnt_t) 0 - (fsblkcnt_t) 1), const_zero = (fsblkcnt_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const fsblkcnt_t neg_one = (fsblkcnt_t) -1, const_zero = (fsblkcnt_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -58529,9 +58904,54 @@ raise_neg_overflow:
     return (fsblkcnt_t) -1;
 }
 
+/* CIntToPy */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_fsfilcnt_t(fsfilcnt_t value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const fsfilcnt_t neg_one = (fsfilcnt_t) -1, const_zero = (fsfilcnt_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(fsfilcnt_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(fsfilcnt_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(fsfilcnt_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(fsfilcnt_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(fsfilcnt_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(fsfilcnt_t),
+                                     little, !is_unsigned);
+    }
+}
+
 /* CIntFromPy */
 static CYTHON_INLINE fsfilcnt_t __Pyx_PyInt_As_fsfilcnt_t(PyObject *x) {
-    const fsfilcnt_t neg_one = (fsfilcnt_t) ((fsfilcnt_t) 0 - (fsfilcnt_t) 1), const_zero = (fsfilcnt_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const fsfilcnt_t neg_one = (fsfilcnt_t) -1, const_zero = (fsfilcnt_t) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -58820,11 +59240,33 @@ static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObj
 
 /* CheckBinaryVersion */
 static int __Pyx_check_binary_version(void) {
-    char ctversion[4], rtversion[4];
-    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
-    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
-    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
+    char ctversion[5];
+    int same=1, i, found_dot;
+    const char* rt_from_call = Py_GetVersion();
+    PyOS_snprintf(ctversion, 5, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
+    found_dot = 0;
+    for (i = 0; i < 4; i++) {
+        if (!ctversion[i]) {
+            same = (rt_from_call[i] < '0' || rt_from_call[i] > '9');
+            break;
+        }
+        if (rt_from_call[i] != ctversion[i]) {
+            same = 0;
+            break;
+        }
+    }
+    if (!same) {
+        char rtversion[5] = {'\0'};
         char message[200];
+        for (i=0; i<4; ++i) {
+            if (rt_from_call[i] == '.') {
+                if (found_dot) break;
+                found_dot = 1;
+            } else if (rt_from_call[i] < '0' || rt_from_call[i] > '9') {
+                break;
+            }
+            rtversion[i] = rt_from_call[i];
+        }
         PyOS_snprintf(message, sizeof(message),
                       "compiletime version %s of module '%.100s' "
                       "does not match runtime version %s",
@@ -59082,6 +59524,23 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
   Py_DECREF(x);
   return ival;
 }
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
+  if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
+    return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
+#if PY_MAJOR_VERSION < 3
+  } else if (likely(PyInt_CheckExact(o))) {
+    return PyInt_AS_LONG(o);
+#endif
+  } else {
+    Py_ssize_t ival;
+    PyObject *x;
+    x = PyNumber_Index(o);
+    if (!x) return -1;
+    ival = PyInt_AsLong(x);
+    Py_DECREF(x);
+    return ival;
+  }
+}
 static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
   return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
 }
diff --git a/src/llfuse.egg-info/PKG-INFO b/src/llfuse.egg-info/PKG-INFO
index 6824097..7d12239 100644
--- a/src/llfuse.egg-info/PKG-INFO
+++ b/src/llfuse.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: llfuse
-Version: 1.4.1
+Version: 1.4.2
 Summary: Python bindings for the low-level FUSE API
 Home-page: https://github.com/python-llfuse/python-llfuse/
 Author: Nikolaus Rath
@@ -21,9 +21,6 @@ Description: ..
         
         Python-LLFUSE is no longer actively developed and just receiving
         community-contributed maintenance to keep it alive for some time.
-        Unless you are stuck with Python 2.x or libfuse 2.x, we recommend
-        to use the pyfuse3_ module instead - see pyfuse3_porting_ for some
-        hints. If you are stuck on Python 2.x, use llfuse<1.4.0.
         
         Python-LLFUSE is a set of Python bindings for the low level FUSE_
         API. It requires at least FUSE 2.8.0 and supports both Python 2.x and
@@ -35,9 +32,6 @@ Description: ..
         directory of the Python-LLFUSE tarball.
         
         
-        .. _pyfuse3: https://github.com/libfuse/pyfuse3
-        .. _pyfuse3_porting: https://github.com/python-llfuse/python-llfuse/issues/33
-        
         Getting Help
         ------------
         
@@ -74,6 +68,8 @@ Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Classifier: Topic :: System :: Filesystems
 Classifier: License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)
diff --git a/src/llfuse.egg-info/SOURCES.txt b/src/llfuse.egg-info/SOURCES.txt
index 964c148..5e54805 100644
--- a/src/llfuse.egg-info/SOURCES.txt
+++ b/src/llfuse.egg-info/SOURCES.txt
@@ -117,6 +117,11 @@ test/test_examples.py
 test/test_fs.py
 test/test_rounding.py
 test/util.py
+test/.pytest_cache/.gitignore
+test/.pytest_cache/CACHEDIR.TAG
+test/.pytest_cache/README.md
+test/.pytest_cache/v/cache/nodeids
+test/.pytest_cache/v/cache/stepwise
 util/sdist-sign
 util/sphinx_cython.py
 util/upload-pypi
\ No newline at end of file
diff --git a/test/.pytest_cache/.gitignore b/test/.pytest_cache/.gitignore
new file mode 100644
index 0000000..bc1a1f6
--- /dev/null
+++ b/test/.pytest_cache/.gitignore
@@ -0,0 +1,2 @@
+# Created by pytest automatically.
+*
diff --git a/test/.pytest_cache/CACHEDIR.TAG b/test/.pytest_cache/CACHEDIR.TAG
new file mode 100644
index 0000000..381f03a
--- /dev/null
+++ b/test/.pytest_cache/CACHEDIR.TAG
@@ -0,0 +1,4 @@
+Signature: 8a477f597d28d172789f06886806bc55
+# This file is a cache directory tag created by pytest.
+# For information about cache directory tags, see:
+#	http://www.bford.info/cachedir/spec.html
diff --git a/test/.pytest_cache/README.md b/test/.pytest_cache/README.md
new file mode 100644
index 0000000..1863c83
--- /dev/null
+++ b/test/.pytest_cache/README.md
@@ -0,0 +1,8 @@
+# pytest cache directory #
+
+This directory contains data from the pytest's cache plugin,
+which provides the `--lf` and `--ff` options, as well as the `cache` fixture.
+
+**Do not** commit this to version control.
+
+See [the docs](https://docs.pytest.org/en/stable/cache.html) for more information.
diff --git a/test/.pytest_cache/v/cache/nodeids b/test/.pytest_cache/v/cache/nodeids
new file mode 100644
index 0000000..bfa999b
--- /dev/null
+++ b/test/.pytest_cache/v/cache/nodeids
@@ -0,0 +1,17 @@
+[
+  "test_api.py::test_copy",
+  "test_api.py::test_entry_res",
+  "test_api.py::test_inquire_bits",
+  "test_api.py::test_listdir",
+  "test_api.py::test_sup_groups",
+  "test_api.py::test_xattr",
+  "test_examples.py::test_lltest",
+  "test_examples.py::test_passthroughfs",
+  "test_examples.py::test_tmpfs",
+  "test_fs.py::test_attr_timeout",
+  "test_fs.py::test_entry_timeout",
+  "test_fs.py::test_invalidate_entry",
+  "test_fs.py::test_invalidate_inode",
+  "test_fs.py::test_notify_store",
+  "test_rounding.py::test_rounding"
+]
\ No newline at end of file
diff --git a/test/.pytest_cache/v/cache/stepwise b/test/.pytest_cache/v/cache/stepwise
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/.pytest_cache/v/cache/stepwise
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/test/ci-install.sh b/test/ci-install.sh
index fc11e2c..32c6fec 100755
--- a/test/ci-install.sh
+++ b/test/ci-install.sh
@@ -2,5 +2,5 @@
 
 set -e
 
-pip install pytest pytest-catchlog cython sphinx
+pip install pytest cython sphinx
 cython --version

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/debug/.build-id/98/e0ed80df35bc1313158b080832f336796030d6.debug
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/llfuse-1.4.2.egg-info/PKG-INFO
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/llfuse-1.4.2.egg-info/dependency_links.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/llfuse-1.4.2.egg-info/top_level.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/llfuse-1.4.2.egg-info/zip-safe
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/llfuse.cpython-310-x86_64-linux-gnu.so

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/debug/.build-id/a7/564def6231cb3a2d03b8fcda1f89cd9b7406ee.debug
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/llfuse-1.4.1.egg-info/PKG-INFO
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/llfuse-1.4.1.egg-info/dependency_links.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/llfuse-1.4.1.egg-info/top_level.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/llfuse-1.4.1.egg-info/zip-safe
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/llfuse.cpython-311-x86_64-linux-gnu.so

No differences were encountered between the control files of package python-llfuse-doc

Control files of package python3-llfuse: lines which differ (wdiff format)

  • Depends: python3 (<< 3.12), 3.11), python3 (>= 3.11~), 3.10~), libc6 (>= 2.34), libfuse2 (>= 2.9)

Control files of package python3-llfuse-dbgsym: lines which differ (wdiff format)

  • Build-Ids: a7564def6231cb3a2d03b8fcda1f89cd9b7406ee 98e0ed80df35bc1313158b080832f336796030d6

More details

Full run details