From: Andrew Morton - Use a macro - Nuke the nasty typedef Cc: Eric Dumazet Signed-off-by: Andrew Morton --- fs/file.c | 6 +++--- include/linux/file.h | 14 ++++++++++---- include/linux/init_task.h | 2 +- kernel/fork.c | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff -puN fs/file.c~shrinks-sizeoffiles_struct-and-better-layout-tidy fs/file.c --- 25/fs/file.c~shrinks-sizeoffiles_struct-and-better-layout-tidy Fri Jan 13 17:54:05 2006 +++ 25-akpm/fs/file.c Fri Jan 13 17:54:05 2006 @@ -125,7 +125,7 @@ static void free_fdtable_rcu(struct rcu_ kmem_cache_free(files_cachep, fdt->free_files); return; } - if (fdt->max_fdset <= 8 * sizeof(embedded_fd_set) && + if (fdt->max_fdset <= EMBEDDED_FD_SET_SIZE && fdt->max_fds <= NR_OPEN_DEFAULT) { /* * The fdtable was embedded @@ -157,7 +157,7 @@ static void free_fdtable_rcu(struct rcu_ void free_fdtable(struct fdtable *fdt) { if (fdt->free_files || - fdt->max_fdset > 8 * sizeof(embedded_fd_set) || + fdt->max_fdset > EMBEDDED_FD_SET_SIZE || fdt->max_fds > NR_OPEN_DEFAULT) call_rcu(&fdt->rcu, free_fdtable_rcu); } @@ -221,7 +221,7 @@ fd_set * alloc_fdset(int num) void free_fdset(fd_set *array, int num) { - if (num <= 8 * sizeof(embedded_fd_set)) /* Don't free an embedded fdset */ + if (num <= EMBEDDED_FD_SET_SIZE) /* Don't free an embedded fdset */ return; else if (num <= 8 * PAGE_SIZE) kfree(array); diff -puN include/linux/file.h~shrinks-sizeoffiles_struct-and-better-layout-tidy include/linux/file.h --- 25/include/linux/file.h~shrinks-sizeoffiles_struct-and-better-layout-tidy Fri Jan 13 17:54:05 2006 +++ 25-akpm/include/linux/file.h Fri Jan 13 17:54:05 2006 @@ -10,6 +10,7 @@ #include #include #include +#include /* * The default fd array needs to be at least BITS_PER_LONG, @@ -21,9 +22,14 @@ * The embedded_fd_set is a small fd_set, * suitable for most tasks (which open <= BITS_PER_LONG files) */ -typedef struct { +struct embedded_fd_set { unsigned long fds_bits[1]; -} embedded_fd_set; +}; + +/* + * More than this number of fds: we use a separately allocated fd_set + */ +#define EMBEDDED_FD_SET_SIZE (BITS_PER_BYTE * sizeof(struct embedded_fd_set)) struct fdtable { unsigned int max_fds; @@ -51,8 +57,8 @@ struct files_struct { */ spinlock_t file_lock ____cacheline_aligned_in_smp; int next_fd; - embedded_fd_set close_on_exec_init; - embedded_fd_set open_fds_init; + struct embedded_fd_set close_on_exec_init; + struct embedded_fd_set open_fds_init; struct file * fd_array[NR_OPEN_DEFAULT]; }; diff -puN include/linux/init_task.h~shrinks-sizeoffiles_struct-and-better-layout-tidy include/linux/init_task.h --- 25/include/linux/init_task.h~shrinks-sizeoffiles_struct-and-better-layout-tidy Fri Jan 13 17:54:05 2006 +++ 25-akpm/include/linux/init_task.h Fri Jan 13 17:54:05 2006 @@ -7,7 +7,7 @@ #define INIT_FDTABLE \ { \ .max_fds = NR_OPEN_DEFAULT, \ - .max_fdset = 8 * sizeof(embedded_fd_set), \ + .max_fdset = EMBEDDED_FD_SET_SIZE, \ .fd = &init_files.fd_array[0], \ .close_on_exec = (fd_set *)&init_files.close_on_exec_init, \ .open_fds = (fd_set *)&init_files.open_fds_init, \ diff -puN kernel/fork.c~shrinks-sizeoffiles_struct-and-better-layout-tidy kernel/fork.c --- 25/kernel/fork.c~shrinks-sizeoffiles_struct-and-better-layout-tidy Fri Jan 13 17:54:05 2006 +++ 25-akpm/kernel/fork.c Fri Jan 13 17:54:05 2006 @@ -585,7 +585,7 @@ static struct files_struct *alloc_files( newf->next_fd = 0; fdt = &newf->fdtab; fdt->max_fds = NR_OPEN_DEFAULT; - fdt->max_fdset = 8 * sizeof(embedded_fd_set); + fdt->max_fdset = EMBEDDED_FD_SET_SIZE; fdt->close_on_exec = (fd_set *)&newf->close_on_exec_init; fdt->open_fds = (fd_set *)&newf->open_fds_init; fdt->fd = &newf->fd_array[0]; _