ceph: make iterate_sessions a global symbol
Signed-off-by: Xiubo Li <xiubli@redhat.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
Родитель
fba97e8025
Коммит
59b312f362
|
@ -4226,33 +4226,9 @@ static void flush_dirty_session_caps(struct ceph_mds_session *s)
|
|||
dout("flush_dirty_caps done\n");
|
||||
}
|
||||
|
||||
static void iterate_sessions(struct ceph_mds_client *mdsc,
|
||||
void (*cb)(struct ceph_mds_session *))
|
||||
{
|
||||
int mds;
|
||||
|
||||
mutex_lock(&mdsc->mutex);
|
||||
for (mds = 0; mds < mdsc->max_sessions; ++mds) {
|
||||
struct ceph_mds_session *s;
|
||||
|
||||
if (!mdsc->sessions[mds])
|
||||
continue;
|
||||
|
||||
s = ceph_get_mds_session(mdsc->sessions[mds]);
|
||||
if (!s)
|
||||
continue;
|
||||
|
||||
mutex_unlock(&mdsc->mutex);
|
||||
cb(s);
|
||||
ceph_put_mds_session(s);
|
||||
mutex_lock(&mdsc->mutex);
|
||||
}
|
||||
mutex_unlock(&mdsc->mutex);
|
||||
}
|
||||
|
||||
void ceph_flush_dirty_caps(struct ceph_mds_client *mdsc)
|
||||
{
|
||||
iterate_sessions(mdsc, flush_dirty_session_caps);
|
||||
ceph_mdsc_iterate_sessions(mdsc, flush_dirty_session_caps, true);
|
||||
}
|
||||
|
||||
void __ceph_touch_fmode(struct ceph_inode_info *ci,
|
||||
|
|
|
@ -811,6 +811,33 @@ static void put_request_session(struct ceph_mds_request *req)
|
|||
}
|
||||
}
|
||||
|
||||
void ceph_mdsc_iterate_sessions(struct ceph_mds_client *mdsc,
|
||||
void (*cb)(struct ceph_mds_session *),
|
||||
bool check_state)
|
||||
{
|
||||
int mds;
|
||||
|
||||
mutex_lock(&mdsc->mutex);
|
||||
for (mds = 0; mds < mdsc->max_sessions; ++mds) {
|
||||
struct ceph_mds_session *s;
|
||||
|
||||
s = __ceph_lookup_mds_session(mdsc, mds);
|
||||
if (!s)
|
||||
continue;
|
||||
|
||||
if (check_state && !check_session_state(s)) {
|
||||
ceph_put_mds_session(s);
|
||||
continue;
|
||||
}
|
||||
|
||||
mutex_unlock(&mdsc->mutex);
|
||||
cb(s);
|
||||
ceph_put_mds_session(s);
|
||||
mutex_lock(&mdsc->mutex);
|
||||
}
|
||||
mutex_unlock(&mdsc->mutex);
|
||||
}
|
||||
|
||||
void ceph_mdsc_release_request(struct kref *kref)
|
||||
{
|
||||
struct ceph_mds_request *req = container_of(kref,
|
||||
|
@ -4411,24 +4438,12 @@ void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session,
|
|||
}
|
||||
|
||||
/*
|
||||
* lock unlock sessions, to wait ongoing session activities
|
||||
* lock unlock the session, to wait ongoing session activities
|
||||
*/
|
||||
static void lock_unlock_sessions(struct ceph_mds_client *mdsc)
|
||||
static void lock_unlock_session(struct ceph_mds_session *s)
|
||||
{
|
||||
int i;
|
||||
|
||||
mutex_lock(&mdsc->mutex);
|
||||
for (i = 0; i < mdsc->max_sessions; i++) {
|
||||
struct ceph_mds_session *s = __ceph_lookup_mds_session(mdsc, i);
|
||||
if (!s)
|
||||
continue;
|
||||
mutex_unlock(&mdsc->mutex);
|
||||
mutex_lock(&s->s_mutex);
|
||||
mutex_unlock(&s->s_mutex);
|
||||
ceph_put_mds_session(s);
|
||||
mutex_lock(&mdsc->mutex);
|
||||
}
|
||||
mutex_unlock(&mdsc->mutex);
|
||||
mutex_lock(&s->s_mutex);
|
||||
mutex_unlock(&s->s_mutex);
|
||||
}
|
||||
|
||||
static void maybe_recover_session(struct ceph_mds_client *mdsc)
|
||||
|
@ -4687,7 +4702,7 @@ void ceph_mdsc_pre_umount(struct ceph_mds_client *mdsc)
|
|||
dout("pre_umount\n");
|
||||
mdsc->stopping = 1;
|
||||
|
||||
lock_unlock_sessions(mdsc);
|
||||
ceph_mdsc_iterate_sessions(mdsc, lock_unlock_session, false);
|
||||
ceph_flush_dirty_caps(mdsc);
|
||||
wait_requests(mdsc);
|
||||
|
||||
|
|
|
@ -522,6 +522,9 @@ static inline void ceph_mdsc_put_request(struct ceph_mds_request *req)
|
|||
kref_put(&req->r_kref, ceph_mdsc_release_request);
|
||||
}
|
||||
|
||||
extern void ceph_mdsc_iterate_sessions(struct ceph_mds_client *mdsc,
|
||||
void (*cb)(struct ceph_mds_session *),
|
||||
bool check_state);
|
||||
extern struct ceph_msg *ceph_create_session_msg(u32 op, u64 seq);
|
||||
extern void __ceph_queue_cap_release(struct ceph_mds_session *session,
|
||||
struct ceph_cap *cap);
|
||||
|
|
Загрузка…
Ссылка в новой задаче