Lines Matching refs:m
29 static void seq_set_overflow(struct seq_file *m) in seq_set_overflow() argument
31 m->count = m->size; in seq_set_overflow()
91 static int traverse(struct seq_file *m, loff_t offset) in traverse() argument
97 m->index = 0; in traverse()
98 m->count = m->from = 0; in traverse()
102 if (!m->buf) { in traverse()
103 m->buf = seq_buf_alloc(m->size = PAGE_SIZE); in traverse()
104 if (!m->buf) in traverse()
107 p = m->op->start(m, &m->index); in traverse()
112 error = m->op->show(m, p); in traverse()
117 m->count = 0; in traverse()
119 if (seq_has_overflowed(m)) in traverse()
121 p = m->op->next(m, p, &m->index); in traverse()
122 if (pos + m->count > offset) { in traverse()
123 m->from = offset - pos; in traverse()
124 m->count -= m->from; in traverse()
127 pos += m->count; in traverse()
128 m->count = 0; in traverse()
132 m->op->stop(m, p); in traverse()
136 m->op->stop(m, p); in traverse()
137 kvfree(m->buf); in traverse()
138 m->count = 0; in traverse()
139 m->buf = seq_buf_alloc(m->size <<= 1); in traverse()
140 return !m->buf ? -ENOMEM : -EAGAIN; in traverse()
174 struct seq_file *m = iocb->ki_filp->private_data; in seq_read_iter() local
183 mutex_lock(&m->lock); in seq_read_iter()
190 m->index = 0; in seq_read_iter()
191 m->count = 0; in seq_read_iter()
195 if (unlikely(iocb->ki_pos != m->read_pos)) { in seq_read_iter()
196 while ((err = traverse(m, iocb->ki_pos)) == -EAGAIN) in seq_read_iter()
200 m->read_pos = 0; in seq_read_iter()
201 m->index = 0; in seq_read_iter()
202 m->count = 0; in seq_read_iter()
205 m->read_pos = iocb->ki_pos; in seq_read_iter()
210 if (!m->buf) { in seq_read_iter()
211 m->buf = seq_buf_alloc(m->size = PAGE_SIZE); in seq_read_iter()
212 if (!m->buf) in seq_read_iter()
216 if (m->count) { in seq_read_iter()
217 n = copy_to_iter(m->buf + m->from, m->count, iter); in seq_read_iter()
218 m->count -= n; in seq_read_iter()
219 m->from += n; in seq_read_iter()
221 if (m->count) // hadn't managed to copy everything in seq_read_iter()
225 m->from = 0; in seq_read_iter()
226 p = m->op->start(m, &m->index); in seq_read_iter()
231 err = m->op->show(m, p); in seq_read_iter()
235 m->count = 0; in seq_read_iter()
236 if (unlikely(!m->count)) { // empty record in seq_read_iter()
237 p = m->op->next(m, p, &m->index); in seq_read_iter()
240 if (!seq_has_overflowed(m)) // got it in seq_read_iter()
243 m->op->stop(m, p); in seq_read_iter()
244 kvfree(m->buf); in seq_read_iter()
245 m->count = 0; in seq_read_iter()
246 m->buf = seq_buf_alloc(m->size <<= 1); in seq_read_iter()
247 if (!m->buf) in seq_read_iter()
249 p = m->op->start(m, &m->index); in seq_read_iter()
252 m->op->stop(m, p); in seq_read_iter()
253 m->count = 0; in seq_read_iter()
260 size_t offs = m->count; in seq_read_iter()
261 loff_t pos = m->index; in seq_read_iter()
263 p = m->op->next(m, p, &m->index); in seq_read_iter()
264 if (pos == m->index) { in seq_read_iter()
266 m->op->next); in seq_read_iter()
267 m->index++; in seq_read_iter()
271 if (m->count >= iov_iter_count(iter)) in seq_read_iter()
273 err = m->op->show(m, p); in seq_read_iter()
275 m->count = offs; in seq_read_iter()
276 } else if (err || seq_has_overflowed(m)) { in seq_read_iter()
277 m->count = offs; in seq_read_iter()
281 m->op->stop(m, p); in seq_read_iter()
282 n = copy_to_iter(m->buf, m->count, iter); in seq_read_iter()
284 m->count -= n; in seq_read_iter()
285 m->from = n; in seq_read_iter()
288 copied = m->count ? -EFAULT : err; in seq_read_iter()
291 m->read_pos += copied; in seq_read_iter()
293 mutex_unlock(&m->lock); in seq_read_iter()
311 struct seq_file *m = file->private_data; in seq_lseek() local
314 mutex_lock(&m->lock); in seq_lseek()
323 if (offset != m->read_pos) { in seq_lseek()
324 while ((retval = traverse(m, offset)) == -EAGAIN) in seq_lseek()
329 m->read_pos = 0; in seq_lseek()
330 m->index = 0; in seq_lseek()
331 m->count = 0; in seq_lseek()
333 m->read_pos = offset; in seq_lseek()
340 mutex_unlock(&m->lock); in seq_lseek()
355 struct seq_file *m = file->private_data; in seq_release() local
356 kvfree(m->buf); in seq_release()
357 kmem_cache_free(seq_file_cache, m); in seq_release()
375 void seq_escape_mem(struct seq_file *m, const char *src, size_t len, in seq_escape_mem() argument
379 size_t size = seq_get_buf(m, &buf); in seq_escape_mem()
383 seq_commit(m, ret < size ? ret : -1); in seq_escape_mem()
387 void seq_vprintf(struct seq_file *m, const char *f, va_list args) in seq_vprintf() argument
391 if (m->count < m->size) { in seq_vprintf()
392 len = vsnprintf(m->buf + m->count, m->size - m->count, f, args); in seq_vprintf()
393 if (m->count + len < m->size) { in seq_vprintf()
394 m->count += len; in seq_vprintf()
398 seq_set_overflow(m); in seq_vprintf()
402 void seq_printf(struct seq_file *m, const char *f, ...) in seq_printf() argument
407 seq_vprintf(m, f, args); in seq_printf()
413 void seq_bprintf(struct seq_file *m, const char *f, const u32 *binary) in seq_bprintf() argument
417 if (m->count < m->size) { in seq_bprintf()
418 len = bstr_printf(m->buf + m->count, m->size - m->count, f, in seq_bprintf()
420 if (m->count + len < m->size) { in seq_bprintf()
421 m->count += len; in seq_bprintf()
425 seq_set_overflow(m); in seq_bprintf()
471 int seq_path(struct seq_file *m, const struct path *path, const char *esc) in seq_path() argument
474 size_t size = seq_get_buf(m, &buf); in seq_path()
485 seq_commit(m, res); in seq_path()
499 int seq_file_path(struct seq_file *m, struct file *file, const char *esc) in seq_file_path() argument
501 return seq_path(m, &file->f_path, esc); in seq_file_path()
508 int seq_path_root(struct seq_file *m, const struct path *path, in seq_path_root() argument
512 size_t size = seq_get_buf(m, &buf); in seq_path_root()
530 seq_commit(m, res); in seq_path_root()
538 int seq_dentry(struct seq_file *m, struct dentry *dentry, const char *esc) in seq_dentry() argument
541 size_t size = seq_get_buf(m, &buf); in seq_dentry()
552 seq_commit(m, res); in seq_dentry()
664 void seq_putc(struct seq_file *m, char c) in seq_putc() argument
666 if (m->count >= m->size) in seq_putc()
669 m->buf[m->count++] = c; in seq_putc()
673 void __seq_puts(struct seq_file *m, const char *s) in __seq_puts() argument
675 seq_write(m, s, strlen(s)); in __seq_puts()
692 void seq_put_decimal_ull_width(struct seq_file *m, const char *delimiter, in seq_put_decimal_ull_width() argument
697 if (m->count + 2 >= m->size) /* we'll write 2 bytes at least */ in seq_put_decimal_ull_width()
702 seq_putc(m, delimiter[0]); in seq_put_decimal_ull_width()
704 seq_puts(m, delimiter); in seq_put_decimal_ull_width()
710 if (m->count + width >= m->size) in seq_put_decimal_ull_width()
713 len = num_to_str(m->buf + m->count, m->size - m->count, num, width); in seq_put_decimal_ull_width()
717 m->count += len; in seq_put_decimal_ull_width()
721 seq_set_overflow(m); in seq_put_decimal_ull_width()
724 void seq_put_decimal_ull(struct seq_file *m, const char *delimiter, in seq_put_decimal_ull() argument
727 return seq_put_decimal_ull_width(m, delimiter, num, 0); in seq_put_decimal_ull()
743 void seq_put_hex_ll(struct seq_file *m, const char *delimiter, in seq_put_hex_ll() argument
751 seq_putc(m, delimiter[0]); in seq_put_hex_ll()
753 seq_puts(m, delimiter); in seq_put_hex_ll()
765 if (m->count + len > m->size) { in seq_put_hex_ll()
766 seq_set_overflow(m); in seq_put_hex_ll()
771 m->buf[m->count + i] = hex_asc[0xf & v]; in seq_put_hex_ll()
774 m->count += len; in seq_put_hex_ll()
777 void seq_put_decimal_ll(struct seq_file *m, const char *delimiter, long long num) in seq_put_decimal_ll() argument
781 if (m->count + 3 >= m->size) /* we'll write 2 bytes at least */ in seq_put_decimal_ll()
786 seq_putc(m, delimiter[0]); in seq_put_decimal_ll()
788 seq_puts(m, delimiter); in seq_put_decimal_ll()
791 if (m->count + 2 >= m->size) in seq_put_decimal_ll()
795 m->buf[m->count++] = '-'; in seq_put_decimal_ll()
800 m->buf[m->count++] = num + '0'; in seq_put_decimal_ll()
804 len = num_to_str(m->buf + m->count, m->size - m->count, num, 0); in seq_put_decimal_ll()
808 m->count += len; in seq_put_decimal_ll()
812 seq_set_overflow(m); in seq_put_decimal_ll()
841 void seq_pad(struct seq_file *m, char c) in seq_pad() argument
843 int size = m->pad_until - m->count; in seq_pad()
845 if (size + m->count > m->size) { in seq_pad()
846 seq_set_overflow(m); in seq_pad()
849 memset(m->buf + m->count, ' ', size); in seq_pad()
850 m->count += size; in seq_pad()
853 seq_putc(m, c); in seq_pad()
858 void seq_hex_dump(struct seq_file *m, const char *prefix_str, int prefix_type, in seq_hex_dump() argument
871 for (i = 0; i < len && !seq_has_overflowed(m); i += rowsize) { in seq_hex_dump()
877 seq_printf(m, "%s%p: ", prefix_str, ptr + i); in seq_hex_dump()
880 seq_printf(m, "%s%.8x: ", prefix_str, i); in seq_hex_dump()
883 seq_printf(m, "%s", prefix_str); in seq_hex_dump()
887 size = seq_get_buf(m, &buffer); in seq_hex_dump()
890 seq_commit(m, ret < size ? ret : -1); in seq_hex_dump()
892 seq_putc(m, '\n'); in seq_hex_dump()