Index: sys/compat/linuxkpi/common/include/linux/fs.h =================================================================== --- sys/compat/linuxkpi/common/include/linux/fs.h +++ sys/compat/linuxkpi/common/include/linux/fs.h @@ -254,6 +254,13 @@ return (f); } +static inline bool +get_file_rcu(struct linux_file *f) +{ + return (refcount_acquire_if_not_zero( + f->_file == NULL ? &f->f_count : &f->_file->f_count)); +} + static inline struct inode * igrab(struct inode *inode) { Index: sys/compat/linuxkpi/common/src/linux_compat.c =================================================================== --- sys/compat/linuxkpi/common/src/linux_compat.c +++ sys/compat/linuxkpi/common/src/linux_compat.c @@ -90,6 +90,7 @@ #include #include #include +#include #if defined(__i386__) || defined(__amd64__) #include @@ -1538,6 +1539,7 @@ ldev = filp->f_cdev; if (ldev != NULL) linux_cdev_deref(ldev); + linux_rcu_barrier(RCU_TYPE_REGULAR); kfree(filp); return (error);