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

Commit 986837ba authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Jonathan Corbet
Browse files

block-dasd_eer: BKL pushdown



Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parent 9a8bd2f7
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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);
}