spin_lock(&files->file_lock); 
rcu_read_lock(); 
static int proc_readfd(struct file * filp, void * dirent, filldir_t filldir){	struct inode *inode = filp->f_dentry->d_inode;	struct task_struct *p = proc_task(inode);	unsigned int fd, tid, ino;	int retval;	char buf[NUMBUF];	struct files_struct * files;	struct fdtable *fdt;	retval = -ENOENT;	if (!pid_alive(p))		goto out;	retval = 0;	tid = p->pid;	fd = filp->f_pos;	switch (fd) {		case 0:			if (filldir(dirent, ".", 1, 0, inode->i_ino, DT_DIR) < 0)				goto out;			filp->f_pos++;		case 1:			ino = fake_ino(tid, PROC_TID_INO);			if (filldir(dirent, "..", 2, 1, ino, DT_DIR) < 0)				goto out;			filp->f_pos++;		default:			files = get_files_struct(p);			if (!files)				goto out;			spin_lock(&files->file_lock);			fdt = files_fdtable(files);			for (fd = filp->f_pos-2;			     fd < fdt->max_fds;			     fd++, filp->f_pos++) {				unsigned int i,j;				if (!fcheck_files(files, fd))					continue;				spin_unlock(&files->file_lock);				j = NUMBUF;				i = fd;				do {					j--;					buf[j] = '0' + (i % 10);					i /= 10;				} while (i);				ino = fake_ino(tid, PROC_TID_FD_DIR + fd);				if (filldir(dirent, buf+j, NUMBUF-j, fd+2, ino, DT_LNK) < 0) {					spin_lock(&files->file_lock);					break;				}				spin_lock(&files->file_lock);			}			spin_unlock(&files->file_lock);			put_files_struct(files);	}out:	return retval;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b835996f628eadb55c5fb222ba46fe9395bf73c7/base.c/buggy/fs/proc/base.c