Re: simplify procfs code for seq_file instances V2
From: Alexey Dobriyan <hidden>
Date: 2018-05-09 16:53:31
Also in:
linux-acpi, linux-ext4, linux-ide, linux-rtc, linux-scsi, lkml, netfilter-devel
On Sun, May 06, 2018 at 06:45:31PM +0100, Al Viro wrote:
On Sun, May 06, 2018 at 08:19:49PM +0300, Alexey Dobriyan wrote:
quoted
@@ -62,9 +62,9 @@ struct proc_dir_entry { umode_t mode; u8 namelen; #ifdef CONFIG_64BIT -#define SIZEOF_PDE_INLINE_NAME (192-139) +#define SIZEOF_PDE_INLINE_NAME (192-155) #else -#define SIZEOF_PDE_INLINE_NAME (128-87) +#define SIZEOF_PDE_INLINE_NAME (128-95)quoted
#endif char inline_name[SIZEOF_PDE_INLINE_NAME]; } __randomize_layout;*UGH*
I agree. Maintaining these numbers is a pain point. Who knew people were going to start adding fields right away.
Both to the original state and that kind of "adjustments". Incidentally, with __bugger_layout in there these expressions are simply wrong.
Struct randomization is exempt from maintaining sizeof as they are already screwing cachelines and everything. But if patch works with lockdep and randomization -- even better.
If nothing else, I would suggest turning the last one into char inline_name[]; in hope that layout won't get... randomized that much and used #ifdef CONFIG_64BIT #define PDE_SIZE 192 #else #define PDE_SIZE 128 #endif union __proc_dir_entry { char pad[PDE_SIZE]; struct proc_dir_entry real; }; #define SIZEOF_PDE_INLINE_NAME (PDE_SIZE - offsetof(struct proc_dir_entry, inline_name)) for constants, adjusted sizeof and sizeof_field when creating proc_dir_entry_cache and turned proc_root into union __proc_dir_entry __proc_root = { .real = { .low_ino = PROC_ROOT_INO, .namelen = 5, .mode = S_IFDIR | S_IRUGO | S_IXUGO, .nlink = 2, .refcnt = REFCOUNT_INIT(1), .proc_iops = &proc_root_inode_operations, .proc_fops = &proc_root_operations, .parent = &__proc_root.real, .subdir = RB_ROOT, .name = __proc_root.real.inline_name, .inline_name = "/proc", }}; #define proc_root __proc_root.real (or actually used __proc_root.real in all of a 6 places where it remains).quoted
- size_t state_size = PDE(inode)->state_size; + unsigned int state_size = PDE(inode)->state_size;<shakes head> You and your "size_t is evil" crusade...
[nods]
unsigned long flags; /* error bits */
unsigned long i_state;
unsigned long s_blocksize;
unsigned long s_flags;
unsigned long s_iflags; /* internal SB_I_* flags */