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:
+13
-1
@@ -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)
|
||||
|
||||
+14
-1
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user