An update for the proc interface of time namespaces: Use symbolic names
instead of clockid numbers. The usability nuisance of numbers was noticed by Michael when polishing the man page. -----BEGIN PGP SIGNATURE----- iQJHBAABCgAxFiEEQp8+kY+LLUocC4bMphj1TA10mKEFAl6cVQsTHHRnbHhAbGlu dXRyb25peC5kZQAKCRCmGPVMDXSYoWBjEAC0dCUHKDLoG0FeyG4tb4FEBW2iTqM8 UFirH26K18s8QSePdvfJlaxtN2SdfNZG7UgYN7wz1fDFQy05zTz7Rek8UrDuu3rh mVph/UZtUJl+6ypW2Lw9x5RWpT5yzay2iowUyBPnNxU9F/0uRKvXQFju3L83Lo/z Z4ni7gVEw87dQi5E74tEv6iaydgPuCBpGxoMahotnHyclqMjA0QuAK6nhN5ZTcAn senoorS/VqkSF5qEvIUwe7+F+kkMbwQryT7merJyNwh/F49xTTXRyBmiys1MF8Og MTEvldXKy2pCh2UfRa/x84WWwOUVNivTXdIXjhalsblczL0j1z9MsQ8b3AOXOiLf S+/Ntbb2dGo4qE22jekMwZ54Pm4x5NzChCU8+3pvd6IrPWZKi6vue74Kd0RNHQg/ 0kWOlZnIP2ArVW0bFqV6jhMYkjmVdK6gm7cUpFV66L2H8zbfFuc4OlxJYEFYivye 9Yck+rFQmMwA15ZXYIpggkd7Rf/5CGF1CiMBAvP/ILubpgbJqnn6/tGByq8tDKdy mqXX+NHF0M/7rJd5vr7wP6p3E5nQ9l/41rh9ii9EDLXf4jsWVO3EyobJ7fFHwprs 5tTWGxVJymUQLq/LQPXOVVENGK+ZsXXNGn/4n8IOVroeypxADTGyhtSh122kFFhv jPcVHqpBUd0g4Q== =slEk -----END PGP SIGNATURE----- Merge tag 'timers-urgent-2020-04-19' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull time namespace fix from Thomas Gleixner: "An update for the proc interface of time namespaces: Use symbolic names instead of clockid numbers. The usability nuisance of numbers was noticed by Michael when polishing the man page" * tag 'timers-urgent-2020-04-19' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: proc, time/namespace: Show clock symbolic names in /proc/pid/timens_offsets
This commit is contained in:
commit
3e0dea5768
|
@ -1573,6 +1573,7 @@ static ssize_t timens_offsets_write(struct file *file, const char __user *buf,
|
|||
noffsets = 0;
|
||||
for (pos = kbuf; pos; pos = next_line) {
|
||||
struct proc_timens_offset *off = &offsets[noffsets];
|
||||
char clock[10];
|
||||
int err;
|
||||
|
||||
/* Find the end of line and ensure we don't look past it */
|
||||
|
@ -1584,10 +1585,21 @@ static ssize_t timens_offsets_write(struct file *file, const char __user *buf,
|
|||
next_line = NULL;
|
||||
}
|
||||
|
||||
err = sscanf(pos, "%u %lld %lu", &off->clockid,
|
||||
err = sscanf(pos, "%9s %lld %lu", clock,
|
||||
&off->val.tv_sec, &off->val.tv_nsec);
|
||||
if (err != 3 || off->val.tv_nsec >= NSEC_PER_SEC)
|
||||
goto out;
|
||||
|
||||
clock[sizeof(clock) - 1] = 0;
|
||||
if (strcmp(clock, "monotonic") == 0 ||
|
||||
strcmp(clock, __stringify(CLOCK_MONOTONIC)) == 0)
|
||||
off->clockid = CLOCK_MONOTONIC;
|
||||
else if (strcmp(clock, "boottime") == 0 ||
|
||||
strcmp(clock, __stringify(CLOCK_BOOTTIME)) == 0)
|
||||
off->clockid = CLOCK_BOOTTIME;
|
||||
else
|
||||
goto out;
|
||||
|
||||
noffsets++;
|
||||
if (noffsets == ARRAY_SIZE(offsets)) {
|
||||
if (next_line)
|
||||
|
|
|
@ -338,7 +338,20 @@ static struct user_namespace *timens_owner(struct ns_common *ns)
|
|||
|
||||
static void show_offset(struct seq_file *m, int clockid, struct timespec64 *ts)
|
||||
{
|
||||
seq_printf(m, "%d %lld %ld\n", clockid, ts->tv_sec, ts->tv_nsec);
|
||||
char *clock;
|
||||
|
||||
switch (clockid) {
|
||||
case CLOCK_BOOTTIME:
|
||||
clock = "boottime";
|
||||
break;
|
||||
case CLOCK_MONOTONIC:
|
||||
clock = "monotonic";
|
||||
break;
|
||||
default:
|
||||
clock = "unknown";
|
||||
break;
|
||||
}
|
||||
seq_printf(m, "%-10s %10lld %9ld\n", clock, ts->tv_sec, ts->tv_nsec);
|
||||
}
|
||||
|
||||
void proc_timens_show_offsets(struct task_struct *p, struct seq_file *m)
|
||||
|
|
Loading…
Reference in New Issue