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 @@ -1519,6 +1520,9 @@ if (td == NULL) td = curthread; + linux_rcu_barrier(RCU_TYPE_REGULAR); + linux_rcu_barrier(RCU_TYPE_SLEEPABLE); + error = 0; filp->f_flags = file->f_flag; linux_set_current(td);