Commit 858743c2 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] soundcore.c referenced non-existent errno variable

Patch from: Petr Vandrovec <vandrove@vc.cvut.cz>

soundcore is trying to perform kernel syscalls to load firmware, but falls
afoul of missing `errno'.  Convert it to use VFS API functions.
parent 7bb503fc
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#define __KERNEL_SYSCALLS__
#include <linux/module.h> #include <linux/module.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/unistd.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
static int do_mod_firmware_load(const char *fn, char **fp) static int do_mod_firmware_load(const char *fn, char **fp)
{ {
int fd; struct file* filp;
long l; long l;
char *dp; char *dp;
loff_t pos;
fd = open(fn, 0, 0); filp = filp_open(fn, 0, 0);
if (fd == -1) if (IS_ERR(filp))
{ {
printk(KERN_INFO "Unable to load '%s'.\n", fn); printk(KERN_INFO "Unable to load '%s'.\n", fn);
return 0; return 0;
} }
l = lseek(fd, 0L, 2); l = filp->f_dentry->d_inode->i_size;
if (l <= 0 || l > 131072) if (l <= 0 || l > 131072)
{ {
printk(KERN_INFO "Invalid firmware '%s'\n", fn); printk(KERN_INFO "Invalid firmware '%s'\n", fn);
sys_close(fd); filp_close(filp, NULL);
return 0; return 0;
} }
lseek(fd, 0L, 0);
dp = vmalloc(l); dp = vmalloc(l);
if (dp == NULL) if (dp == NULL)
{ {
printk(KERN_INFO "Out of memory loading '%s'.\n", fn); printk(KERN_INFO "Out of memory loading '%s'.\n", fn);
sys_close(fd); filp_close(filp, NULL);
return 0; return 0;
} }
if (read(fd, dp, l) != l) pos = 0;
if (vfs_read(filp, dp, l, &pos) != l)
{ {
printk(KERN_INFO "Failed to read '%s'.\n", fn); printk(KERN_INFO "Failed to read '%s'.\n", fn);
vfree(dp); vfree(dp);
sys_close(fd); filp_close(filp, NULL);
return 0; return 0;
} }
close(fd); filp_close(filp, NULL);
*fp = dp; *fp = dp;
return (int) l; return (int) l;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment