* @is_delayed indicates caller is delayed work and we should not
* delay further.
*/
-void ceph_check_caps(struct ceph_inode_info *ci, int is_delayed, int drop,
+void ceph_check_caps(struct ceph_inode_info *ci, int is_delayed,
struct ceph_mds_session *session)
{
struct ceph_client *client = ceph_inode_to_client(&ci->vfs_inode);
struct rb_node *p;
int tried_invalidate = 0;
int delayed = 0, sent = 0, force_requeue = 0, num;
- int op;
/* if we are unmounting, flush any unused caps immediately. */
if (mdsc->stopping)
retain |= CEPH_CAP_ANY_RD;
}
}
- retain &= ~drop;
dout(10, "check_caps %p file_wanted %s used %s retain %s issued %s\n",
inode, ceph_cap_string(file_wanted), ceph_cap_string(used),
ci->i_dirty_caps = 0;
}
- /* don't update mds wanted on drop */
- if (drop) {
- want = cap->mds_wanted;
- op = CEPH_CAP_OP_DROP;
- } else {
- op = CEPH_CAP_OP_UPDATE;
- }
-
mds = cap->mds; /* remember mds, so we don't repeat */
sent++;
/* __send_cap drops i_lock */
- __send_cap(mdsc, cap, op, used, want, retain, flushing);
+ __send_cap(mdsc, cap, CEPH_CAP_OP_UPDATE, used, want, retain,
+ flushing);
goto retry; /* retake i_lock and restart our cap scan. */
}
last ? "last" : "");
if (last && !flushsnaps)
- ceph_check_caps(ci, 0, 0, NULL);
+ ceph_check_caps(ci, 0, NULL);
else if (flushsnaps)
ceph_flush_snaps(ci);
if (wake)
spin_unlock(&inode->i_lock);
if (last) {
- ceph_check_caps(ci, 0, 0, NULL);
+ ceph_check_caps(ci, 0, NULL);
iput(inode);
} else if (last_snap) {
ceph_flush_snaps(ci);
ceph_msg_get(msg);
ceph_send_msg_mds(mdsc, msg, mds);
} else if (r == 2) {
- ceph_check_caps(ceph_inode(inode), 1, 0, session);
+ ceph_check_caps(ceph_inode(inode), 1, session);
}
break;
kfree(xattr_data);
if (check_caps)
- ceph_check_caps(ceph_inode(inode), 1, 0, NULL);
+ ceph_check_caps(ceph_inode(inode), 1, NULL);
if (inode)
iput(inode);
return;
list_del_init(&ci->i_cap_delay_list);
spin_unlock(&mdsc->cap_delay_lock);
dout(10, "check_delayed_caps on %p\n", &ci->vfs_inode);
- ceph_check_caps(ci, 1, 0, NULL);
+ ceph_check_caps(ci, 1, NULL);
}
spin_unlock(&mdsc->cap_delay_lock);
}
spin_unlock(&inode->i_lock);
if (last && ci->i_vino.snap == CEPH_NOSNAP)
- ceph_check_caps(ci, 0, 0, NULL);
+ ceph_check_caps(ci, 0, NULL);
}
/*
if ((issued & wanted) != wanted &&
(mds_wanted & wanted) != wanted &&
ceph_snap(inode) != CEPH_SNAPDIR)
- ceph_check_caps(ci, 0, 0, NULL);
+ ceph_check_caps(ci, 0, NULL);
return ceph_init_file(inode, file, fmode);
} else if (ceph_snap(inode) != CEPH_NOSNAP &&
}
spin_unlock(&inode->i_lock);
if (check)
- ceph_check_caps(ci, 0, 0, NULL);
+ ceph_check_caps(ci, 0, NULL);
}
/*
if ((size << 1) >= ci->i_max_size &&
(ci->i_reported_size << 1) < ci->i_max_size) {
spin_unlock(&inode->i_lock);
- ceph_check_caps(ci, 0, 0, NULL);
+ ceph_check_caps(ci, 0, NULL);
} else {
spin_unlock(&inode->i_lock);
}
spin_unlock(&inode->i_lock);
if (check)
- ceph_check_caps(ci, 0, 0, NULL);
+ ceph_check_caps(ci, 0, NULL);
out:
iput(inode);
}
spin_unlock(&inode->i_lock);
if (wrbuffer_refs == 0)
- ceph_check_caps(ci, 0, 0, NULL);
+ ceph_check_caps(ci, 0, NULL);
if (wake)
wake_up(&ci->i_cap_wq);
}
struct ceph_snap_context *snapc);
extern void __ceph_flush_snaps(struct ceph_inode_info *ci,
struct ceph_mds_session **psession);
-extern void ceph_check_caps(struct ceph_inode_info *ci, int delayed, int drop,
+extern void ceph_check_caps(struct ceph_inode_info *ci, int delayed,
struct ceph_mds_session *session);
extern void ceph_check_delayed_caps(struct ceph_mds_client *mdsc);
-static inline void ceph_release_caps(struct inode *inode, int mask)
-{
- ceph_check_caps(ceph_inode(inode), 1, mask, NULL);
-}
extern int ceph_encode_inode_release(void **p, struct inode *inode,
int mds, int drop, int unless);
extern int ceph_encode_dentry_release(void **p, struct dentry *dn,