----- Original Message ----- > > > ----- Original Message ----- > > > > Hi Dave > > > > I found a problem with the net -s command. It concerns line 1451 in net.c > > > > struct_socket = inode - SIZE(socket); > > > > As I understand it we have the type > > > > struct socket_alloc { > > struct socket socket; > > struct inode vfs_inode; > > } > > > > and we have the address of the second field and want the address of > > the first. The calculation, using the size of the socket struct, > > used in net.c require that the second field is aligned directly > > after the first field. This is unfortunately not true in cases I > > have seen. By changing the line 1451 to: > > > > struct_socket = inode - MEMBER_OFFSET("socket_alloc", "vfs_inode"); > > > > things work better. > > > > Is this something you would like to change in Crash? I assume you > > will move the offset calculation to somewhere else so it is only > > performed once. > > Probably so... > > Although I'm curious -- what kernel version do you see this on? > It works as expected on RHEL5, RHEL6 and a Fedora 16 3.1.7-based > kernel. What do you see when you do this: > > crash> socket_alloc -o > struct socket_alloc { > [0] struct socket socket; > [48] struct inode vfs_inode; > } > SIZE: 616 > crash> socket > struct socket { > socket_state state; > short int type; > long unsigned int flags; > struct socket_wq *wq; > struct file *file; > struct sock *sk; > const struct proto_ops *ops; > } > SIZE: 48 > crash> > > And just for the changelog description, what havoc does it wreak? > > Thanks, > Dave Interesing -- I see the problem with the 3 sample ARM dumpfiles I have on hand. I would have thought the same issue would be seen with a 32-bit x86, but it looks like it's an ARM compiler issue? Check this comparison -- while the inode structure is different in these two kernels, the socket structure is the same: X86: ARM: crash> socket_alloc -o crash> socket_alloc -o struct socket_alloc { struct socket_alloc { [0] struct socket socket; [0] struct socket socket; [28] struct inode vfs_inode; [32] struct inode vfs_inode; } } SIZE: 388 SIZE: 584 crash> socket -o crash> socket -o struct socket { struct socket { [0] socket_state state; [0] socket_state state; [4] short int type; [4] short int type; [8] long unsigned int flags; [8] long unsigned int flags; [12] struct socket_wq *wq; [12] struct socket_wq *wq; [16] struct file *file; [16] struct file *file; [20] struct sock *sk; [20] struct sock *sk; [24] const struct proto_ops *ops; [24] const struct proto_ops *ops; } } SIZE: 28 SIZE: 28 crash> crash> But for whatever reason, the ARM kernel pushes the vfs_inode to offset 32 even though the preceding socket structure is 28 bytes long. Anyway, using the offset instead of the size is a better idea, so I'll make that change. Although -- my sample ARM dumpfiles don't have any tasks with open sockets, so I still am interested in seeing what the failure looks like for the changelog entry. Thanks, Dave -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility