• Home
  • Raw
  • Download

Lines Matching +full:1 +full:d +full:- +full:histogram

1 // SPDX-License-Identifier: GPL-2.0
12 #include <linux/device-mapper.h>
14 #include "dm-core.h"
15 #include "dm-stats.h"
22 * Using 64-bit values to avoid overflow (which is a
33 unsigned long long *histogram; member
62 #define STAT_PRECISE_TIMESTAMPS 1
72 * exhaust 1/4 of all memory or 1/2 of vmalloc space.
91 if (a > (VMALLOC_END - VMALLOC_START) / DM_STATS_VMALLOC_FACTOR) in __check_shared_memory()
138 shared_memory_amount -= alloc_size; in free_shared_memory()
174 kfree(s->histogram_boundaries); in dm_stat_free()
175 kfree(s->program_id); in dm_stat_free()
176 kfree(s->aux_data); in dm_stat_free()
178 dm_kvfree(s->stat_percpu[cpu][0].histogram, s->histogram_alloc_size); in dm_stat_free()
179 dm_kvfree(s->stat_percpu[cpu], s->percpu_alloc_size); in dm_stat_free()
181 dm_kvfree(s->stat_shared[0].tmp.histogram, s->histogram_alloc_size); in dm_stat_free()
182 dm_kvfree(s, s->shared_alloc_size); in dm_stat_free()
187 return atomic_read(&shared->in_flight[READ]) + in dm_stat_in_flight()
188 atomic_read(&shared->in_flight[WRITE]); in dm_stat_in_flight()
196 mutex_init(&stats->mutex); in dm_stats_init()
197 INIT_LIST_HEAD(&stats->list); in dm_stats_init()
198 stats->last = alloc_percpu(struct dm_stats_last_position); in dm_stats_init()
200 last = per_cpu_ptr(stats->last, cpu); in dm_stats_init()
201 last->last_sector = (sector_t)ULLONG_MAX; in dm_stats_init()
202 last->last_rw = UINT_MAX; in dm_stats_init()
212 while (!list_empty(&stats->list)) { in dm_stats_cleanup()
213 s = container_of(stats->list.next, struct dm_stat, list_entry); in dm_stats_cleanup()
214 list_del(&s->list_entry); in dm_stats_cleanup()
215 for (ni = 0; ni < s->n_entries; ni++) { in dm_stats_cleanup()
216 shared = &s->stat_shared[ni]; in dm_stats_cleanup()
218 DMCRIT("leaked in-flight counter at index %lu " in dm_stats_cleanup()
219 "(start %llu, end %llu, step %llu): reads %d, writes %d", in dm_stats_cleanup()
221 (unsigned long long)s->start, in dm_stats_cleanup()
222 (unsigned long long)s->end, in dm_stats_cleanup()
223 (unsigned long long)s->step, in dm_stats_cleanup()
224 atomic_read(&shared->in_flight[READ]), in dm_stats_cleanup()
225 atomic_read(&shared->in_flight[WRITE])); in dm_stats_cleanup()
228 dm_stat_free(&s->rcu_head); in dm_stats_cleanup()
230 free_percpu(stats->last); in dm_stats_cleanup()
231 mutex_destroy(&stats->mutex); in dm_stats_cleanup()
256 return -EINVAL; in dm_stats_create()
258 n_entries = end - start; in dm_stats_create()
262 if (n_entries != (size_t)n_entries || !(size_t)(n_entries + 1)) in dm_stats_create()
263 return -EOVERFLOW; in dm_stats_create()
266 if ((shared_alloc_size - sizeof(struct dm_stat)) / sizeof(struct dm_stat_shared) != n_entries) in dm_stats_create()
267 return -EOVERFLOW; in dm_stats_create()
271 return -EOVERFLOW; in dm_stats_create()
273 histogram_alloc_size = (n_histogram_entries + 1) * (size_t)n_entries * sizeof(unsigned long long); in dm_stats_create()
274 …if (histogram_alloc_size / (n_histogram_entries + 1) != (size_t)n_entries * sizeof(unsigned long l… in dm_stats_create()
275 return -EOVERFLOW; in dm_stats_create()
279 return -ENOMEM; in dm_stats_create()
283 return -ENOMEM; in dm_stats_create()
285 s->stat_flags = stat_flags; in dm_stats_create()
286 s->n_entries = n_entries; in dm_stats_create()
287 s->start = start; in dm_stats_create()
288 s->end = end; in dm_stats_create()
289 s->step = step; in dm_stats_create()
290 s->shared_alloc_size = shared_alloc_size; in dm_stats_create()
291 s->percpu_alloc_size = percpu_alloc_size; in dm_stats_create()
292 s->histogram_alloc_size = histogram_alloc_size; in dm_stats_create()
294 s->n_histogram_entries = n_histogram_entries; in dm_stats_create()
295 s->histogram_boundaries = kmemdup(histogram_boundaries, in dm_stats_create()
296 s->n_histogram_entries * sizeof(unsigned long long), GFP_KERNEL); in dm_stats_create()
297 if (!s->histogram_boundaries) { in dm_stats_create()
298 r = -ENOMEM; in dm_stats_create()
302 s->program_id = kstrdup(program_id, GFP_KERNEL); in dm_stats_create()
303 if (!s->program_id) { in dm_stats_create()
304 r = -ENOMEM; in dm_stats_create()
307 s->aux_data = kstrdup(aux_data, GFP_KERNEL); in dm_stats_create()
308 if (!s->aux_data) { in dm_stats_create()
309 r = -ENOMEM; in dm_stats_create()
314 atomic_set(&s->stat_shared[ni].in_flight[READ], 0); in dm_stats_create()
315 atomic_set(&s->stat_shared[ni].in_flight[WRITE], 0); in dm_stats_create()
318 if (s->n_histogram_entries) { in dm_stats_create()
320 hi = dm_kvzalloc(s->histogram_alloc_size, NUMA_NO_NODE); in dm_stats_create()
322 r = -ENOMEM; in dm_stats_create()
326 s->stat_shared[ni].tmp.histogram = hi; in dm_stats_create()
327 hi += s->n_histogram_entries + 1; in dm_stats_create()
334 r = -ENOMEM; in dm_stats_create()
337 s->stat_percpu[cpu] = p; in dm_stats_create()
338 if (s->n_histogram_entries) { in dm_stats_create()
340 hi = dm_kvzalloc(s->histogram_alloc_size, cpu_to_node(cpu)); in dm_stats_create()
342 r = -ENOMEM; in dm_stats_create()
346 p[ni].histogram = hi; in dm_stats_create()
347 hi += s->n_histogram_entries + 1; in dm_stats_create()
361 mutex_lock(&stats->mutex); in dm_stats_create()
362 s->id = 0; in dm_stats_create()
363 list_for_each(l, &stats->list) { in dm_stats_create()
365 if (WARN_ON(tmp_s->id < s->id)) { in dm_stats_create()
366 r = -EINVAL; in dm_stats_create()
369 if (tmp_s->id > s->id) in dm_stats_create()
371 if (unlikely(s->id == INT_MAX)) { in dm_stats_create()
372 r = -ENFILE; in dm_stats_create()
375 s->id++; in dm_stats_create()
377 ret_id = s->id; in dm_stats_create()
378 list_add_tail_rcu(&s->list_entry, l); in dm_stats_create()
379 mutex_unlock(&stats->mutex); in dm_stats_create()
386 mutex_unlock(&stats->mutex); in dm_stats_create()
389 dm_stat_free(&s->rcu_head); in dm_stats_create()
397 list_for_each_entry(s, &stats->list, list_entry) { in __dm_stats_find()
398 if (s->id > id) in __dm_stats_find()
400 if (s->id == id) in __dm_stats_find()
412 mutex_lock(&stats->mutex); in dm_stats_delete()
416 mutex_unlock(&stats->mutex); in dm_stats_delete()
417 return -ENOENT; in dm_stats_delete()
420 list_del_rcu(&s->list_entry); in dm_stats_delete()
421 mutex_unlock(&stats->mutex); in dm_stats_delete()
427 if (is_vmalloc_addr(s->stat_percpu) || in dm_stats_delete()
428 is_vmalloc_addr(s->stat_percpu[cpu][0].histogram)) in dm_stats_delete()
431 is_vmalloc_addr(s->stat_shared[0].tmp.histogram)) { in dm_stats_delete()
434 dm_stat_free(&s->rcu_head); in dm_stats_delete()
436 WRITE_ONCE(dm_stat_need_rcu_barrier, 1); in dm_stats_delete()
437 call_rcu(&s->rcu_head, dm_stat_free); in dm_stats_delete()
454 mutex_lock(&stats->mutex); in dm_stats_list()
455 list_for_each_entry(s, &stats->list, list_entry) { in dm_stats_list()
456 if (!program || !strcmp(program, s->program_id)) { in dm_stats_list()
457 len = s->end - s->start; in dm_stats_list()
458 DMEMIT("%d: %llu+%llu %llu %s %s", s->id, in dm_stats_list()
459 (unsigned long long)s->start, in dm_stats_list()
461 (unsigned long long)s->step, in dm_stats_list()
462 s->program_id, in dm_stats_list()
463 s->aux_data); in dm_stats_list()
464 if (s->stat_flags & STAT_PRECISE_TIMESTAMPS) in dm_stats_list()
466 if (s->n_histogram_entries) { in dm_stats_list()
468 DMEMIT(" histogram:"); in dm_stats_list()
469 for (i = 0; i < s->n_histogram_entries; i++) { in dm_stats_list()
472 DMEMIT("%llu", s->histogram_boundaries[i]); in dm_stats_list()
478 mutex_unlock(&stats->mutex); in dm_stats_list()
480 return 1; in dm_stats_list()
492 if (likely(!(s->stat_flags & STAT_PRECISE_TIMESTAMPS))) in dm_stat_round()
497 difference = now - shared->stamp; in dm_stat_round()
501 in_flight_read = (unsigned)atomic_read(&shared->in_flight[READ]); in dm_stat_round()
502 in_flight_write = (unsigned)atomic_read(&shared->in_flight[WRITE]); in dm_stat_round()
504 p->io_ticks[READ] += difference; in dm_stat_round()
506 p->io_ticks[WRITE] += difference; in dm_stat_round()
508 p->io_ticks_total += difference; in dm_stat_round()
509 p->time_in_queue += (in_flight_read + in_flight_write) * difference; in dm_stat_round()
511 shared->stamp = now; in dm_stat_round()
519 struct dm_stat_shared *shared = &s->stat_shared[entry]; in dm_stat_for_entry()
527 * from non-interrupt context as well as from interrupt context in dm_stat_for_entry()
530 * On 64-bit architectures the race only results in not counting some in dm_stat_for_entry()
531 * events, so it is acceptable. On 32-bit architectures the race could in dm_stat_for_entry()
543 p = &s->stat_percpu[smp_processor_id()][entry]; in dm_stat_for_entry()
547 atomic_inc(&shared->in_flight[idx]); in dm_stat_for_entry()
551 atomic_dec(&shared->in_flight[idx]); in dm_stat_for_entry()
552 p->sectors[idx] += len; in dm_stat_for_entry()
553 p->ios[idx] += 1; in dm_stat_for_entry()
554 p->merges[idx] += stats_aux->merged; in dm_stat_for_entry()
555 if (!(s->stat_flags & STAT_PRECISE_TIMESTAMPS)) { in dm_stat_for_entry()
556 p->ticks[idx] += duration_jiffies; in dm_stat_for_entry()
559 p->ticks[idx] += stats_aux->duration_ns; in dm_stat_for_entry()
560 duration = stats_aux->duration_ns; in dm_stat_for_entry()
562 if (s->n_histogram_entries) { in dm_stat_for_entry()
563 unsigned lo = 0, hi = s->n_histogram_entries + 1; in dm_stat_for_entry()
564 while (lo + 1 < hi) { in dm_stat_for_entry()
566 if (s->histogram_boundaries[mid - 1] > duration) { in dm_stat_for_entry()
573 p->histogram[lo]++; in dm_stat_for_entry()
592 if (end_sector <= s->start || bi_sector >= s->end) in __dm_stat_bio()
594 if (unlikely(bi_sector < s->start)) { in __dm_stat_bio()
596 todo = end_sector - s->start; in __dm_stat_bio()
598 rel_sector = bi_sector - s->start; in __dm_stat_bio()
599 todo = end_sector - bi_sector; in __dm_stat_bio()
601 if (unlikely(end_sector > s->end)) in __dm_stat_bio()
602 todo -= (end_sector - s->end); in __dm_stat_bio()
604 offset = dm_sector_div64(rel_sector, s->step); in __dm_stat_bio()
607 if (WARN_ON_ONCE(entry >= s->n_entries)) { in __dm_stat_bio()
608 DMCRIT("Invalid area access in region id %d", s->id); in __dm_stat_bio()
612 if (fragment_len > s->step - offset) in __dm_stat_bio()
613 fragment_len = s->step - offset; in __dm_stat_bio()
616 todo -= fragment_len; in __dm_stat_bio()
642 last = raw_cpu_ptr(stats->last); in dm_stats_account_io()
643 stats_aux->merged = in dm_stats_account_io()
644 (bi_sector == (READ_ONCE(last->last_sector) && in dm_stats_account_io()
646 (READ_ONCE(last->last_rw) == WRITE)) in dm_stats_account_io()
648 WRITE_ONCE(last->last_sector, end_sector); in dm_stats_account_io()
649 WRITE_ONCE(last->last_rw, bi_rw); in dm_stats_account_io()
655 list_for_each_entry_rcu(s, &stats->list, list_entry) { in dm_stats_account_io()
656 if (s->stat_flags & STAT_PRECISE_TIMESTAMPS && !got_precise_time) { in dm_stats_account_io()
658 stats_aux->duration_ns = ktime_to_ns(ktime_get()); in dm_stats_account_io()
660 stats_aux->duration_ns = ktime_to_ns(ktime_get()) - stats_aux->duration_ns; in dm_stats_account_io()
676 p = &s->stat_percpu[smp_processor_id()][x]; in __dm_stat_init_temporary_percpu_totals()
680 shared->tmp.sectors[READ] = 0; in __dm_stat_init_temporary_percpu_totals()
681 shared->tmp.sectors[WRITE] = 0; in __dm_stat_init_temporary_percpu_totals()
682 shared->tmp.ios[READ] = 0; in __dm_stat_init_temporary_percpu_totals()
683 shared->tmp.ios[WRITE] = 0; in __dm_stat_init_temporary_percpu_totals()
684 shared->tmp.merges[READ] = 0; in __dm_stat_init_temporary_percpu_totals()
685 shared->tmp.merges[WRITE] = 0; in __dm_stat_init_temporary_percpu_totals()
686 shared->tmp.ticks[READ] = 0; in __dm_stat_init_temporary_percpu_totals()
687 shared->tmp.ticks[WRITE] = 0; in __dm_stat_init_temporary_percpu_totals()
688 shared->tmp.io_ticks[READ] = 0; in __dm_stat_init_temporary_percpu_totals()
689 shared->tmp.io_ticks[WRITE] = 0; in __dm_stat_init_temporary_percpu_totals()
690 shared->tmp.io_ticks_total = 0; in __dm_stat_init_temporary_percpu_totals()
691 shared->tmp.time_in_queue = 0; in __dm_stat_init_temporary_percpu_totals()
693 if (s->n_histogram_entries) in __dm_stat_init_temporary_percpu_totals()
694 memset(shared->tmp.histogram, 0, (s->n_histogram_entries + 1) * sizeof(unsigned long long)); in __dm_stat_init_temporary_percpu_totals()
697 p = &s->stat_percpu[cpu][x]; in __dm_stat_init_temporary_percpu_totals()
698 shared->tmp.sectors[READ] += READ_ONCE(p->sectors[READ]); in __dm_stat_init_temporary_percpu_totals()
699 shared->tmp.sectors[WRITE] += READ_ONCE(p->sectors[WRITE]); in __dm_stat_init_temporary_percpu_totals()
700 shared->tmp.ios[READ] += READ_ONCE(p->ios[READ]); in __dm_stat_init_temporary_percpu_totals()
701 shared->tmp.ios[WRITE] += READ_ONCE(p->ios[WRITE]); in __dm_stat_init_temporary_percpu_totals()
702 shared->tmp.merges[READ] += READ_ONCE(p->merges[READ]); in __dm_stat_init_temporary_percpu_totals()
703 shared->tmp.merges[WRITE] += READ_ONCE(p->merges[WRITE]); in __dm_stat_init_temporary_percpu_totals()
704 shared->tmp.ticks[READ] += READ_ONCE(p->ticks[READ]); in __dm_stat_init_temporary_percpu_totals()
705 shared->tmp.ticks[WRITE] += READ_ONCE(p->ticks[WRITE]); in __dm_stat_init_temporary_percpu_totals()
706 shared->tmp.io_ticks[READ] += READ_ONCE(p->io_ticks[READ]); in __dm_stat_init_temporary_percpu_totals()
707 shared->tmp.io_ticks[WRITE] += READ_ONCE(p->io_ticks[WRITE]); in __dm_stat_init_temporary_percpu_totals()
708 shared->tmp.io_ticks_total += READ_ONCE(p->io_ticks_total); in __dm_stat_init_temporary_percpu_totals()
709 shared->tmp.time_in_queue += READ_ONCE(p->time_in_queue); in __dm_stat_init_temporary_percpu_totals()
710 if (s->n_histogram_entries) { in __dm_stat_init_temporary_percpu_totals()
712 for (i = 0; i < s->n_histogram_entries + 1; i++) in __dm_stat_init_temporary_percpu_totals()
713 shared->tmp.histogram[i] += READ_ONCE(p->histogram[i]); in __dm_stat_init_temporary_percpu_totals()
726 shared = &s->stat_shared[x]; in __dm_stat_clear()
730 p = &s->stat_percpu[smp_processor_id()][x]; in __dm_stat_clear()
731 p->sectors[READ] -= shared->tmp.sectors[READ]; in __dm_stat_clear()
732 p->sectors[WRITE] -= shared->tmp.sectors[WRITE]; in __dm_stat_clear()
733 p->ios[READ] -= shared->tmp.ios[READ]; in __dm_stat_clear()
734 p->ios[WRITE] -= shared->tmp.ios[WRITE]; in __dm_stat_clear()
735 p->merges[READ] -= shared->tmp.merges[READ]; in __dm_stat_clear()
736 p->merges[WRITE] -= shared->tmp.merges[WRITE]; in __dm_stat_clear()
737 p->ticks[READ] -= shared->tmp.ticks[READ]; in __dm_stat_clear()
738 p->ticks[WRITE] -= shared->tmp.ticks[WRITE]; in __dm_stat_clear()
739 p->io_ticks[READ] -= shared->tmp.io_ticks[READ]; in __dm_stat_clear()
740 p->io_ticks[WRITE] -= shared->tmp.io_ticks[WRITE]; in __dm_stat_clear()
741 p->io_ticks_total -= shared->tmp.io_ticks_total; in __dm_stat_clear()
742 p->time_in_queue -= shared->tmp.time_in_queue; in __dm_stat_clear()
744 if (s->n_histogram_entries) { in __dm_stat_clear()
746 for (i = 0; i < s->n_histogram_entries + 1; i++) { in __dm_stat_clear()
748 p = &s->stat_percpu[smp_processor_id()][x]; in __dm_stat_clear()
749 p->histogram[i] -= shared->tmp.histogram[i]; in __dm_stat_clear()
760 mutex_lock(&stats->mutex); in dm_stats_clear()
764 mutex_unlock(&stats->mutex); in dm_stats_clear()
765 return -ENOENT; in dm_stats_clear()
768 __dm_stat_clear(s, 0, s->n_entries, true); in dm_stats_clear()
770 mutex_unlock(&stats->mutex); in dm_stats_clear()
772 return 1; in dm_stats_clear()
776 * This is like jiffies_to_msec, but works for 64-bit values.
783 if (s->stat_flags & STAT_PRECISE_TIMESTAMPS) in dm_jiffies_to_msec64()
789 if (j >= 1 << 22) { in dm_jiffies_to_msec64()
790 mult = jiffies_to_msecs(1 << 22); in dm_jiffies_to_msec64()
793 if (j >= 1ULL << 44) in dm_jiffies_to_msec64()
815 mutex_lock(&stats->mutex); in dm_stats_print()
819 mutex_unlock(&stats->mutex); in dm_stats_print()
820 return -ENOENT; in dm_stats_print()
825 idx_end > s->n_entries) in dm_stats_print()
826 idx_end = s->n_entries; in dm_stats_print()
831 step = s->step; in dm_stats_print()
832 start = s->start + (step * idx_start); in dm_stats_print()
835 shared = &s->stat_shared[x]; in dm_stats_print()
837 if (unlikely(end > s->end)) in dm_stats_print()
838 end = s->end; in dm_stats_print()
842 DMEMIT("%llu+%llu %llu %llu %llu %llu %llu %llu %llu %llu %d %llu %llu %llu %llu", in dm_stats_print()
845 shared->tmp.ios[READ], in dm_stats_print()
846 shared->tmp.merges[READ], in dm_stats_print()
847 shared->tmp.sectors[READ], in dm_stats_print()
848 dm_jiffies_to_msec64(s, shared->tmp.ticks[READ]), in dm_stats_print()
849 shared->tmp.ios[WRITE], in dm_stats_print()
850 shared->tmp.merges[WRITE], in dm_stats_print()
851 shared->tmp.sectors[WRITE], in dm_stats_print()
852 dm_jiffies_to_msec64(s, shared->tmp.ticks[WRITE]), in dm_stats_print()
854 dm_jiffies_to_msec64(s, shared->tmp.io_ticks_total), in dm_stats_print()
855 dm_jiffies_to_msec64(s, shared->tmp.time_in_queue), in dm_stats_print()
856 dm_jiffies_to_msec64(s, shared->tmp.io_ticks[READ]), in dm_stats_print()
857 dm_jiffies_to_msec64(s, shared->tmp.io_ticks[WRITE])); in dm_stats_print()
858 if (s->n_histogram_entries) { in dm_stats_print()
860 for (i = 0; i < s->n_histogram_entries + 1; i++) { in dm_stats_print()
861 DMEMIT("%s%llu", !i ? " " : ":", shared->tmp.histogram[i]); in dm_stats_print()
866 if (unlikely(sz + 1 >= maxlen)) in dm_stats_print()
874 mutex_unlock(&stats->mutex); in dm_stats_print()
876 return 1; in dm_stats_print()
884 mutex_lock(&stats->mutex); in dm_stats_set_aux()
888 mutex_unlock(&stats->mutex); in dm_stats_set_aux()
889 return -ENOENT; in dm_stats_set_aux()
894 mutex_unlock(&stats->mutex); in dm_stats_set_aux()
895 return -ENOMEM; in dm_stats_set_aux()
898 kfree(s->aux_data); in dm_stats_set_aux()
899 s->aux_data = new_aux_data; in dm_stats_set_aux()
901 mutex_unlock(&stats->mutex); in dm_stats_set_aux()
913 *n_histogram_entries = 1; in parse_histogram()
922 return -ENOMEM; in parse_histogram()
926 while (1) { in parse_histogram()
932 return -EINVAL; in parse_histogram()
934 return -EINVAL; in parse_histogram()
937 if (s == 1) in parse_histogram()
939 h = strchr(h, ',') + 1; in parse_histogram()
973 dm_consume_args(&as, 1); in message_stats_create()
976 if (!strcmp(a, "-")) { in message_stats_create()
980 len = 1; in message_stats_create()
990 if (sscanf(a, "/%u%c", &divisor, &dummy) == 1) { in message_stats_create()
992 return -EINVAL; in message_stats_create()
993 step = end - start; in message_stats_create()
997 step = 1; in message_stats_create()
998 } else if (sscanf(a, "%llu%c", &step, &dummy) != 1 || in message_stats_create()
1004 if (a && sscanf(a, "%u%c", &feature_args, &dummy) == 1) { in message_stats_create()
1005 while (feature_args--) { in message_stats_create()
1011 else if (!strncasecmp(a, "histogram:", 10)) { in message_stats_create()
1023 program_id = "-"; in message_stats_create()
1024 aux_data = "-"; in message_stats_create()
1043 snprintf(result, maxlen, "%d", INT_MAX); in message_stats_create()
1045 r = 1; in message_stats_create()
1057 snprintf(result, maxlen, "%d", id); in message_stats_create()
1059 r = 1; in message_stats_create()
1063 r = -EINVAL; in message_stats_create()
1076 return -EINVAL; in message_stats_delete()
1078 if (sscanf(argv[1], "%d%c", &id, &dummy) != 1 || id < 0) in message_stats_delete()
1079 return -EINVAL; in message_stats_delete()
1091 return -EINVAL; in message_stats_clear()
1093 if (sscanf(argv[1], "%d%c", &id, &dummy) != 1 || id < 0) in message_stats_clear()
1094 return -EINVAL; in message_stats_clear()
1106 if (argc < 1 || argc > 2) in message_stats_list()
1107 return -EINVAL; in message_stats_list()
1109 if (argc > 1) { in message_stats_list()
1110 program = kstrdup(argv[1], GFP_KERNEL); in message_stats_list()
1112 return -ENOMEM; in message_stats_list()
1131 return -EINVAL; in message_stats_print()
1133 if (sscanf(argv[1], "%d%c", &id, &dummy) != 1 || id < 0) in message_stats_print()
1134 return -EINVAL; in message_stats_print()
1137 if (strcmp(argv[2], "-") && in message_stats_print()
1138 sscanf(argv[2], "%lu%c", &idx_start, &dummy) != 1) in message_stats_print()
1139 return -EINVAL; in message_stats_print()
1140 if (strcmp(argv[3], "-") && in message_stats_print()
1141 sscanf(argv[3], "%lu%c", &idx_len, &dummy) != 1) in message_stats_print()
1142 return -EINVAL; in message_stats_print()
1156 return -EINVAL; in message_stats_set_aux()
1158 if (sscanf(argv[1], "%d%c", &id, &dummy) != 1 || id < 0) in message_stats_set_aux()
1159 return -EINVAL; in message_stats_set_aux()
1187 if (r == -EINVAL) in dm_stats_message()