struct file *file;
int fd = proc_type(inode) - PROC_TID_FD_DIR;
- task_lock(task);
- files = task->files;
- if (files)
- atomic_inc(&files->count);
- task_unlock(task);
+ files = get_files_struct(task);
if (files) {
spin_lock(&files->file_lock);
file = fcheck_files(files, fd);
goto out;
filp->f_pos++;
default:
- task_lock(p);
- files = p->files;
- if (files)
- atomic_inc(&files->count);
- task_unlock(p);
+ files = get_files_struct(p);
if (!files)
goto out;
spin_lock(&files->file_lock);
int fd = proc_type(inode) - PROC_TID_FD_DIR;
struct files_struct *files;
- task_lock(task);
- files = task->files;
- if (files)
- atomic_inc(&files->count);
- task_unlock(task);
+ files = get_files_struct(task);
if (files) {
spin_lock(&files->file_lock);
if (fcheck_files(files, fd)) {
if (!inode)
goto out;
ei = PROC_I(inode);
- task_lock(task);
- files = task->files;
- if (files)
- atomic_inc(&files->count);
- task_unlock(task);
+ files = get_files_struct(task);
if (!files)
goto out_unlock;
inode->i_mode = S_IFLNK;
#define fcheck(fd) fcheck_files(current->files, fd)
extern void FASTCALL(fd_install(unsigned int fd, struct file * file));
+
+struct task_struct;
+
+struct files_struct *get_files_struct(struct task_struct *);
void FASTCALL(put_files_struct(struct files_struct *fs));
#endif /* __LINUX_FILE_H */
}
}
+struct files_struct *get_files_struct(struct task_struct *task)
+{
+ struct files_struct *files;
+
+ task_lock(task);
+ files = task->files;
+ if (files)
+ atomic_inc(&files->count);
+ task_unlock(task);
+
+ return files;
+}
+
void fastcall put_files_struct(struct files_struct *files)
{
if (atomic_dec_and_test(&files->count)) {