Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 188643
b: refs/heads/master
c: 153c8e6
h: refs/heads/master
i:
  188641: 476d0eb
  188639: 55addc2
v: v3
  • Loading branch information
Sage Weil committed Dec 7, 2009
1 parent 8e4c9cf commit b2198e4
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 39 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b6c1d5b81ea0841ae9d3ce2cda319ab986b081cf
refs/heads/master: 153c8e6bf7ffee561e046e60b26ef6486c6fc9f2
69 changes: 34 additions & 35 deletions trunk/fs/ceph/mds_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -400,41 +400,40 @@ static void put_request_session(struct ceph_mds_request *req)
}
}

void ceph_mdsc_put_request(struct ceph_mds_request *req)
{
dout("mdsc put_request %p %d -> %d\n", req,
atomic_read(&req->r_ref), atomic_read(&req->r_ref)-1);
if (atomic_dec_and_test(&req->r_ref)) {
if (req->r_request)
ceph_msg_put(req->r_request);
if (req->r_reply) {
ceph_msg_put(req->r_reply);
destroy_reply_info(&req->r_reply_info);
}
if (req->r_inode) {
ceph_put_cap_refs(ceph_inode(req->r_inode),
CEPH_CAP_PIN);
iput(req->r_inode);
}
if (req->r_locked_dir)
ceph_put_cap_refs(ceph_inode(req->r_locked_dir),
CEPH_CAP_PIN);
if (req->r_target_inode)
iput(req->r_target_inode);
if (req->r_dentry)
dput(req->r_dentry);
if (req->r_old_dentry) {
ceph_put_cap_refs(
ceph_inode(req->r_old_dentry->d_parent->d_inode),
CEPH_CAP_PIN);
dput(req->r_old_dentry);
}
kfree(req->r_path1);
kfree(req->r_path2);
put_request_session(req);
ceph_unreserve_caps(&req->r_caps_reservation);
kfree(req);
void ceph_mdsc_release_request(struct kref *kref)
{
struct ceph_mds_request *req = container_of(kref,
struct ceph_mds_request,
r_kref);
if (req->r_request)
ceph_msg_put(req->r_request);
if (req->r_reply) {
ceph_msg_put(req->r_reply);
destroy_reply_info(&req->r_reply_info);
}
if (req->r_inode) {
ceph_put_cap_refs(ceph_inode(req->r_inode),
CEPH_CAP_PIN);
iput(req->r_inode);
}
if (req->r_locked_dir)
ceph_put_cap_refs(ceph_inode(req->r_locked_dir),
CEPH_CAP_PIN);
if (req->r_target_inode)
iput(req->r_target_inode);
if (req->r_dentry)
dput(req->r_dentry);
if (req->r_old_dentry) {
ceph_put_cap_refs(
ceph_inode(req->r_old_dentry->d_parent->d_inode),
CEPH_CAP_PIN);
dput(req->r_old_dentry);
}
kfree(req->r_path1);
kfree(req->r_path2);
put_request_session(req);
ceph_unreserve_caps(&req->r_caps_reservation);
kfree(req);
}

/*
Expand Down Expand Up @@ -1097,7 +1096,7 @@ ceph_mdsc_create_request(struct ceph_mds_client *mdsc, int op, int mode)
req->r_resend_mds = -1;
INIT_LIST_HEAD(&req->r_unsafe_dir_item);
req->r_fmode = -1;
atomic_set(&req->r_ref, 1); /* one for request_tree, one for caller */
kref_init(&req->r_kref);
INIT_LIST_HEAD(&req->r_wait);
init_completion(&req->r_completion);
init_completion(&req->r_safe_completion);
Expand Down
11 changes: 8 additions & 3 deletions trunk/fs/ceph/mds_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define _FS_CEPH_MDS_CLIENT_H

#include <linux/completion.h>
#include <linux/kref.h>
#include <linux/list.h>
#include <linux/mutex.h>
#include <linux/radix-tree.h>
Expand Down Expand Up @@ -203,7 +204,7 @@ struct ceph_mds_request {
int r_num_stale;
int r_resend_mds; /* mds to resend to next, if any*/

atomic_t r_ref;
struct kref r_kref;
struct list_head r_wait;
struct completion r_completion;
struct completion r_safe_completion;
Expand Down Expand Up @@ -306,9 +307,13 @@ extern int ceph_mdsc_do_request(struct ceph_mds_client *mdsc,
struct ceph_mds_request *req);
static inline void ceph_mdsc_get_request(struct ceph_mds_request *req)
{
atomic_inc(&req->r_ref);
kref_get(&req->r_kref);
}
extern void ceph_mdsc_release_request(struct kref *kref);
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_put_request(struct ceph_mds_request *req);

extern void ceph_mdsc_pre_umount(struct ceph_mds_client *mdsc);

Expand Down

0 comments on commit b2198e4

Please sign in to comment.