Re: linux-next: manual merge of the tty tree with the tty.current tree
From: Greg KH
Date: Sun Feb 07 2016 - 21:28:00 EST
On Mon, Feb 08, 2016 at 01:16:29PM +1100, Stephen Rothwell wrote:
> Hi Greg,
>
> Today's linux-next merge of the tty tree got a conflict in:
>
> drivers/tty/tty_io.c
>
> between commit:
>
> e9036d066236 ("tty: Drop krefs for interrupted tty lock")
>
> from the tty.current tree and commit:
>
> d6203d0c7b73 ("tty: Refactor tty_open()")
>
> from the tty tree.
>
> I fixed it up (I think - see below) and can carry the fix as necessary
> (no action is required).
>
> --
> Cheers,
> Stephen Rothwell
>
> diff --cc drivers/tty/tty_io.c
> index a7eacef1bd22,8d26ed79bb4c..000000000000
> --- a/drivers/tty/tty_io.c
> +++ b/drivers/tty/tty_io.c
> @@@ -2004,6 -2009,69 +2009,68 @@@ static struct tty_driver *tty_lookup_dr
> }
>
> /**
> + * tty_open_by_driver - open a tty device
> + * @device: dev_t of device to open
> + * @inode: inode of device file
> + * @filp: file pointer to tty
> + *
> + * Performs the driver lookup, checks for a reopen, or otherwise
> + * performs the first-time tty initialization.
> + *
> + * Returns the locked initialized or re-opened &tty_struct
> + *
> + * Claims the global tty_mutex to serialize:
> + * - concurrent first-time tty initialization
> + * - concurrent tty driver removal w/ lookup
> + * - concurrent tty removal from driver table
> + */
> + static struct tty_struct *tty_open_by_driver(dev_t device, struct inode *inode,
> + struct file *filp)
> + {
> + struct tty_struct *tty;
> + struct tty_driver *driver = NULL;
> + int index = -1;
> + int retval;
> +
> + mutex_lock(&tty_mutex);
> + driver = tty_lookup_driver(device, filp, &index);
> + if (IS_ERR(driver)) {
> + mutex_unlock(&tty_mutex);
> + return ERR_CAST(driver);
> + }
> +
> + /* check whether we're reopening an existing tty */
> + tty = tty_driver_lookup_tty(driver, inode, index);
> + if (IS_ERR(tty)) {
> + mutex_unlock(&tty_mutex);
> + goto out;
> + }
> +
> + if (tty) {
> + mutex_unlock(&tty_mutex);
> + retval = tty_lock_interruptible(tty);
> ++ tty_kref_put(tty); /* drop kref from tty_driver_lookup_tty() */
> + if (retval) {
> + if (retval == -EINTR)
> + retval = -ERESTARTSYS;
> + tty = ERR_PTR(retval);
> + goto out;
> + }
> - /* safe to drop the kref from tty_driver_lookup_tty() */
> - tty_kref_put(tty);
> + retval = tty_reopen(tty);
> + if (retval < 0) {
> + tty_unlock(tty);
> + tty = ERR_PTR(retval);
> + }
> + } else { /* Returns with the tty_lock held for now */
> + tty = tty_init_dev(driver, index);
> + mutex_unlock(&tty_mutex);
> + }
> + out:
> + tty_driver_kref_put(driver);
> + return tty;
> + }
> +
> + /**
> * tty_open - open a tty device
> * @inode: inode of device file
> * @filp: file pointer to tty
Peter warned me this was going to happen...
Peter, is the merge above correct?
thanks,
greg k-h