[systemd-devel] [PATCH] tty: Set correct tty name in 'active' sysfs attribute

David Herrmann dh.herrmann at gmail.com
Wed Feb 5 06:05:07 PST 2014


Hi

On Wed, Feb 5, 2014 at 2:53 PM, Peter Hurley <peter at hurleysoftware.com> wrote:
> On 02/05/2014 07:53 AM, David Herrmann wrote:
>>
>> Hi
>>
>> On Wed, Feb 5, 2014 at 11:11 AM, Hannes Reinecke <hare at suse.de> wrote:
>>>
>>> The 'active' sysfs attribute should refer to the currently
>>> active tty devices the console is running on, not the currently
>>> active console.
>>> The console structure doesn't refer to any device in sysfs,
>>> only the tty the console is running on has.
>>> So we need to print out the tty names in 'active', not
>>> the console names.
>>>
>>> Cc: Lennart Poettering <lennart at poettering.net>
>>> Cc: Kay Sievers <kay at vrfy.org>
>>> Signed-off-by: Werner Fink <werner at suse.de>
>>> Signed-off-by: Hannes Reinecke <hare at suse.de>
>>> ---
>>>   drivers/tty/tty_io.c | 14 ++++++++++++--
>>>   1 file changed, 12 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
>>> index c74a00a..17db8ca 100644
>>> --- a/drivers/tty/tty_io.c
>>> +++ b/drivers/tty/tty_io.c
>>> @@ -3545,9 +3545,19 @@ static ssize_t show_cons_active(struct device
>>> *dev,
>>>                  if (i >= ARRAY_SIZE(cs))
>>>                          break;
>>>          }
>>> -       while (i--)
>>> +       while (i--) {
>>> +               const struct tty_driver *driver;
>>> +               const char *name = cs[i]->name;
>>> +               int index = cs[i]->index;
>>> +
>>> +               driver = cs[i]->device(cs[i], &index);
>>> +               if (driver) {
>>> +                       index += driver->name_base;
>>> +                       name = driver->name;
>>> +               }
>>>                  count += sprintf(buf + count, "%s%d%c",
>>> -                                cs[i]->name, cs[i]->index, i ? '
>>> ':'\n');
>>> +                                name, index, i ? ' ':'\n');
>>> +       }
>>
>>
>> Nice catch and indeed, systemd already relies on these names to be
>> identical to their char-dev name. Fortunately, VTs and most serial
>> devices register the console with the same name as the TTY, so we're
>> fine.
>
>
> What device did this trip over?

I haven't seen one so far, but to me it's a coincident, not something
we should rely on.

> Also, this file is not private to systemd. Maybe these changes should
> be forked into a different sysfs attribute, "active_devices"?

What's the use-case to return the name of the console-driver? There is
no way for user-space to read active console-drivers anywhere so I
think returning the TTY makes more sense. We already have working
user-space that can spawn gettys on active consoles via this file. I
am open to change this to "active_devices" as the existing interface
was clearly not designed to return the device-names.

However, given the fact that both matched so far, I think changing the
existing interface to the only user I am aware of is better than
adding a new interface just to keep this unused attribute. But
obviously it's the maintainer's/your decision and you might know
user-space which requires the console-names instead of the tty-names.
So please let us know which way to go as we would like to see a
reliable way to match active consoles to TTY devices for automated
getty-startup.

Thanks
David


More information about the systemd-devel mailing list