[PATCH] allow callers of seq_open do allocation themselves

Allow caller of seq_open() to kmalloc() seq_file + whatever else they
want and set ->private_data to it.  seq_open() will then abstain from
doing allocation itself.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Al Viro 2005-11-07 17:15:34 -05:00 committed by Linus Torvalds
parent ccd48bc7fa
commit 1abe77b0fc

View File

@ -28,13 +28,17 @@
*/ */
int seq_open(struct file *file, struct seq_operations *op) int seq_open(struct file *file, struct seq_operations *op)
{ {
struct seq_file *p = kmalloc(sizeof(*p), GFP_KERNEL); struct seq_file *p = file->private_data;
if (!p)
return -ENOMEM; if (!p) {
p = kmalloc(sizeof(*p), GFP_KERNEL);
if (!p)
return -ENOMEM;
file->private_data = p;
}
memset(p, 0, sizeof(*p)); memset(p, 0, sizeof(*p));
sema_init(&p->sem, 1); sema_init(&p->sem, 1);
p->op = op; p->op = op;
file->private_data = p;
/* /*
* Wrappers around seq_open(e.g. swaps_open) need to be * Wrappers around seq_open(e.g. swaps_open) need to be