seq_file calls stop() after show()
Hi, I am trying to duplicate the purpose of /proc/pid/io for a homework to understand how procfs / seq_file works. Although there is no mandate to use seq_file but it seems very interesting to me. The aim is to print an output similar to /proc/pid/io but for all processes at once using a custom proc file name "/proc/proc_io". The project is organized as follows: main.c -> It is responsible for kernel module init / deinit sequence.c -> This is where I have put in the processing logic utils.h -> bunch of macros for debugging The debugging logs come as follows: ========= [ +4.814129] <pl_open:15> [ +0.000017] <pl_seq_start:53> [ +0.000003] <pl_seq_start:55> init_task: [ffffffff81e11500] pos: [0] [ +0.000001] <pl_seq_show:103> [ +0.000004] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff880225a28000] [ +0.000002] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff880225a28dc0] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff880225a29b80] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff880225a2b700] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff880225a2d280] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff880225a2e040] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff880225a2ee00] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff880225a78000] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff880225a7ee00] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff880225aa8000] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff880225aa8dc0] [ +0.000001] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff880225aaa940] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff880225aab700] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff880225aac4c0] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff880225aad280] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff880225aaee00] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff880225048000] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff880225048dc0] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff880225049b80] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff88022504b700] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff88022504c4c0] [ +0.000001] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff88022504d280] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff88022504e040] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff8802250f0000] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff8802250f0dc0] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff8802250f1b80] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff8802250f2940] [ +0.000001] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff8802250f44c0] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff8802250f5280] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff8802250f6040] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff8802250f6e00] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_next:72> [ +0.000001] <pl_seq_next:79> n_tsk: [ffff8802251a0dc0] [ +0.000002] <pl_seq_show:103> [ +0.000002] <pl_seq_next:72> [ +0.000002] <pl_seq_next:79> n_tsk: [ffff8802251a1b80] [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_stop:92> [ +0.000276] <pl_seq_start:53> [ +0.000002] <pl_seq_start:55> init_task: [ffffffff81e11500] pos: [1] [ +0.000001] <pl_seq_stop:92> ========= Towards the end, the sequence is as follows: [ +0.000001] <pl_seq_show:103> [ +0.000003] <pl_seq_stop:92> i.e. stop() is called after show(). This is making my output truncated to only first few processes. Although I always return 0 from show(), I fail to understand why stop() is being invoked just after show(). Can you please help me or redirect me somewhere to understand why this is happening? Thank You. Gaurav
participants (1)
-
Gaurav Kalra