mqueue doesn't need make_bad_inode()
[safe/jmp/linux-2.6] / fs / ceph / osd_client.h
index 8d533d9..ce77698 100644 (file)
@@ -31,18 +31,25 @@ struct ceph_osd {
        struct rb_node o_node;
        struct ceph_connection o_con;
        struct list_head o_requests;
+       struct list_head o_osd_lru;
        struct ceph_authorizer *o_authorizer;
        void *o_authorizer_buf, *o_authorizer_reply_buf;
        size_t o_authorizer_buf_len, o_authorizer_reply_buf_len;
+       unsigned long lru_ttl;
+       int o_marked_for_keepalive;
+       struct list_head o_keepalive_item;
 };
 
 /* an in-flight request */
 struct ceph_osd_request {
        u64             r_tid;              /* unique for this client */
        struct rb_node  r_node;
+       struct list_head r_req_lru_item;
        struct list_head r_osd_item;
        struct ceph_osd *r_osd;
        struct ceph_pg   r_pgid;
+       int              r_pg_osds[CEPH_PG_MAX_SIZE];
+       int              r_num_pg_osds;
 
        struct ceph_connection *r_con_filling_msg;
 
@@ -51,7 +58,6 @@ struct ceph_osd_request {
        int               r_flags;     /* any additional flags for the osd */
        u32               r_sent;      /* >0 if r_request is sending/sent */
        int               r_got_reply;
-       int               r_num_prealloc_reply;
 
        struct ceph_osd_client *r_osdc;
        struct kref       r_kref;
@@ -62,11 +68,10 @@ struct ceph_osd_request {
        struct list_head  r_unsafe_item;
 
        struct inode *r_inode;                /* for use by callbacks */
-       struct writeback_control *r_wbc;      /* ditto */
 
        char              r_oid[40];          /* object name */
        int               r_oid_len;
-       unsigned long     r_timeout_stamp;
+       unsigned long     r_stamp;            /* send OR check time */
        bool              r_resend;           /* msg send failed, needs retry */
 
        struct ceph_file_layout r_file_layout;
@@ -75,9 +80,6 @@ struct ceph_osd_request {
        struct page     **r_pages;            /* pages for data payload */
        int               r_pages_from_pool;
        int               r_own_pages;        /* if true, i own page list */
-
-       struct ceph_msg   *replies[2];
-       int               cur_reply;
 };
 
 struct ceph_osd_client {
@@ -90,11 +92,14 @@ struct ceph_osd_client {
 
        struct mutex           request_mutex;
        struct rb_root         osds;          /* osds */
+       struct list_head       osd_lru;       /* idle osds */
        u64                    timeout_tid;   /* tid of timeout triggering rq */
        u64                    last_tid;      /* tid of last request */
        struct rb_root         requests;      /* pending requests */
+       struct list_head       req_lru;       /* pending requests lru */
        int                    num_requests;
        struct delayed_work    timeout_work;
+       struct delayed_work    osds_timeout_work;
 #ifdef CONFIG_DEBUG_FS
        struct dentry          *debugfs_file;
 #endif
@@ -102,6 +107,7 @@ struct ceph_osd_client {
        mempool_t              *req_mempool;
 
        struct ceph_msgpool     msgpool_op;
+       struct ceph_msgpool     msgpool_op_reply;
 };
 
 extern int ceph_osdc_init(struct ceph_osd_client *osdc,