Skip to content

Commit

Permalink
tty: cdev lock_kernel() pushdown
Browse files Browse the repository at this point in the history
Parts of the serial code actually BUG() if we don't do this.
  • Loading branch information
Jonathan Corbet committed Jun 20, 2008
1 parent c43ef17 commit 39d95b9
Showing 1 changed file with 25 additions and 2 deletions.
27 changes: 25 additions & 2 deletions drivers/char/tty_io.c
Original file line number Diff line number Diff line change
Expand Up @@ -2665,7 +2665,7 @@ static void release_dev(struct file *filp)
* ->siglock protects ->signal/->sighand
*/

static int tty_open(struct inode *inode, struct file *filp)
static int __tty_open(struct inode *inode, struct file *filp)
{
struct tty_struct *tty;
int noctty, retval;
Expand Down Expand Up @@ -2779,6 +2779,19 @@ static int tty_open(struct inode *inode, struct file *filp)
return 0;
}

/* BKL pushdown: scary code avoidance wrapper */
static int tty_open(struct inode *inode, struct file *filp)
{
int ret;

lock_kernel();
ret = __tty_open(inode, filp);
unlock_kernel();
return ret;
}



#ifdef CONFIG_UNIX98_PTYS
/**
* ptmx_open - open a unix 98 pty master
Expand All @@ -2792,7 +2805,7 @@ static int tty_open(struct inode *inode, struct file *filp)
* allocated_ptys_lock handles the list of free pty numbers
*/

static int ptmx_open(struct inode *inode, struct file *filp)
static int __ptmx_open(struct inode *inode, struct file *filp)
{
struct tty_struct *tty;
int retval;
Expand Down Expand Up @@ -2831,6 +2844,16 @@ static int ptmx_open(struct inode *inode, struct file *filp)
devpts_kill_index(index);
return retval;
}

static int ptmx_open(struct inode *inode, struct file *filp)
{
int ret;

lock_kernel();
ret = __ptmx_open(inode, filp);
unlock_kernel();
return ret;
}
#endif

/**
Expand Down

0 comments on commit 39d95b9

Please sign in to comment.