Fixed invalid resource re-use in file_find()

File descriptors are a per-process resource. The same descriptor
in different processes can refer to different files. find_file()
incorrectly assumed that file descriptors are globally unique.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes ZFS issue #386
This commit is contained in:
Gunnar Beutner
2011-10-11 09:50:52 -07:00
committed by Brian Behlendorf
parent 4a777c028c
commit 763b2f3b57
2 changed files with 3 additions and 1 deletions
+2 -1
View File
@@ -511,7 +511,7 @@ file_find(int fd)
ASSERT(spin_is_locked(&vn_file_lock));
list_for_each_entry(fp, &vn_file_list, f_list) {
if (fd == fp->f_fd) {
if (fd == fp->f_fd && fp->f_task == current) {
ASSERT(atomic_read(&fp->f_ref) != 0);
return fp;
}
@@ -550,6 +550,7 @@ vn_getf(int fd)
mutex_enter(&fp->f_lock);
fp->f_fd = fd;
fp->f_task = current;
fp->f_offset = 0;
atomic_inc(&fp->f_ref);