[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:
parent
ccd48bc7fa
commit
1abe77b0fc
1 changed files with 8 additions and 4 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue