mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	fs/file: more unsigned file descriptors
Propagate unsignedness for grand total of 149 bytes: $ ./scripts/bloat-o-meter ../vmlinux-000 ../obj/vmlinux add/remove: 0/0 grow/shrink: 0/10 up/down: 0/-149 (-149) function old new delta set_close_on_exec 99 98 -1 put_files_struct 201 200 -1 get_close_on_exec 59 58 -1 do_prlimit 498 497 -1 do_execveat_common.isra 1662 1661 -1 __close_fd 178 173 -5 do_dup2 219 204 -15 seq_show 685 660 -25 __alloc_fd 384 357 -27 dup_fd 718 646 -72 It mostly comes from converting "unsigned int" to "long" for bit operations. Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
							parent
							
								
									85e7340f21
								
							
						
					
					
						commit
						9b80a184ea
					
				
					 4 changed files with 23 additions and 23 deletions
				
			
		
							
								
								
									
										34
									
								
								fs/file.c
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								fs/file.c
									
									
									
									
									
								
							| 
						 | 
					@ -23,12 +23,12 @@
 | 
				
			||||||
#include <linux/rcupdate.h>
 | 
					#include <linux/rcupdate.h>
 | 
				
			||||||
#include <linux/workqueue.h>
 | 
					#include <linux/workqueue.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int sysctl_nr_open __read_mostly = 1024*1024;
 | 
					unsigned int sysctl_nr_open __read_mostly = 1024*1024;
 | 
				
			||||||
int sysctl_nr_open_min = BITS_PER_LONG;
 | 
					unsigned int sysctl_nr_open_min = BITS_PER_LONG;
 | 
				
			||||||
/* our min() is unusable in constant expressions ;-/ */
 | 
					/* our min() is unusable in constant expressions ;-/ */
 | 
				
			||||||
#define __const_min(x, y) ((x) < (y) ? (x) : (y))
 | 
					#define __const_min(x, y) ((x) < (y) ? (x) : (y))
 | 
				
			||||||
int sysctl_nr_open_max = __const_min(INT_MAX, ~(size_t)0/sizeof(void *)) &
 | 
					unsigned int sysctl_nr_open_max =
 | 
				
			||||||
			 -BITS_PER_LONG;
 | 
						__const_min(INT_MAX, ~(size_t)0/sizeof(void *)) & -BITS_PER_LONG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void *alloc_fdmem(size_t size)
 | 
					static void *alloc_fdmem(size_t size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -163,7 +163,7 @@ static struct fdtable * alloc_fdtable(unsigned int nr)
 | 
				
			||||||
 * Return <0 error code on error; 1 on successful completion.
 | 
					 * Return <0 error code on error; 1 on successful completion.
 | 
				
			||||||
 * The files->file_lock should be held on entry, and will be held on exit.
 | 
					 * The files->file_lock should be held on entry, and will be held on exit.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static int expand_fdtable(struct files_struct *files, int nr)
 | 
					static int expand_fdtable(struct files_struct *files, unsigned int nr)
 | 
				
			||||||
	__releases(files->file_lock)
 | 
						__releases(files->file_lock)
 | 
				
			||||||
	__acquires(files->file_lock)
 | 
						__acquires(files->file_lock)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -208,7 +208,7 @@ static int expand_fdtable(struct files_struct *files, int nr)
 | 
				
			||||||
 * expanded and execution may have blocked.
 | 
					 * expanded and execution may have blocked.
 | 
				
			||||||
 * The files->file_lock should be held on entry, and will be held on exit.
 | 
					 * The files->file_lock should be held on entry, and will be held on exit.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static int expand_files(struct files_struct *files, int nr)
 | 
					static int expand_files(struct files_struct *files, unsigned int nr)
 | 
				
			||||||
	__releases(files->file_lock)
 | 
						__releases(files->file_lock)
 | 
				
			||||||
	__acquires(files->file_lock)
 | 
						__acquires(files->file_lock)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -243,12 +243,12 @@ static int expand_files(struct files_struct *files, int nr)
 | 
				
			||||||
	return expanded;
 | 
						return expanded;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void __set_close_on_exec(int fd, struct fdtable *fdt)
 | 
					static inline void __set_close_on_exec(unsigned int fd, struct fdtable *fdt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	__set_bit(fd, fdt->close_on_exec);
 | 
						__set_bit(fd, fdt->close_on_exec);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void __clear_close_on_exec(int fd, struct fdtable *fdt)
 | 
					static inline void __clear_close_on_exec(unsigned int fd, struct fdtable *fdt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (test_bit(fd, fdt->close_on_exec))
 | 
						if (test_bit(fd, fdt->close_on_exec))
 | 
				
			||||||
		__clear_bit(fd, fdt->close_on_exec);
 | 
							__clear_bit(fd, fdt->close_on_exec);
 | 
				
			||||||
| 
						 | 
					@ -268,10 +268,10 @@ static inline void __clear_open_fd(unsigned int fd, struct fdtable *fdt)
 | 
				
			||||||
	__clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits);
 | 
						__clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int count_open_files(struct fdtable *fdt)
 | 
					static unsigned int count_open_files(struct fdtable *fdt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int size = fdt->max_fds;
 | 
						unsigned int size = fdt->max_fds;
 | 
				
			||||||
	int i;
 | 
						unsigned int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Find the last open fd */
 | 
						/* Find the last open fd */
 | 
				
			||||||
	for (i = size / BITS_PER_LONG; i > 0; ) {
 | 
						for (i = size / BITS_PER_LONG; i > 0; ) {
 | 
				
			||||||
| 
						 | 
					@ -291,7 +291,7 @@ struct files_struct *dup_fd(struct files_struct *oldf, int *errorp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct files_struct *newf;
 | 
						struct files_struct *newf;
 | 
				
			||||||
	struct file **old_fds, **new_fds;
 | 
						struct file **old_fds, **new_fds;
 | 
				
			||||||
	int open_files, i;
 | 
						unsigned int open_files, i;
 | 
				
			||||||
	struct fdtable *old_fdt, *new_fdt;
 | 
						struct fdtable *old_fdt, *new_fdt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	*errorp = -ENOMEM;
 | 
						*errorp = -ENOMEM;
 | 
				
			||||||
| 
						 | 
					@ -391,7 +391,7 @@ static struct fdtable *close_files(struct files_struct * files)
 | 
				
			||||||
	 * files structure.
 | 
						 * files structure.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	struct fdtable *fdt = rcu_dereference_raw(files->fdt);
 | 
						struct fdtable *fdt = rcu_dereference_raw(files->fdt);
 | 
				
			||||||
	int i, j = 0;
 | 
						unsigned int i, j = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (;;) {
 | 
						for (;;) {
 | 
				
			||||||
		unsigned long set;
 | 
							unsigned long set;
 | 
				
			||||||
| 
						 | 
					@ -477,11 +477,11 @@ struct files_struct init_files = {
 | 
				
			||||||
	.file_lock	= __SPIN_LOCK_UNLOCKED(init_files.file_lock),
 | 
						.file_lock	= __SPIN_LOCK_UNLOCKED(init_files.file_lock),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned long find_next_fd(struct fdtable *fdt, unsigned long start)
 | 
					static unsigned int find_next_fd(struct fdtable *fdt, unsigned int start)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned long maxfd = fdt->max_fds;
 | 
						unsigned int maxfd = fdt->max_fds;
 | 
				
			||||||
	unsigned long maxbit = maxfd / BITS_PER_LONG;
 | 
						unsigned int maxbit = maxfd / BITS_PER_LONG;
 | 
				
			||||||
	unsigned long bitbit = start / BITS_PER_LONG;
 | 
						unsigned int bitbit = start / BITS_PER_LONG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	bitbit = find_next_zero_bit(fdt->full_fds_bits, maxbit, bitbit) * BITS_PER_LONG;
 | 
						bitbit = find_next_zero_bit(fdt->full_fds_bits, maxbit, bitbit) * BITS_PER_LONG;
 | 
				
			||||||
	if (bitbit > maxfd)
 | 
						if (bitbit > maxfd)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,12 +30,12 @@ struct fdtable {
 | 
				
			||||||
	struct rcu_head rcu;
 | 
						struct rcu_head rcu;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline bool close_on_exec(int fd, const struct fdtable *fdt)
 | 
					static inline bool close_on_exec(unsigned int fd, const struct fdtable *fdt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return test_bit(fd, fdt->close_on_exec);
 | 
						return test_bit(fd, fdt->close_on_exec);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline bool fd_is_open(int fd, const struct fdtable *fdt)
 | 
					static inline bool fd_is_open(unsigned int fd, const struct fdtable *fdt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return test_bit(fd, fdt->open_fds);
 | 
						return test_bit(fd, fdt->open_fds);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -57,7 +57,7 @@ struct files_struct {
 | 
				
			||||||
   * written part on a separate cache line in SMP
 | 
					   * written part on a separate cache line in SMP
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
	spinlock_t file_lock ____cacheline_aligned_in_smp;
 | 
						spinlock_t file_lock ____cacheline_aligned_in_smp;
 | 
				
			||||||
	int next_fd;
 | 
						unsigned int next_fd;
 | 
				
			||||||
	unsigned long close_on_exec_init[1];
 | 
						unsigned long close_on_exec_init[1];
 | 
				
			||||||
	unsigned long open_fds_init[1];
 | 
						unsigned long open_fds_init[1];
 | 
				
			||||||
	unsigned long full_fds_bits_init[1];
 | 
						unsigned long full_fds_bits_init[1];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -63,7 +63,7 @@ extern void __init files_maxfiles_init(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern struct files_stat_struct files_stat;
 | 
					extern struct files_stat_struct files_stat;
 | 
				
			||||||
extern unsigned long get_max_files(void);
 | 
					extern unsigned long get_max_files(void);
 | 
				
			||||||
extern int sysctl_nr_open;
 | 
					extern unsigned int sysctl_nr_open;
 | 
				
			||||||
extern struct inodes_stat_t inodes_stat;
 | 
					extern struct inodes_stat_t inodes_stat;
 | 
				
			||||||
extern int leases_enable, lease_break_time;
 | 
					extern int leases_enable, lease_break_time;
 | 
				
			||||||
extern int sysctl_protected_symlinks;
 | 
					extern int sysctl_protected_symlinks;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -108,7 +108,7 @@ extern int pid_max_min, pid_max_max;
 | 
				
			||||||
extern int percpu_pagelist_fraction;
 | 
					extern int percpu_pagelist_fraction;
 | 
				
			||||||
extern int compat_log;
 | 
					extern int compat_log;
 | 
				
			||||||
extern int latencytop_enabled;
 | 
					extern int latencytop_enabled;
 | 
				
			||||||
extern int sysctl_nr_open_min, sysctl_nr_open_max;
 | 
					extern unsigned int sysctl_nr_open_min, sysctl_nr_open_max;
 | 
				
			||||||
#ifndef CONFIG_MMU
 | 
					#ifndef CONFIG_MMU
 | 
				
			||||||
extern int sysctl_nr_trim_pages;
 | 
					extern int sysctl_nr_trim_pages;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -1692,7 +1692,7 @@ static struct ctl_table fs_table[] = {
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		.procname	= "nr_open",
 | 
							.procname	= "nr_open",
 | 
				
			||||||
		.data		= &sysctl_nr_open,
 | 
							.data		= &sysctl_nr_open,
 | 
				
			||||||
		.maxlen		= sizeof(int),
 | 
							.maxlen		= sizeof(unsigned int),
 | 
				
			||||||
		.mode		= 0644,
 | 
							.mode		= 0644,
 | 
				
			||||||
		.proc_handler	= proc_dointvec_minmax,
 | 
							.proc_handler	= proc_dointvec_minmax,
 | 
				
			||||||
		.extra1		= &sysctl_nr_open_min,
 | 
							.extra1		= &sysctl_nr_open_min,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue