return PTR_ERR(req);
req->r_inode = igrab(inode);
req->r_dentry = dget(filp->f_dentry);
- req->r_num_caps = 1000;
/* hints to request -> mds selection code */
req->r_direct_mode = USE_AUTH_MDS;
req->r_direct_hash = frag_value(frag);
req->r_path2 = fi->last_name;
req->r_args.readdir.frag = cpu_to_le32(frag);
req->r_args.readdir.max_entries = max_entries;
+ req->r_num_caps = max_entries;
err = ceph_mdsc_do_request(mdsc, NULL, req);
if (err < 0) {
ceph_mdsc_put_request(req);
err = fill_inode(dir, &rinfo->diri, rinfo->dirfrag,
session, req->r_request_started, -1,
- &req->caps_reservation);
+ &req->r_caps_reservation);
if (err < 0)
return err;
session, req->r_request_started,
(le32_to_cpu(rinfo->head->result) == 0) ?
req->r_fmode : -1,
- &req->caps_reservation);
+ &req->r_caps_reservation);
if (err < 0) {
derr(30, "fill_inode badness\n");
goto done;
if (fill_inode(in, &rinfo->dir_in[i], NULL, session,
req->r_request_started, -1,
- &req->caps_reservation) < 0) {
+ &req->r_caps_reservation) < 0) {
dout(0, "fill_inode badness on %p\n", in);
dput(dn);
continue;
struct inode *listener)
{
req->r_tid = ++mdsc->last_tid;
- ceph_reserve_caps(&req->caps_reservation, req->r_num_caps);
+ if (req->r_num_caps)
+ ceph_reserve_caps(&req->r_caps_reservation, req->r_num_caps);
dout(30, "__register_request %p tid %lld\n", req, req->r_tid);
ceph_mdsc_get_request(req);
radix_tree_insert(&mdsc->request_tree, req->r_tid, (void *)req);
spin_unlock(&ci->i_unsafe_lock);
}
- ceph_unreserve_caps(&req->caps_reservation);
+ ceph_unreserve_caps(&req->r_caps_reservation);
}
static bool __have_session(struct ceph_mds_client *mdsc, int mds)