linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / fs / readdir.c
index de97df7..b610932 100644 (file)
@@ -30,13 +30,13 @@ int vfs_readdir(struct file *file, filldir_t filler, void *buf)
        if (res)
                goto out;
 
-       down(&inode->i_sem);
+       mutex_lock(&inode->i_mutex);
        res = -ENOENT;
        if (!IS_DEADDIR(inode)) {
                res = file->f_op->readdir(file, buf, filler);
                file_accessed(file);
        }
-       up(&inode->i_sem);
+       mutex_unlock(&inode->i_mutex);
 out:
        return res;
 }
@@ -287,7 +287,9 @@ asmlinkage long sys_getdents64(unsigned int fd, struct linux_dirent64 __user * d
        lastdirent = buf.previous;
        if (lastdirent) {
                typeof(lastdirent->d_off) d_off = file->f_pos;
-               __put_user(d_off, &lastdirent->d_off);
+               error = -EFAULT;
+               if (__put_user(d_off, &lastdirent->d_off))
+                       goto out_putf;
                error = count - buf.count;
        }