switch coda get_device_index() to fget_light()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro 2012-08-27 12:54:13 -04:00
parent 88b428d6e1
commit 78f7d75e5d
1 changed files with 15 additions and 17 deletions

View File

@ -109,41 +109,39 @@ static int get_device_index(struct coda_mount_data *data)
{ {
struct file *file; struct file *file;
struct inode *inode; struct inode *inode;
int idx; int idx, fput_needed;
if(data == NULL) { if (data == NULL) {
printk("coda_read_super: Bad mount data\n"); printk("coda_read_super: Bad mount data\n");
return -1; return -1;
} }
if(data->version != CODA_MOUNT_VERSION) { if (data->version != CODA_MOUNT_VERSION) {
printk("coda_read_super: Bad mount version\n"); printk("coda_read_super: Bad mount version\n");
return -1; return -1;
} }
file = fget(data->fd); file = fget_light(data->fd, &fput_needed);
inode = NULL; if (!file)
if(file) goto Ebadf;
inode = file->f_path.dentry->d_inode; inode = file->f_path.dentry->d_inode;
if (!S_ISCHR(inode->i_mode) || imajor(inode) != CODA_PSDEV_MAJOR) {
if(!inode || !S_ISCHR(inode->i_mode) || fput_light(file, fput_needed);
imajor(inode) != CODA_PSDEV_MAJOR) { goto Ebadf;
if(file)
fput(file);
printk("coda_read_super: Bad file\n");
return -1;
} }
idx = iminor(inode); idx = iminor(inode);
fput(file); fput_light(file, fput_needed);
if(idx < 0 || idx >= MAX_CODADEVS) { if (idx < 0 || idx >= MAX_CODADEVS) {
printk("coda_read_super: Bad minor number\n"); printk("coda_read_super: Bad minor number\n");
return -1; return -1;
} }
return idx; return idx;
Ebadf:
printk("coda_read_super: Bad file\n");
return -1;
} }
static int coda_fill_super(struct super_block *sb, void *data, int silent) static int coda_fill_super(struct super_block *sb, void *data, int silent)