#include <linux/inetdevice.h>
#include <linux/sched.h>
#include <linux/mm.h>
-#include <linux/fdtable.h>
#include <linux/swap.h>
#include <linux/wait.h>
#include <linux/mutex.h>
#include <wrapper/tracepoint.h>
#include <wrapper/genhd.h>
#include <wrapper/file.h>
-#include <wrapper/time.h>
+#include <wrapper/fdtable.h>
#ifdef CONFIG_LTTNG_HAS_LIST_IRQ
#include <linux/irq.h>
*/
pid_ns = task_active_pid_ns(p);
do {
- trace_lttng_statedump_process_state(session,
- p, type, mode, submode, status, pid_ns);
trace_lttng_statedump_process_pid_ns(session, p, pid_ns);
- pid_ns = pid_ns->parent;
+ pid_ns = pid_ns ? pid_ns->parent : NULL;
} while (pid_ns);
user_ns = task_cred_xxx(p, user_ns);
do {
trace_lttng_statedump_process_user_ns(session, p, user_ns);
- user_ns = user_ns->lttng_user_ns_parent;
+ /*
+ * trace_lttng_statedump_process_user_ns() internally
+ * checks whether user_ns is NULL. While this does not
+ * appear to be a possible return value for
+ * task_cred_xxx(), err on the safe side and check
+ * for NULL here as well to be consistent with the
+ * paranoid behavior of
+ * trace_lttng_statedump_process_user_ns().
+ */
+ user_ns = user_ns ? user_ns->lttng_user_ns_parent : NULL;
} while (user_ns);
/*
type = LTTNG_USER_THREAD;
else
type = LTTNG_KERNEL_THREAD;
+
+ trace_lttng_statedump_process_state(session,
+ p, type, mode, submode, status);
lttng_statedump_process_ns(session,
p, type, mode, submode, status);
task_unlock(p);