sysfs, kernfs: add kernfs_ops->seq_{start|next|stop}()
kernfs_ops currently only supports single_open() behavior which is
pretty restrictive. Add optional callbacks ->seq_{start|next|stop}()
which, when implemented, are invoked for seq_file traversal. This
allows full seq_file functionality for kernfs users. This currently
doesn't have any user and doesn't change any behavior.
v2: Refreshed on top of the updated "sysfs, kernfs: prepare read path
for kernfs".
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2d0cfbec2a
commit
d19b9846df
2 changed files with 35 additions and 13 deletions
|
|
@ -37,8 +37,9 @@ struct kernfs_ops {
|
|||
/*
|
||||
* Read is handled by either seq_file or raw_read().
|
||||
*
|
||||
* If seq_show() is present, seq_file path is active. The behavior
|
||||
* is equivalent to single_open(). @sf->private points to the
|
||||
* If seq_show() is present, seq_file path is active. Other seq
|
||||
* operations are optional and if not implemented, the behavior is
|
||||
* equivalent to single_open(). @sf->private points to the
|
||||
* associated sysfs_open_file.
|
||||
*
|
||||
* read() is bounced through kernel buffer and a read larger than
|
||||
|
|
@ -46,6 +47,10 @@ struct kernfs_ops {
|
|||
*/
|
||||
int (*seq_show)(struct seq_file *sf, void *v);
|
||||
|
||||
void *(*seq_start)(struct seq_file *sf, loff_t *ppos);
|
||||
void *(*seq_next)(struct seq_file *sf, void *v, loff_t *ppos);
|
||||
void (*seq_stop)(struct seq_file *sf, void *v);
|
||||
|
||||
ssize_t (*read)(struct sysfs_open_file *of, char *buf, size_t bytes,
|
||||
loff_t off);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue