mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
ceph: pass the mdsc to several helpers
We will use the 'mdsc' to get the global_id in the following commits. Link: https://tracker.ceph.com/issues/61590 Signed-off-by: Xiubo Li <xiubli@redhat.com> Reviewed-by: Patrick Donnelly <pdonnell@redhat.com> Reviewed-by: Milind Changire <mchangir@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
5c5f0d2b5f
commit
197b7d792d
@ -1178,7 +1178,8 @@ void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ceph_remove_cap(struct ceph_cap *cap, bool queue_release)
|
void ceph_remove_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap,
|
||||||
|
bool queue_release)
|
||||||
{
|
{
|
||||||
struct ceph_inode_info *ci = cap->ci;
|
struct ceph_inode_info *ci = cap->ci;
|
||||||
struct ceph_fs_client *fsc;
|
struct ceph_fs_client *fsc;
|
||||||
@ -1342,6 +1343,8 @@ static void encode_cap_msg(struct ceph_msg *msg, struct cap_msg_args *arg)
|
|||||||
*/
|
*/
|
||||||
void __ceph_remove_caps(struct ceph_inode_info *ci)
|
void __ceph_remove_caps(struct ceph_inode_info *ci)
|
||||||
{
|
{
|
||||||
|
struct inode *inode = &ci->netfs.inode;
|
||||||
|
struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc;
|
||||||
struct rb_node *p;
|
struct rb_node *p;
|
||||||
|
|
||||||
/* lock i_ceph_lock, because ceph_d_revalidate(..., LOOKUP_RCU)
|
/* lock i_ceph_lock, because ceph_d_revalidate(..., LOOKUP_RCU)
|
||||||
@ -1351,7 +1354,7 @@ void __ceph_remove_caps(struct ceph_inode_info *ci)
|
|||||||
while (p) {
|
while (p) {
|
||||||
struct ceph_cap *cap = rb_entry(p, struct ceph_cap, ci_node);
|
struct ceph_cap *cap = rb_entry(p, struct ceph_cap, ci_node);
|
||||||
p = rb_next(p);
|
p = rb_next(p);
|
||||||
ceph_remove_cap(cap, true);
|
ceph_remove_cap(mdsc, cap, true);
|
||||||
}
|
}
|
||||||
spin_unlock(&ci->i_ceph_lock);
|
spin_unlock(&ci->i_ceph_lock);
|
||||||
}
|
}
|
||||||
@ -3999,7 +4002,7 @@ retry:
|
|||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
|
||||||
if (target < 0) {
|
if (target < 0) {
|
||||||
ceph_remove_cap(cap, false);
|
ceph_remove_cap(mdsc, cap, false);
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4034,7 +4037,7 @@ retry:
|
|||||||
change_auth_cap_ses(ci, tcap->session);
|
change_auth_cap_ses(ci, tcap->session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ceph_remove_cap(cap, false);
|
ceph_remove_cap(mdsc, cap, false);
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
} else if (tsession) {
|
} else if (tsession) {
|
||||||
/* add placeholder for the export tagert */
|
/* add placeholder for the export tagert */
|
||||||
@ -4051,7 +4054,7 @@ retry:
|
|||||||
spin_unlock(&mdsc->cap_dirty_lock);
|
spin_unlock(&mdsc->cap_dirty_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
ceph_remove_cap(cap, false);
|
ceph_remove_cap(mdsc, cap, false);
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4164,7 +4167,7 @@ retry:
|
|||||||
ocap->mseq, mds, le32_to_cpu(ph->seq),
|
ocap->mseq, mds, le32_to_cpu(ph->seq),
|
||||||
le32_to_cpu(ph->mseq));
|
le32_to_cpu(ph->mseq));
|
||||||
}
|
}
|
||||||
ceph_remove_cap(ocap, (ph->flags & CEPH_CAP_FLAG_RELEASE));
|
ceph_remove_cap(mdsc, ocap, (ph->flags & CEPH_CAP_FLAG_RELEASE));
|
||||||
}
|
}
|
||||||
|
|
||||||
*old_issued = issued;
|
*old_issued = issued;
|
||||||
|
@ -81,7 +81,7 @@ static int mdsc_show(struct seq_file *s, void *p)
|
|||||||
if (req->r_inode) {
|
if (req->r_inode) {
|
||||||
seq_printf(s, " #%llx", ceph_ino(req->r_inode));
|
seq_printf(s, " #%llx", ceph_ino(req->r_inode));
|
||||||
} else if (req->r_dentry) {
|
} else if (req->r_dentry) {
|
||||||
path = ceph_mdsc_build_path(req->r_dentry, &pathlen,
|
path = ceph_mdsc_build_path(mdsc, req->r_dentry, &pathlen,
|
||||||
&pathbase, 0);
|
&pathbase, 0);
|
||||||
if (IS_ERR(path))
|
if (IS_ERR(path))
|
||||||
path = NULL;
|
path = NULL;
|
||||||
@ -100,7 +100,7 @@ static int mdsc_show(struct seq_file *s, void *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (req->r_old_dentry) {
|
if (req->r_old_dentry) {
|
||||||
path = ceph_mdsc_build_path(req->r_old_dentry, &pathlen,
|
path = ceph_mdsc_build_path(mdsc, req->r_old_dentry, &pathlen,
|
||||||
&pathbase, 0);
|
&pathbase, 0);
|
||||||
if (IS_ERR(path))
|
if (IS_ERR(path))
|
||||||
path = NULL;
|
path = NULL;
|
||||||
|
@ -1226,7 +1226,7 @@ static void ceph_async_unlink_cb(struct ceph_mds_client *mdsc,
|
|||||||
if (result) {
|
if (result) {
|
||||||
int pathlen = 0;
|
int pathlen = 0;
|
||||||
u64 base = 0;
|
u64 base = 0;
|
||||||
char *path = ceph_mdsc_build_path(dentry, &pathlen,
|
char *path = ceph_mdsc_build_path(mdsc, dentry, &pathlen,
|
||||||
&base, 0);
|
&base, 0);
|
||||||
|
|
||||||
/* mark error on parent + clear complete */
|
/* mark error on parent + clear complete */
|
||||||
|
@ -574,7 +574,7 @@ static void ceph_async_create_cb(struct ceph_mds_client *mdsc,
|
|||||||
if (result) {
|
if (result) {
|
||||||
int pathlen = 0;
|
int pathlen = 0;
|
||||||
u64 base = 0;
|
u64 base = 0;
|
||||||
char *path = ceph_mdsc_build_path(req->r_dentry, &pathlen,
|
char *path = ceph_mdsc_build_path(mdsc, req->r_dentry, &pathlen,
|
||||||
&base, 0);
|
&base, 0);
|
||||||
|
|
||||||
pr_warn("async create failure path=(%llx)%s result=%d!\n",
|
pr_warn("async create failure path=(%llx)%s result=%d!\n",
|
||||||
|
@ -2126,6 +2126,7 @@ out:
|
|||||||
*/
|
*/
|
||||||
static int trim_caps_cb(struct inode *inode, int mds, void *arg)
|
static int trim_caps_cb(struct inode *inode, int mds, void *arg)
|
||||||
{
|
{
|
||||||
|
struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
|
||||||
int *remaining = arg;
|
int *remaining = arg;
|
||||||
struct ceph_inode_info *ci = ceph_inode(inode);
|
struct ceph_inode_info *ci = ceph_inode(inode);
|
||||||
int used, wanted, oissued, mine;
|
int used, wanted, oissued, mine;
|
||||||
@ -2173,7 +2174,7 @@ static int trim_caps_cb(struct inode *inode, int mds, void *arg)
|
|||||||
|
|
||||||
if (oissued) {
|
if (oissued) {
|
||||||
/* we aren't the only cap.. just remove us */
|
/* we aren't the only cap.. just remove us */
|
||||||
ceph_remove_cap(cap, true);
|
ceph_remove_cap(mdsc, cap, true);
|
||||||
(*remaining)--;
|
(*remaining)--;
|
||||||
} else {
|
} else {
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
@ -2588,6 +2589,7 @@ static u8 *get_fscrypt_altname(const struct ceph_mds_request *req, u32 *plen)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* ceph_mdsc_build_path - build a path string to a given dentry
|
* ceph_mdsc_build_path - build a path string to a given dentry
|
||||||
|
* @mdsc: mds client
|
||||||
* @dentry: dentry to which path should be built
|
* @dentry: dentry to which path should be built
|
||||||
* @plen: returned length of string
|
* @plen: returned length of string
|
||||||
* @pbase: returned base inode number
|
* @pbase: returned base inode number
|
||||||
@ -2607,8 +2609,8 @@ static u8 *get_fscrypt_altname(const struct ceph_mds_request *req, u32 *plen)
|
|||||||
* Encode hidden .snap dirs as a double /, i.e.
|
* Encode hidden .snap dirs as a double /, i.e.
|
||||||
* foo/.snap/bar -> foo//bar
|
* foo/.snap/bar -> foo//bar
|
||||||
*/
|
*/
|
||||||
char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *pbase,
|
char *ceph_mdsc_build_path(struct ceph_mds_client *mdsc, struct dentry *dentry,
|
||||||
int for_wire)
|
int *plen, u64 *pbase, int for_wire)
|
||||||
{
|
{
|
||||||
struct dentry *cur;
|
struct dentry *cur;
|
||||||
struct inode *inode;
|
struct inode *inode;
|
||||||
@ -2726,9 +2728,9 @@ retry:
|
|||||||
return path + pos;
|
return path + pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int build_dentry_path(struct dentry *dentry, struct inode *dir,
|
static int build_dentry_path(struct ceph_mds_client *mdsc, struct dentry *dentry,
|
||||||
const char **ppath, int *ppathlen, u64 *pino,
|
struct inode *dir, const char **ppath, int *ppathlen,
|
||||||
bool *pfreepath, bool parent_locked)
|
u64 *pino, bool *pfreepath, bool parent_locked)
|
||||||
{
|
{
|
||||||
char *path;
|
char *path;
|
||||||
|
|
||||||
@ -2744,7 +2746,7 @@ static int build_dentry_path(struct dentry *dentry, struct inode *dir,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
path = ceph_mdsc_build_path(dentry, ppathlen, pino, 1);
|
path = ceph_mdsc_build_path(mdsc, dentry, ppathlen, pino, 1);
|
||||||
if (IS_ERR(path))
|
if (IS_ERR(path))
|
||||||
return PTR_ERR(path);
|
return PTR_ERR(path);
|
||||||
*ppath = path;
|
*ppath = path;
|
||||||
@ -2756,6 +2758,7 @@ static int build_inode_path(struct inode *inode,
|
|||||||
const char **ppath, int *ppathlen, u64 *pino,
|
const char **ppath, int *ppathlen, u64 *pino,
|
||||||
bool *pfreepath)
|
bool *pfreepath)
|
||||||
{
|
{
|
||||||
|
struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
char *path;
|
char *path;
|
||||||
|
|
||||||
@ -2765,7 +2768,7 @@ static int build_inode_path(struct inode *inode,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
dentry = d_find_alias(inode);
|
dentry = d_find_alias(inode);
|
||||||
path = ceph_mdsc_build_path(dentry, ppathlen, pino, 1);
|
path = ceph_mdsc_build_path(mdsc, dentry, ppathlen, pino, 1);
|
||||||
dput(dentry);
|
dput(dentry);
|
||||||
if (IS_ERR(path))
|
if (IS_ERR(path))
|
||||||
return PTR_ERR(path);
|
return PTR_ERR(path);
|
||||||
@ -2778,10 +2781,11 @@ static int build_inode_path(struct inode *inode,
|
|||||||
* request arguments may be specified via an inode *, a dentry *, or
|
* request arguments may be specified via an inode *, a dentry *, or
|
||||||
* an explicit ino+path.
|
* an explicit ino+path.
|
||||||
*/
|
*/
|
||||||
static int set_request_path_attr(struct inode *rinode, struct dentry *rdentry,
|
static int set_request_path_attr(struct ceph_mds_client *mdsc, struct inode *rinode,
|
||||||
struct inode *rdiri, const char *rpath,
|
struct dentry *rdentry, struct inode *rdiri,
|
||||||
u64 rino, const char **ppath, int *pathlen,
|
const char *rpath, u64 rino, const char **ppath,
|
||||||
u64 *ino, bool *freepath, bool parent_locked)
|
int *pathlen, u64 *ino, bool *freepath,
|
||||||
|
bool parent_locked)
|
||||||
{
|
{
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
@ -2790,7 +2794,7 @@ static int set_request_path_attr(struct inode *rinode, struct dentry *rdentry,
|
|||||||
dout(" inode %p %llx.%llx\n", rinode, ceph_ino(rinode),
|
dout(" inode %p %llx.%llx\n", rinode, ceph_ino(rinode),
|
||||||
ceph_snap(rinode));
|
ceph_snap(rinode));
|
||||||
} else if (rdentry) {
|
} else if (rdentry) {
|
||||||
r = build_dentry_path(rdentry, rdiri, ppath, pathlen, ino,
|
r = build_dentry_path(mdsc, rdentry, rdiri, ppath, pathlen, ino,
|
||||||
freepath, parent_locked);
|
freepath, parent_locked);
|
||||||
dout(" dentry %p %llx/%.*s\n", rdentry, *ino, *pathlen,
|
dout(" dentry %p %llx/%.*s\n", rdentry, *ino, *pathlen,
|
||||||
*ppath);
|
*ppath);
|
||||||
@ -2877,7 +2881,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_session *session,
|
|||||||
bool old_version = !test_bit(CEPHFS_FEATURE_32BITS_RETRY_FWD,
|
bool old_version = !test_bit(CEPHFS_FEATURE_32BITS_RETRY_FWD,
|
||||||
&session->s_features);
|
&session->s_features);
|
||||||
|
|
||||||
ret = set_request_path_attr(req->r_inode, req->r_dentry,
|
ret = set_request_path_attr(mdsc, req->r_inode, req->r_dentry,
|
||||||
req->r_parent, req->r_path1, req->r_ino1.ino,
|
req->r_parent, req->r_path1, req->r_ino1.ino,
|
||||||
&path1, &pathlen1, &ino1, &freepath1,
|
&path1, &pathlen1, &ino1, &freepath1,
|
||||||
test_bit(CEPH_MDS_R_PARENT_LOCKED,
|
test_bit(CEPH_MDS_R_PARENT_LOCKED,
|
||||||
@ -2891,7 +2895,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_session *session,
|
|||||||
if (req->r_old_dentry &&
|
if (req->r_old_dentry &&
|
||||||
!(req->r_old_dentry->d_flags & DCACHE_DISCONNECTED))
|
!(req->r_old_dentry->d_flags & DCACHE_DISCONNECTED))
|
||||||
old_dentry = req->r_old_dentry;
|
old_dentry = req->r_old_dentry;
|
||||||
ret = set_request_path_attr(NULL, old_dentry,
|
ret = set_request_path_attr(mdsc, NULL, old_dentry,
|
||||||
req->r_old_dentry_dir,
|
req->r_old_dentry_dir,
|
||||||
req->r_path2, req->r_ino2.ino,
|
req->r_path2, req->r_ino2.ino,
|
||||||
&path2, &pathlen2, &ino2, &freepath2, true);
|
&path2, &pathlen2, &ino2, &freepath2, true);
|
||||||
@ -4290,6 +4294,7 @@ out_unlock:
|
|||||||
*/
|
*/
|
||||||
static int reconnect_caps_cb(struct inode *inode, int mds, void *arg)
|
static int reconnect_caps_cb(struct inode *inode, int mds, void *arg)
|
||||||
{
|
{
|
||||||
|
struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb);
|
||||||
union {
|
union {
|
||||||
struct ceph_mds_cap_reconnect v2;
|
struct ceph_mds_cap_reconnect v2;
|
||||||
struct ceph_mds_cap_reconnect_v1 v1;
|
struct ceph_mds_cap_reconnect_v1 v1;
|
||||||
@ -4307,7 +4312,7 @@ static int reconnect_caps_cb(struct inode *inode, int mds, void *arg)
|
|||||||
dentry = d_find_primary(inode);
|
dentry = d_find_primary(inode);
|
||||||
if (dentry) {
|
if (dentry) {
|
||||||
/* set pathbase to parent dir when msg_version >= 2 */
|
/* set pathbase to parent dir when msg_version >= 2 */
|
||||||
path = ceph_mdsc_build_path(dentry, &pathlen, &pathbase,
|
path = ceph_mdsc_build_path(mdsc, dentry, &pathlen, &pathbase,
|
||||||
recon_state->msg_version >= 2);
|
recon_state->msg_version >= 2);
|
||||||
dput(dentry);
|
dput(dentry);
|
||||||
if (IS_ERR(path)) {
|
if (IS_ERR(path)) {
|
||||||
@ -5662,7 +5667,7 @@ void ceph_mdsc_handle_mdsmap(struct ceph_mds_client *mdsc, struct ceph_msg *msg)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
newmap = ceph_mdsmap_decode(&p, end, ceph_msgr2(mdsc->fsc->client));
|
newmap = ceph_mdsmap_decode(mdsc, &p, end, ceph_msgr2(mdsc->fsc->client));
|
||||||
if (IS_ERR(newmap)) {
|
if (IS_ERR(newmap)) {
|
||||||
err = PTR_ERR(newmap);
|
err = PTR_ERR(newmap);
|
||||||
goto bad_unlock;
|
goto bad_unlock;
|
||||||
|
@ -581,7 +581,8 @@ static inline void ceph_mdsc_free_path(char *path, int len)
|
|||||||
__putname(path - (PATH_MAX - 1 - len));
|
__putname(path - (PATH_MAX - 1 - len));
|
||||||
}
|
}
|
||||||
|
|
||||||
extern char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *base,
|
extern char *ceph_mdsc_build_path(struct ceph_mds_client *mdsc,
|
||||||
|
struct dentry *dentry, int *plen, u64 *base,
|
||||||
int for_wire);
|
int for_wire);
|
||||||
|
|
||||||
extern void __ceph_mdsc_drop_dentry_lease(struct dentry *dentry);
|
extern void __ceph_mdsc_drop_dentry_lease(struct dentry *dentry);
|
||||||
|
@ -114,7 +114,8 @@ bad:
|
|||||||
* Ignore any fields we don't care about (there are quite a few of
|
* Ignore any fields we don't care about (there are quite a few of
|
||||||
* them).
|
* them).
|
||||||
*/
|
*/
|
||||||
struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end, bool msgr2)
|
struct ceph_mdsmap *ceph_mdsmap_decode(struct ceph_mds_client *mdsc, void **p,
|
||||||
|
void *end, bool msgr2)
|
||||||
{
|
{
|
||||||
struct ceph_mdsmap *m;
|
struct ceph_mdsmap *m;
|
||||||
const void *start = *p;
|
const void *start = *p;
|
||||||
|
@ -329,7 +329,8 @@ static int cmpu64_rev(const void *a, const void *b)
|
|||||||
/*
|
/*
|
||||||
* build the snap context for a given realm.
|
* build the snap context for a given realm.
|
||||||
*/
|
*/
|
||||||
static int build_snap_context(struct ceph_snap_realm *realm,
|
static int build_snap_context(struct ceph_mds_client *mdsc,
|
||||||
|
struct ceph_snap_realm *realm,
|
||||||
struct list_head *realm_queue,
|
struct list_head *realm_queue,
|
||||||
struct list_head *dirty_realms)
|
struct list_head *dirty_realms)
|
||||||
{
|
{
|
||||||
@ -425,7 +426,8 @@ fail:
|
|||||||
/*
|
/*
|
||||||
* rebuild snap context for the given realm and all of its children.
|
* rebuild snap context for the given realm and all of its children.
|
||||||
*/
|
*/
|
||||||
static void rebuild_snap_realms(struct ceph_snap_realm *realm,
|
static void rebuild_snap_realms(struct ceph_mds_client *mdsc,
|
||||||
|
struct ceph_snap_realm *realm,
|
||||||
struct list_head *dirty_realms)
|
struct list_head *dirty_realms)
|
||||||
{
|
{
|
||||||
LIST_HEAD(realm_queue);
|
LIST_HEAD(realm_queue);
|
||||||
@ -451,7 +453,8 @@ static void rebuild_snap_realms(struct ceph_snap_realm *realm,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
last = build_snap_context(_realm, &realm_queue, dirty_realms);
|
last = build_snap_context(mdsc, _realm, &realm_queue,
|
||||||
|
dirty_realms);
|
||||||
dout("%s %llx %p, %s\n", __func__, _realm->ino, _realm,
|
dout("%s %llx %p, %s\n", __func__, _realm->ino, _realm,
|
||||||
last > 0 ? "is deferred" : !last ? "succeeded" : "failed");
|
last > 0 ? "is deferred" : !last ? "succeeded" : "failed");
|
||||||
|
|
||||||
@ -708,7 +711,8 @@ int __ceph_finish_cap_snap(struct ceph_inode_info *ci,
|
|||||||
* Queue cap_snaps for snap writeback for this realm and its children.
|
* Queue cap_snaps for snap writeback for this realm and its children.
|
||||||
* Called under snap_rwsem, so realm topology won't change.
|
* Called under snap_rwsem, so realm topology won't change.
|
||||||
*/
|
*/
|
||||||
static void queue_realm_cap_snaps(struct ceph_snap_realm *realm)
|
static void queue_realm_cap_snaps(struct ceph_mds_client *mdsc,
|
||||||
|
struct ceph_snap_realm *realm)
|
||||||
{
|
{
|
||||||
struct ceph_inode_info *ci;
|
struct ceph_inode_info *ci;
|
||||||
struct inode *lastinode = NULL;
|
struct inode *lastinode = NULL;
|
||||||
@ -855,7 +859,7 @@ more:
|
|||||||
|
|
||||||
/* rebuild_snapcs when we reach the _end_ (root) of the trace */
|
/* rebuild_snapcs when we reach the _end_ (root) of the trace */
|
||||||
if (realm_to_rebuild && p >= e)
|
if (realm_to_rebuild && p >= e)
|
||||||
rebuild_snap_realms(realm_to_rebuild, &dirty_realms);
|
rebuild_snap_realms(mdsc, realm_to_rebuild, &dirty_realms);
|
||||||
|
|
||||||
if (!first_realm)
|
if (!first_realm)
|
||||||
first_realm = realm;
|
first_realm = realm;
|
||||||
@ -873,7 +877,7 @@ more:
|
|||||||
realm = list_first_entry(&dirty_realms, struct ceph_snap_realm,
|
realm = list_first_entry(&dirty_realms, struct ceph_snap_realm,
|
||||||
dirty_item);
|
dirty_item);
|
||||||
list_del_init(&realm->dirty_item);
|
list_del_init(&realm->dirty_item);
|
||||||
queue_realm_cap_snaps(realm);
|
queue_realm_cap_snaps(mdsc, realm);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (realm_ret)
|
if (realm_ret)
|
||||||
|
@ -1223,7 +1223,8 @@ extern void ceph_add_cap(struct inode *inode,
|
|||||||
unsigned cap, unsigned seq, u64 realmino, int flags,
|
unsigned cap, unsigned seq, u64 realmino, int flags,
|
||||||
struct ceph_cap **new_cap);
|
struct ceph_cap **new_cap);
|
||||||
extern void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release);
|
extern void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release);
|
||||||
extern void ceph_remove_cap(struct ceph_cap *cap, bool queue_release);
|
extern void ceph_remove_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap,
|
||||||
|
bool queue_release);
|
||||||
extern void __ceph_remove_caps(struct ceph_inode_info *ci);
|
extern void __ceph_remove_caps(struct ceph_inode_info *ci);
|
||||||
extern void ceph_put_cap(struct ceph_mds_client *mdsc,
|
extern void ceph_put_cap(struct ceph_mds_client *mdsc,
|
||||||
struct ceph_cap *cap);
|
struct ceph_cap *cap);
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
#include <linux/bug.h>
|
#include <linux/bug.h>
|
||||||
#include <linux/ceph/types.h>
|
#include <linux/ceph/types.h>
|
||||||
|
|
||||||
|
struct ceph_mds_client;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* mds map - describe servers in the mds cluster.
|
* mds map - describe servers in the mds cluster.
|
||||||
*
|
*
|
||||||
@ -65,7 +67,8 @@ static inline bool ceph_mdsmap_is_laggy(struct ceph_mdsmap *m, int w)
|
|||||||
}
|
}
|
||||||
|
|
||||||
extern int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m);
|
extern int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m);
|
||||||
struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end, bool msgr2);
|
struct ceph_mdsmap *ceph_mdsmap_decode(struct ceph_mds_client *mdsc, void **p,
|
||||||
|
void *end, bool msgr2);
|
||||||
extern void ceph_mdsmap_destroy(struct ceph_mdsmap *m);
|
extern void ceph_mdsmap_destroy(struct ceph_mdsmap *m);
|
||||||
extern bool ceph_mdsmap_is_cluster_available(struct ceph_mdsmap *m);
|
extern bool ceph_mdsmap_is_cluster_available(struct ceph_mdsmap *m);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user