fs: allocate structure unconditionally in seq_open()
Since patch described below, from v2.6.15-rc1, seq_open() could use a struct seq_file already allocated by the caller if the pointer to the structure is stored in file->private_data before calling the function. Commit1abe77b0fc
Author: Al Viro <viro@zeniv.linux.org.uk> Date: Mon Nov 7 17:15:34 2005 -0500 [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. As there's no more use for such feature, as it could be easily replaced by calls to seq_open_private() (see commit39699037a5
("[FS] seq_file: Introduce the seq_open_private()")) and seq_release_private() (see v2.6.0-test3), support for this uncommon feature can be removed from seq_open(). Link: http://lkml.kernel.org/r/cover.1433193673.git.ydroneaud@opteya.com Signed-off-by: Yann Droneaud <ydroneaud@opteya.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
ede1bf0dcf
Коммит
189f9841de
|
@ -51,15 +51,16 @@ static void *seq_buf_alloc(unsigned long size)
|
|||
*/
|
||||
int seq_open(struct file *file, const struct seq_operations *op)
|
||||
{
|
||||
struct seq_file *p = file->private_data;
|
||||
struct seq_file *p;
|
||||
|
||||
WARN_ON(file->private_data);
|
||||
|
||||
p = kzalloc(sizeof(*p), GFP_KERNEL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
file->private_data = p;
|
||||
|
||||
if (!p) {
|
||||
p = kmalloc(sizeof(*p), GFP_KERNEL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
file->private_data = p;
|
||||
}
|
||||
memset(p, 0, sizeof(*p));
|
||||
mutex_init(&p->lock);
|
||||
p->op = op;
|
||||
#ifdef CONFIG_USER_NS
|
||||
|
|
Загрузка…
Ссылка в новой задаче