forked from Minki/linux
block-dasd_eer: BKL pushdown
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
9a8bd2f76c
commit
986837bade
@ -15,6 +15,7 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/smp_lock.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/atomic.h>
|
||||
@ -525,6 +526,7 @@ static int dasd_eer_open(struct inode *inp, struct file *filp)
|
||||
eerb = kzalloc(sizeof(struct eerbuffer), GFP_KERNEL);
|
||||
if (!eerb)
|
||||
return -ENOMEM;
|
||||
lock_kernel();
|
||||
eerb->buffer_page_count = eer_pages;
|
||||
if (eerb->buffer_page_count < 1 ||
|
||||
eerb->buffer_page_count > INT_MAX / PAGE_SIZE) {
|
||||
@ -532,6 +534,7 @@ static int dasd_eer_open(struct inode *inp, struct file *filp)
|
||||
MESSAGE(KERN_WARNING, "can't open device since module "
|
||||
"parameter eer_pages is smaller then 1 or"
|
||||
" bigger then %d", (int)(INT_MAX / PAGE_SIZE));
|
||||
unlock_kernel();
|
||||
return -EINVAL;
|
||||
}
|
||||
eerb->buffersize = eerb->buffer_page_count * PAGE_SIZE;
|
||||
@ -539,12 +542,14 @@ static int dasd_eer_open(struct inode *inp, struct file *filp)
|
||||
GFP_KERNEL);
|
||||
if (!eerb->buffer) {
|
||||
kfree(eerb);
|
||||
unlock_kernel();
|
||||
return -ENOMEM;
|
||||
}
|
||||
if (dasd_eer_allocate_buffer_pages(eerb->buffer,
|
||||
eerb->buffer_page_count)) {
|
||||
kfree(eerb->buffer);
|
||||
kfree(eerb);
|
||||
unlock_kernel();
|
||||
return -ENOMEM;
|
||||
}
|
||||
filp->private_data = eerb;
|
||||
@ -552,6 +557,7 @@ static int dasd_eer_open(struct inode *inp, struct file *filp)
|
||||
list_add(&eerb->list, &bufferlist);
|
||||
spin_unlock_irqrestore(&bufferlock, flags);
|
||||
|
||||
unlock_kernel();
|
||||
return nonseekable_open(inp,filp);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user