char string0[MAX_OBJECTNAME_LEN+200], *tmp;
int len, curroff, total, str_len = 0;
int err, flag = cachemiss ? 0 : LOOKUP_ATOMIC;
- struct nameidata base;
+ struct nameidata base = { };
struct dentry *dentry = NULL;
struct inode *inode = NULL;
struct vfsmount *mnt = NULL;
struct linux_dirent64 * dirent, d;
struct getdents_callback64 * buf = (struct getdents_callback64 *) __buf;
int reclen = ROUND_UP64(NAME_OFFSET(dirent) + namlen + 1);
+ int err;
buf->error = -EINVAL; /* only used if we fail.. */
if (reclen > buf->count)
dirent = buf->previous;
if (dirent) {
d.d_off = offset;
- copy_to_user(&dirent->d_off, &d.d_off, sizeof(d.d_off));
+ err = copy_to_user(&dirent->d_off, &d.d_off, sizeof(d.d_off));
+ BUG_ON(err);
}
dirent = buf->current_dir;
buf->previous = dirent;
d.d_ino = ino;
d.d_reclen = reclen;
d.d_type = d_type;
- copy_to_user(dirent, &d, NAME_OFFSET(&d));
- copy_to_user(dirent->d_name, name, namlen);
- put_user(0, dirent->d_name + namlen);
+ err = copy_to_user(dirent, &d, NAME_OFFSET(&d));
+ BUG_ON(err);
+ err = copy_to_user(dirent->d_name, name, namlen);
+ BUG_ON(err);
+ err = put_user(0, dirent->d_name + namlen);
+ BUG_ON(err);
dirent = (void *)dirent + reclen;
buf->current_dir = dirent;
buf->count -= reclen;
oldmm = get_fs(); set_fs(KERNEL_DS);
set_fs(KERNEL_DS);
- total = vfs_readdir(&req->in_file, filldir64, &buf);
+ total = vfs_readdir(req->in_file, filldir64, &buf);
set_fs(oldmm);
if (buf.previous)
}
if (!total) {
kfree(dirp0);
- req->in_file.f_pos = 0;
+ req->in_file->f_pos = 0;
add_req_to_workqueue(req);
return;
}