X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fum%2Fdrivers%2Fharddog_kern.c;h=64ff22aa077bdb3686fe33e655914630af45dd44;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=2a4c8cf06600eb305a1a3da2b48b7884583469e2;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/arch/um/drivers/harddog_kern.c b/arch/um/drivers/harddog_kern.c index 2a4c8cf06..64ff22aa0 100644 --- a/arch/um/drivers/harddog_kern.c +++ b/arch/um/drivers/harddog_kern.c @@ -35,7 +35,6 @@ */ #include -#include #include #include #include @@ -46,7 +45,6 @@ #include #include #include -#include "helper.h" #include "mconsole.h" MODULE_LICENSE("GPL"); @@ -71,7 +69,7 @@ static int harddog_open(struct inode *inode, struct file *file) if(timer_alive) return -EBUSY; #ifdef CONFIG_HARDDOG_NOWAYOUT - MOD_INC_USE_COUNT; + __module_get(THIS_MODULE); #endif #ifdef CONFIG_MCONSOLE @@ -82,7 +80,7 @@ static int harddog_open(struct inode *inode, struct file *file) timer_alive = 1; unlock_kernel(); - return 0; + return nonseekable_open(inode, file); } extern void stop_watchdog(int in_fd, int out_fd); @@ -105,13 +103,9 @@ static int harddog_release(struct inode *inode, struct file *file) extern int ping_watchdog(int fd); -static ssize_t harddog_write(struct file *file, const char *data, size_t len, +static ssize_t harddog_write(struct file *file, const char __user *data, size_t len, loff_t *ppos) { - /* Can't seek (pwrite) on this device */ - if (ppos != &file->f_pos) - return -ESPIPE; - /* * Refresh the timer. */ @@ -123,6 +117,7 @@ static ssize_t harddog_write(struct file *file, const char *data, size_t len, static int harddog_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { + void __user *argp= (void __user *)arg; static struct watchdog_info ident = { WDIOC_SETTIMEOUT, 0, @@ -132,13 +127,12 @@ static int harddog_ioctl(struct inode *inode, struct file *file, default: return -ENOTTY; case WDIOC_GETSUPPORT: - if(copy_to_user((struct harddog_info *)arg, &ident, - sizeof(ident))) + if(copy_to_user(argp, &ident, sizeof(ident))) return -EFAULT; return 0; case WDIOC_GETSTATUS: case WDIOC_GETBOOTSTATUS: - return put_user(0,(int *)arg); + return put_user(0,(int __user *)argp); case WDIOC_KEEPALIVE: return(ping_watchdog(harddog_out_fd)); }