struct seq_file *p = kmalloc(sizeof(*p), GFP_KERNEL); if (!p) return -ENOMEM; 
struct seq_file *p = file->private_data;  if (!p) { p = kmalloc(sizeof(*p), GFP_KERNEL); if (!p) return -ENOMEM; file->private_data = p; } 
int seq_open(struct file *file, struct seq_operations *op){	struct seq_file *p = kmalloc(sizeof(*p), GFP_KERNEL);	if (!p)		return -ENOMEM;	memset(p, 0, sizeof(*p));	sema_init(&p->sem, 1);	p->op = op;	file->private_data = p;	/*	 * Wrappers around seq_open(e.g. swaps_open) need to be	 * aware of this. If they set f_version themselves, they	 * should call seq_open first and then set f_version.	 */	file->f_version = 0;	/* SEQ files support lseek, but not pread/pwrite */	file->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1abe77b0fc4b485927f1f798ae81a752677e1d05/seq_file.c/clean/fs/seq_file.c