X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flttng-statedump-impl.c;h=0593f4c8bd22ee3e6fbd62f2535ba08a4e97eff0;hb=d608ab8e7e14e172e82d4c08a0be43e639018705;hp=164345ca463865a6e4332d15aa91fe25c03f9f43;hpb=fce87a6ebf4a69ab032f6d305d947d3973a3932a;p=lttng-modules.git diff --git a/src/lttng-statedump-impl.c b/src/lttng-statedump-impl.c index 164345ca..0593f4c8 100644 --- a/src/lttng-statedump-impl.c +++ b/src/lttng-statedump-impl.c @@ -22,31 +22,27 @@ #include #include #include +#include #include -#include #include #include -#include #include #include #include #include #include +#include + #include #include +#include #include #include -#include -#include #include -#include -#include +#include #include - -#ifdef CONFIG_LTTNG_HAS_LIST_IRQ -#include -#endif +#include /* Define the tracepoints, but do not build the probes */ #define CREATE_TRACE_POINTS @@ -195,7 +191,29 @@ enum lttng_process_status { }; -#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,11,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(6,0,0)) + +#define LTTNG_PART_STRUCT_TYPE struct block_device + +static +int lttng_get_part_name(struct gendisk *disk, struct block_device *part, char *name_buf) +{ + int ret; + + ret = snprintf(name_buf, BDEVNAME_SIZE, "%pg", part); + if (ret < 0 || ret >= BDEVNAME_SIZE) + return -ENOSYS; + + return 0; +} + +static +dev_t lttng_get_part_devt(struct block_device *part) +{ + return part->bd_dev; +} + +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,11,0)) #define LTTNG_PART_STRUCT_TYPE struct block_device @@ -332,7 +350,7 @@ int lttng_enumerate_block_devices(struct lttng_kernel_session *session) * suppressed */ if (get_capacity(disk) == 0 || - (disk->flags & GENHD_FL_SUPPRESS_PARTITION_INFO)) + (disk->flags & LTTNG_GENHD_FL_HIDDEN)) continue; ret = lttng_statedump_each_block_device(session, disk); @@ -410,7 +428,7 @@ int lttng_dump_one_fd(const void *p, struct file *file, unsigned int fd) * the lock is taken, but we are not aware whether this is * guaranteed or not, so play safe. */ - if (fd < fdt->max_fds && lttng_close_on_exec(fd, fdt)) + if (fd < fdt->max_fds && close_on_exec(fd, fdt)) flags |= O_CLOEXEC; if (IS_ERR(s)) { struct dentry *dentry = file->f_path.dentry; @@ -437,7 +455,7 @@ void lttng_enumerate_files(struct lttng_kernel_session *session, { struct lttng_fd_ctx ctx = { .page = tmp, .session = session, .files = files, }; - lttng_iterate_fd(files, 0, lttng_dump_one_fd, &ctx); + iterate_fd(files, 0, lttng_dump_one_fd, &ctx); } #ifdef LTTNG_HAVE_STATEDUMP_CPU_TOPOLOGY @@ -486,7 +504,7 @@ void lttng_enumerate_task_vm_maps(struct lttng_kernel_session *session, down_read(&mm->mmap_sem); while (map) { if (map->vm_file) - ino = map->vm_file->lttng_f_dentry->d_inode->i_ino; + ino = map->vm_file->f_path.dentry->d_inode->i_ino; else ino = 0; trace_lttng_statedump_vm_map(session, p, map, ino); @@ -510,8 +528,6 @@ int lttng_enumerate_vm_maps(struct lttng_kernel_session *session) } #endif -#ifdef CONFIG_LTTNG_HAS_LIST_IRQ - static int lttng_list_interrupts(struct lttng_kernel_session *session) { @@ -538,13 +554,6 @@ int lttng_list_interrupts(struct lttng_kernel_session *session) return 0; #undef irq_to_desc } -#else -static inline -int lttng_list_interrupts(struct lttng_kernel_session *session) -{ - return 0; -} -#endif /* * Statedump the task's namespaces using the proc filesystem inode number as @@ -589,7 +598,7 @@ void lttng_statedump_process_ns(struct lttng_kernel_session *session, * paranoid behavior of * trace_lttng_statedump_process_user_ns(). */ - user_ns = user_ns ? user_ns->lttng_user_ns_parent : NULL; + user_ns = user_ns ? user_ns->parent : NULL; } while (user_ns); /* @@ -661,7 +670,7 @@ int lttng_enumerate_process_states(struct lttng_kernel_session *session) status = LTTNG_ZOMBIE; else if (p->exit_state == EXIT_DEAD) status = LTTNG_DEAD; - else if (p->state == TASK_RUNNING) { + else if (lttng_task_is_running(p)) { /* Is this a forked child that has not run yet? */ if (list_empty(&p->rt.run_list)) status = LTTNG_WAIT_FORK; @@ -672,7 +681,7 @@ int lttng_enumerate_process_states(struct lttng_kernel_session *session) * was really running at this time. */ status = LTTNG_WAIT_CPU; - } else if (p->state & + } else if (lttng_get_task_state(p) & (TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE)) { /* Task is waiting for something to complete */ status = LTTNG_WAIT; @@ -770,7 +779,7 @@ int do_lttng_statedump(struct lttng_kernel_session *session) * is to guarantee that each CPU has been in a state where is was in * syscall mode (i.e. not in a trap, an IRQ or a soft IRQ). */ - get_online_cpus(); + lttng_cpus_read_lock(); atomic_set(&kernel_threads_to_run, num_online_cpus()); for_each_online_cpu(cpu) { INIT_DELAYED_WORK(&cpu_work[cpu], lttng_statedump_work_func); @@ -778,7 +787,7 @@ int do_lttng_statedump(struct lttng_kernel_session *session) } /* Wait for all threads to run */ __wait_event(statedump_wq, (atomic_read(&kernel_threads_to_run) == 0)); - put_online_cpus(); + lttng_cpus_read_unlock(); /* Our work is done */ trace_lttng_statedump_end(session); return 0; @@ -796,13 +805,6 @@ EXPORT_SYMBOL_GPL(lttng_statedump_start); static int __init lttng_statedump_init(void) { - /* - * Allow module to load even if the fixup cannot be done. This - * will allow seemless transition when the underlying issue fix - * is merged into the Linux kernel, and when tracepoint.c - * "tracepoint_module_notify" is turned into a static function. - */ - (void) wrapper_lttng_fixup_sig(THIS_MODULE); return 0; }