When trying to flush cached inode contents, invalidating dentries
which are still referenced can race with lookups, causing the kernel to return
spurious "not found" errors.
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>
if obj.in_use():
_logger.debug("InodeCache cannot clear inode %i, in use", obj.inode)
return
- obj.kernel_invalidate()
if obj.has_ref(True):
- _logger.debug("InodeCache sent kernel invalidate inode %i", obj.inode)
+ _logger.debug("InodeCache cannot clear inode %i, still referenced", obj.inode)
return
+ obj.kernel_invalidate()
+ _logger.debug("InodeCache sent kernel invalidate inode %i", obj.inode)
obj.clear()
# The llfuse lock is released in del_entry(), which is called by