Lines Matching refs:m
19 static void seq_set_overflow(struct seq_file *m) in seq_set_overflow() argument
21 m->count = m->size; in seq_set_overflow()
90 static int traverse(struct seq_file *m, loff_t offset) in traverse() argument
96 m->version = 0; in traverse()
98 m->count = m->from = 0; in traverse()
100 m->index = index; in traverse()
103 if (!m->buf) { in traverse()
104 m->buf = seq_buf_alloc(m->size = PAGE_SIZE); in traverse()
105 if (!m->buf) in traverse()
108 p = m->op->start(m, &index); in traverse()
113 error = m->op->show(m, p); in traverse()
118 m->count = 0; in traverse()
120 if (seq_has_overflowed(m)) in traverse()
122 if (pos + m->count > offset) { in traverse()
123 m->from = offset - pos; in traverse()
124 m->count -= m->from; in traverse()
125 m->index = index; in traverse()
128 pos += m->count; in traverse()
129 m->count = 0; in traverse()
132 m->index = index; in traverse()
135 p = m->op->next(m, p, &index); in traverse()
137 m->op->stop(m, p); in traverse()
138 m->index = index; in traverse()
142 m->op->stop(m, p); in traverse()
143 kvfree(m->buf); in traverse()
144 m->count = 0; in traverse()
145 m->buf = seq_buf_alloc(m->size <<= 1); in traverse()
146 return !m->buf ? -ENOMEM : -EAGAIN; in traverse()
160 struct seq_file *m = file->private_data; in seq_read() local
167 mutex_lock(&m->lock); in seq_read()
180 m->version = file->f_version; in seq_read()
183 if (unlikely(*ppos != m->read_pos)) { in seq_read()
184 while ((err = traverse(m, *ppos)) == -EAGAIN) in seq_read()
188 m->read_pos = 0; in seq_read()
189 m->version = 0; in seq_read()
190 m->index = 0; in seq_read()
191 m->count = 0; in seq_read()
194 m->read_pos = *ppos; in seq_read()
199 if (!m->buf) { in seq_read()
200 m->buf = seq_buf_alloc(m->size = PAGE_SIZE); in seq_read()
201 if (!m->buf) in seq_read()
205 if (m->count) { in seq_read()
206 n = min(m->count, size); in seq_read()
207 err = copy_to_user(buf, m->buf + m->from, n); in seq_read()
210 m->count -= n; in seq_read()
211 m->from += n; in seq_read()
215 if (!m->count) in seq_read()
216 m->index++; in seq_read()
221 pos = m->index; in seq_read()
222 p = m->op->start(m, &pos); in seq_read()
227 err = m->op->show(m, p); in seq_read()
231 m->count = 0; in seq_read()
232 if (unlikely(!m->count)) { in seq_read()
233 p = m->op->next(m, p, &pos); in seq_read()
234 m->index = pos; in seq_read()
237 if (m->count < m->size) in seq_read()
239 m->op->stop(m, p); in seq_read()
240 kvfree(m->buf); in seq_read()
241 m->count = 0; in seq_read()
242 m->buf = seq_buf_alloc(m->size <<= 1); in seq_read()
243 if (!m->buf) in seq_read()
245 m->version = 0; in seq_read()
246 pos = m->index; in seq_read()
247 p = m->op->start(m, &pos); in seq_read()
249 m->op->stop(m, p); in seq_read()
250 m->count = 0; in seq_read()
254 while (m->count < size) { in seq_read()
255 size_t offs = m->count; in seq_read()
257 p = m->op->next(m, p, &next); in seq_read()
262 err = m->op->show(m, p); in seq_read()
263 if (seq_has_overflowed(m) || err) { in seq_read()
264 m->count = offs; in seq_read()
270 m->op->stop(m, p); in seq_read()
271 n = min(m->count, size); in seq_read()
272 err = copy_to_user(buf, m->buf, n); in seq_read()
276 m->count -= n; in seq_read()
277 if (m->count) in seq_read()
278 m->from = n; in seq_read()
281 m->index = pos; in seq_read()
287 m->read_pos += copied; in seq_read()
289 file->f_version = m->version; in seq_read()
290 mutex_unlock(&m->lock); in seq_read()
311 struct seq_file *m = file->private_data; in seq_lseek() local
314 mutex_lock(&m->lock); in seq_lseek()
315 m->version = file->f_version; 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->version = 0; in seq_lseek()
331 m->index = 0; in seq_lseek()
332 m->count = 0; in seq_lseek()
334 m->read_pos = offset; in seq_lseek()
341 file->f_version = m->version; in seq_lseek()
342 mutex_unlock(&m->lock); in seq_lseek()
357 struct seq_file *m = file->private_data; in seq_release() local
358 kvfree(m->buf); in seq_release()
359 kfree(m); in seq_release()
374 int seq_escape(struct seq_file *m, const char *s, const char *esc) in seq_escape() argument
376 char *end = m->buf + m->size; in seq_escape()
380 for (p = m->buf + m->count; (c = *s) != '\0' && p < end; s++) { in seq_escape()
392 seq_set_overflow(m); in seq_escape()
395 m->count = p - m->buf; in seq_escape()
400 int seq_vprintf(struct seq_file *m, const char *f, va_list args) in seq_vprintf() argument
404 if (m->count < m->size) { in seq_vprintf()
405 len = vsnprintf(m->buf + m->count, m->size - m->count, f, args); in seq_vprintf()
406 if (m->count + len < m->size) { in seq_vprintf()
407 m->count += len; in seq_vprintf()
411 seq_set_overflow(m); in seq_vprintf()
416 int seq_printf(struct seq_file *m, const char *f, ...) in seq_printf() argument
422 ret = seq_vprintf(m, f, args); in seq_printf()
470 int seq_path(struct seq_file *m, const struct path *path, const char *esc) in seq_path() argument
473 size_t size = seq_get_buf(m, &buf); in seq_path()
484 seq_commit(m, res); in seq_path()
493 int seq_path_root(struct seq_file *m, const struct path *path, in seq_path_root() argument
497 size_t size = seq_get_buf(m, &buf); in seq_path_root()
515 seq_commit(m, res); in seq_path_root()
523 int seq_dentry(struct seq_file *m, struct dentry *dentry, const char *esc) in seq_dentry() argument
526 size_t size = seq_get_buf(m, &buf); in seq_dentry()
537 seq_commit(m, res); in seq_dentry()
648 int seq_putc(struct seq_file *m, char c) in seq_putc() argument
650 if (m->count < m->size) { in seq_putc()
651 m->buf[m->count++] = c; in seq_putc()
658 int seq_puts(struct seq_file *m, const char *s) in seq_puts() argument
661 if (m->count + len < m->size) { in seq_puts()
662 memcpy(m->buf + m->count, s, len); in seq_puts()
663 m->count += len; in seq_puts()
666 seq_set_overflow(m); in seq_puts()
678 int seq_put_decimal_ull(struct seq_file *m, char delimiter, in seq_put_decimal_ull() argument
683 if (m->count + 2 >= m->size) /* we'll write 2 bytes at least */ in seq_put_decimal_ull()
687 m->buf[m->count++] = delimiter; in seq_put_decimal_ull()
690 m->buf[m->count++] = num + '0'; in seq_put_decimal_ull()
694 len = num_to_str(m->buf + m->count, m->size - m->count, num); in seq_put_decimal_ull()
697 m->count += len; in seq_put_decimal_ull()
700 seq_set_overflow(m); in seq_put_decimal_ull()
705 int seq_put_decimal_ll(struct seq_file *m, char delimiter, in seq_put_decimal_ll() argument
709 if (m->count + 3 >= m->size) { in seq_put_decimal_ll()
710 seq_set_overflow(m); in seq_put_decimal_ll()
714 m->buf[m->count++] = delimiter; in seq_put_decimal_ll()
718 return seq_put_decimal_ull(m, delimiter, num); in seq_put_decimal_ll()
748 void seq_pad(struct seq_file *m, char c) in seq_pad() argument
750 int size = m->pad_until - m->count; in seq_pad()
752 seq_printf(m, "%*s", size, ""); in seq_pad()
754 seq_putc(m, c); in seq_pad()