Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5dd42c26 authored by Adrian Bunk's avatar Adrian Bunk Committed by Linus Torvalds
Browse files

[PATCH] remove register_ioctl32_conversion and unregister_ioctl32_conversion



All users have been converted.

Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 3676347a
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -51,14 +51,6 @@ Who: Adrian Bunk <bunk@stusta.de>

---------------------------

What:	register_ioctl32_conversion() / unregister_ioctl32_conversion()
When:	April 2005
Why:	Replaced by ->compat_ioctl in file_operations and other method
	vecors.
Who:	Andi Kleen <ak@muc.de>, Christoph Hellwig <hch@lst.de>

---------------------------

What:	RCU API moves to EXPORT_SYMBOL_GPL
When:	April 2006
Files:	include/linux/rcupdate.h, kernel/rcupdate.c
+0 −90
Original line number Diff line number Diff line
@@ -310,96 +310,6 @@ static int __init init_sys32_ioctl(void)

__initcall(init_sys32_ioctl);

int register_ioctl32_conversion(unsigned int cmd,
				ioctl_trans_handler_t handler)
{
	struct ioctl_trans *t;
	struct ioctl_trans *new_t;
	unsigned long hash = ioctl32_hash(cmd);

	new_t = kmalloc(sizeof(*new_t), GFP_KERNEL);
	if (!new_t)
		return -ENOMEM;

	down_write(&ioctl32_sem);
	for (t = ioctl32_hash_table[hash]; t; t = t->next) {
		if (t->cmd == cmd) {
			printk(KERN_ERR "Trying to register duplicated ioctl32 "
					"handler %x\n", cmd);
			up_write(&ioctl32_sem);
			kfree(new_t);
			return -EINVAL; 
		}
	}
	new_t->next = NULL;
	new_t->cmd = cmd;
	new_t->handler = handler;
	ioctl32_insert_translation(new_t);

	up_write(&ioctl32_sem);
	return 0;
}
EXPORT_SYMBOL(register_ioctl32_conversion);

static inline int builtin_ioctl(struct ioctl_trans *t)
{ 
	return t >= ioctl_start && t < (ioctl_start + ioctl_table_size);
} 

/* Problem: 
   This function cannot unregister duplicate ioctls, because they are not
   unique.
   When they happen we need to extend the prototype to pass the handler too. */

int unregister_ioctl32_conversion(unsigned int cmd)
{
	unsigned long hash = ioctl32_hash(cmd);
	struct ioctl_trans *t, *t1;

	down_write(&ioctl32_sem);

	t = ioctl32_hash_table[hash];
	if (!t) { 
		up_write(&ioctl32_sem);
		return -EINVAL;
	} 

	if (t->cmd == cmd) { 
		if (builtin_ioctl(t)) {
			printk("%p tried to unregister builtin ioctl %x\n",
			       __builtin_return_address(0), cmd);
		} else { 
			ioctl32_hash_table[hash] = t->next;
			up_write(&ioctl32_sem);
			kfree(t);
			return 0;
		}
	} 
	while (t->next) {
		t1 = t->next;
		if (t1->cmd == cmd) { 
			if (builtin_ioctl(t1)) {
				printk("%p tried to unregister builtin "
					"ioctl %x\n",
					__builtin_return_address(0), cmd);
				goto out;
			} else { 
				t->next = t1->next;
				up_write(&ioctl32_sem);
				kfree(t1);
				return 0;
			}
		}
		t = t1;
	}
	printk(KERN_ERR "Trying to free unknown 32bit ioctl handler %x\n",
				cmd);
out:
	up_write(&ioctl32_sem);
	return -EINVAL;
}
EXPORT_SYMBOL(unregister_ioctl32_conversion); 

static void compat_ioctl_error(struct file *filp, unsigned int fd,
		unsigned int cmd, unsigned long arg)
{
+0 −22
Original line number Diff line number Diff line
@@ -14,26 +14,4 @@ struct ioctl_trans {
	struct ioctl_trans *next;
};

/* 
 * Register an 32bit ioctl translation handler for ioctl cmd.
 *
 * handler == NULL: use 64bit ioctl handler.
 * arguments to handler:  fd: file descriptor
 *                        cmd: ioctl command.
 *                        arg: ioctl argument
 *                        struct file *file: file descriptor pointer.
 */ 

#ifdef CONFIG_COMPAT
extern int __deprecated register_ioctl32_conversion(unsigned int cmd,
				ioctl_trans_handler_t handler);
extern int __deprecated unregister_ioctl32_conversion(unsigned int cmd);

#else

#define register_ioctl32_conversion(cmd, handler)	({ 0; })
#define unregister_ioctl32_conversion(cmd)		({ 0; })

#endif

#endif