Fix: get_file_rcu is missing in kernels < 4.1
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 1 Dec 2023 14:52:08 +0000 (09:52 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 14 Dec 2023 14:06:59 +0000 (09:06 -0500)
Open-code the get_file_rcu using atomic_long_inc_not_zero() for kernel
versions < 4.1.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I0fa905b078165ede8b1837bb8d77891d05d0e8ed

include/wrapper/fdtable.h

index 9c11d02e9b853bae014ed9afa246541f04a45193..8b32c030cbb5b36eb42262a7b4228242756237be 100644 (file)
@@ -29,7 +29,7 @@ struct file *lttng_lookup_fdget_rcu(unsigned int fd)
                return NULL;
        return file;
 }
-#else
+#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,1,0))
 static inline
 struct file *lttng_lookup_fdget_rcu(unsigned int fd)
 {
@@ -39,6 +39,16 @@ struct file *lttng_lookup_fdget_rcu(unsigned int fd)
                return NULL;
        return file;
 }
+#else
+static inline
+struct file *lttng_lookup_fdget_rcu(unsigned int fd)
+{
+       struct file* file = fcheck(fd);
+
+       if (unlikely(!file || !atomic_long_inc_not_zero(&file->f_count)))
+               return NULL;
+       return file;
+}
 #endif
 
 #if (LTTNG_LINUX_VERSION_CODE < LTTNG_KERNEL_VERSION(3,7,0))
This page took 0.026319 seconds and 4 git commands to generate.