osd_client.h revision a40c4f10e3fb96030358e49abd010c1f08446fa3
1f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil#ifndef _FS_CEPH_OSD_CLIENT_H 2f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil#define _FS_CEPH_OSD_CLIENT_H 3f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 4f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil#include <linux/completion.h> 5415e49a9c4faf1a1480b1497da2037608e5aa2c5Sage Weil#include <linux/kref.h> 6f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil#include <linux/mempool.h> 7f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil#include <linux/rbtree.h> 8f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 9f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil#include "types.h" 10f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil#include "osdmap.h" 11f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil#include "messenger.h" 12f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 13f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilstruct ceph_msg; 14f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilstruct ceph_snap_context; 15f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilstruct ceph_osd_request; 16f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilstruct ceph_osd_client; 174e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weilstruct ceph_authorizer; 1868b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadehstruct ceph_pagelist; 19f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 20f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil/* 21f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil * completion callback for async writepages 22f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil */ 23f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weiltypedef void (*ceph_osdc_callback_t)(struct ceph_osd_request *, 24f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_msg *); 25f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 26f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil/* a given osd we're communicating with */ 27f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilstruct ceph_osd { 28f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil atomic_t o_ref; 29f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_osd_client *o_osdc; 30f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil int o_osd; 31f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil int o_incarnation; 32f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct rb_node o_node; 33f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_connection o_con; 34f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct list_head o_requests; 35a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct list_head o_linger_requests; 36f5a2041bd96c9f05ff10172b9c814c14f247084eYehuda Sadeh struct list_head o_osd_lru; 374e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil struct ceph_authorizer *o_authorizer; 384e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil void *o_authorizer_buf, *o_authorizer_reply_buf; 394e7a5dcd1bbab6560fbc8ada29a840e7a20ed7bcSage Weil size_t o_authorizer_buf_len, o_authorizer_reply_buf_len; 40f5a2041bd96c9f05ff10172b9c814c14f247084eYehuda Sadeh unsigned long lru_ttl; 41422d2cb8f9afadba1ecd3614f658b6daaaa480fbYehuda Sadeh int o_marked_for_keepalive; 42422d2cb8f9afadba1ecd3614f658b6daaaa480fbYehuda Sadeh struct list_head o_keepalive_item; 43f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil}; 44f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 45f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil/* an in-flight request */ 46f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilstruct ceph_osd_request { 47f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil u64 r_tid; /* unique for this client */ 48f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct rb_node r_node; 49422d2cb8f9afadba1ecd3614f658b6daaaa480fbYehuda Sadeh struct list_head r_req_lru_item; 50f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct list_head r_osd_item; 51a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct list_head r_linger_item; 52a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct list_head r_linger_osd; 53f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_osd *r_osd; 547740a42f816790583bd8a9079337772d511af3a3Sage Weil struct ceph_pg r_pgid; 55d85b705663905b3dae30007f824355bdcfcf3f00Sage Weil int r_pg_osds[CEPH_PG_MAX_SIZE]; 56d85b705663905b3dae30007f824355bdcfcf3f00Sage Weil int r_num_pg_osds; 57f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 580d59ab81c3d3adf466c3fd37d7fb6d46b05d1fd4Yehuda Sadeh struct ceph_connection *r_con_filling_msg; 59350b1c32ea58d29e25d63fc25e92dd48f9339546Sage Weil 60f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_msg *r_request, *r_reply; 61f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil int r_result; 62f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil int r_flags; /* any additional flags for the osd */ 63f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil u32 r_sent; /* >0 if r_request is sending/sent */ 64350b1c32ea58d29e25d63fc25e92dd48f9339546Sage Weil int r_got_reply; 65a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh int r_linger; 66f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 67f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_osd_client *r_osdc; 68415e49a9c4faf1a1480b1497da2037608e5aa2c5Sage Weil struct kref r_kref; 69f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil bool r_mempool; 70f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct completion r_completion, r_safe_completion; 71f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil ceph_osdc_callback_t r_callback, r_safe_callback; 72f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_eversion r_reassert_version; 73f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct list_head r_unsafe_item; 74f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 75f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct inode *r_inode; /* for use by callbacks */ 763d14c5d2b6e15c21d8e5467dc62d33127c23a644Yehuda Sadeh void *r_priv; /* ditto */ 77f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 78f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil char r_oid[40]; /* object name */ 79f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil int r_oid_len; 803dd72fc0e6dc49c79fa9e7cd7c654deac7ccaa29Sage Weil unsigned long r_stamp; /* send OR check time */ 81f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 82f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_file_layout r_file_layout; 83f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_snap_context *r_snapc; /* snap context for writes */ 84f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil unsigned r_num_pages; /* size of page array (follows) */ 85b7495fc2ff941db6a118a93ab8d61149e3f4cef8Sage Weil unsigned r_page_alignment; /* io offset in first page */ 86f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct page **r_pages; /* pages for data payload */ 87f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil int r_pages_from_pool; 88f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil int r_own_pages; /* if true, i own page list */ 8968b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh#ifdef CONFIG_BLOCK 9068b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct bio *r_bio; /* instead of pages */ 9168b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh#endif 9268b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh 9368b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct ceph_pagelist *r_trail; /* trailing part of the data */ 94f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil}; 95f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 96a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadehstruct ceph_osd_event { 97a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh u64 cookie; 98a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh int one_shot; 99a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct ceph_osd_client *osdc; 100a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh void (*cb)(u64, u64, u8, void *); 101a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh void *data; 102a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct rb_node node; 103a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct list_head osd_node; 104a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct kref kref; 105a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct completion completion; 106a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh}; 107a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh 108a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadehstruct ceph_osd_event_work { 109a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct work_struct work; 110a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct ceph_osd_event *event; 111a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh u64 ver; 112a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh u64 notify_id; 113a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh u8 opcode; 114a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh}; 115a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh 116f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilstruct ceph_osd_client { 117f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_client *client; 118f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 119f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_osdmap *osdmap; /* current map */ 120f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct rw_semaphore map_sem; 121f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct completion map_waiters; 122f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil u64 last_requested_map; 123f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 124f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct mutex request_mutex; 125f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct rb_root osds; /* osds */ 126f5a2041bd96c9f05ff10172b9c814c14f247084eYehuda Sadeh struct list_head osd_lru; /* idle osds */ 127f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil u64 timeout_tid; /* tid of timeout triggering rq */ 128f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil u64 last_tid; /* tid of last request */ 129f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct rb_root requests; /* pending requests */ 1306f6c7006755b667f9f6c1f3b6f08cd65f75cc471Sage Weil struct list_head req_lru; /* in-flight lru */ 1316f6c7006755b667f9f6c1f3b6f08cd65f75cc471Sage Weil struct list_head req_unsent; /* unsent/need-resend queue */ 1326f6c7006755b667f9f6c1f3b6f08cd65f75cc471Sage Weil struct list_head req_notarget; /* map to no osd */ 133a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct list_head req_linger; /* lingering requests */ 134f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil int num_requests; 135f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct delayed_work timeout_work; 136f5a2041bd96c9f05ff10172b9c814c14f247084eYehuda Sadeh struct delayed_work osds_timeout_work; 137039934b895c89c2bb40aa5132efe00e60b70efcaSage Weil#ifdef CONFIG_DEBUG_FS 138f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct dentry *debugfs_file; 139039934b895c89c2bb40aa5132efe00e60b70efcaSage Weil#endif 140f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 141f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil mempool_t *req_mempool; 142f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 1430d59ab81c3d3adf466c3fd37d7fb6d46b05d1fd4Yehuda Sadeh struct ceph_msgpool msgpool_op; 144c16e786927b977cb880873214bbd815e8d5ec4baSage Weil struct ceph_msgpool msgpool_op_reply; 145a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh 146a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh spinlock_t event_lock; 147a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct rb_root event_tree; 148a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh u64 event_count; 149a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh 150a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct workqueue_struct *notify_wq; 151f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil}; 152f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 15368b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadehstruct ceph_osd_req_op { 15468b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u16 op; /* CEPH_OSD_OP_* */ 15568b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u32 flags; /* CEPH_OSD_FLAG_* */ 15668b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh union { 15768b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct { 15868b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u64 offset, length; 15968b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u64 truncate_size; 16068b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u32 truncate_seq; 16168b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh } extent; 16268b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct { 16368b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh const char *name; 16468b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u32 name_len; 16568b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh const char *val; 16668b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u32 value_len; 16768b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh __u8 cmp_op; /* CEPH_OSD_CMPXATTR_OP_* */ 16868b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh __u8 cmp_mode; /* CEPH_OSD_CMPXATTR_MODE_* */ 16968b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh } xattr; 17068b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct { 171ae1533b62b3369e6ae32338f4a77d64d0e88f676Yehuda Sadeh const char *class_name; 17268b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh __u8 class_len; 173ae1533b62b3369e6ae32338f4a77d64d0e88f676Yehuda Sadeh const char *method_name; 17468b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh __u8 method_len; 17568b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh __u8 argc; 176ae1533b62b3369e6ae32338f4a77d64d0e88f676Yehuda Sadeh const char *indata; 17768b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u32 indata_len; 17868b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh } cls; 17968b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct { 18068b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u64 cookie, count; 18168b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh } pgls; 182ae1533b62b3369e6ae32338f4a77d64d0e88f676Yehuda Sadeh struct { 183ae1533b62b3369e6ae32338f4a77d64d0e88f676Yehuda Sadeh u64 snapid; 184ae1533b62b3369e6ae32338f4a77d64d0e88f676Yehuda Sadeh } snap; 185a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct { 186a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh u64 cookie; 187a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh u64 ver; 188a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh __u8 flag; 189a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh u32 prot_ver; 190a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh u32 timeout; 191a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh } watch; 19268b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh }; 19368b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u32 payload_len; 19468b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh}; 19568b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh 196f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilextern int ceph_osdc_init(struct ceph_osd_client *osdc, 197f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_client *client); 198f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilextern void ceph_osdc_stop(struct ceph_osd_client *osdc); 199f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 200f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilextern void ceph_osdc_handle_reply(struct ceph_osd_client *osdc, 201f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_msg *msg); 202f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilextern void ceph_osdc_handle_map(struct ceph_osd_client *osdc, 203f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_msg *msg); 204f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 2053499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadehextern void ceph_calc_raw_layout(struct ceph_osd_client *osdc, 2063499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadeh struct ceph_file_layout *layout, 2073499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadeh u64 snapid, 20868b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u64 off, u64 *plen, u64 *bno, 20968b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct ceph_osd_request *req, 21068b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct ceph_osd_req_op *op); 2113499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadeh 2123499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadehextern struct ceph_osd_request *ceph_osdc_alloc_request(struct ceph_osd_client *osdc, 2133499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadeh int flags, 2143499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadeh struct ceph_snap_context *snapc, 21568b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct ceph_osd_req_op *ops, 2163499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadeh bool use_mempool, 2173499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadeh gfp_t gfp_flags, 21868b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct page **pages, 21968b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct bio *bio); 2203499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadeh 2213499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadehextern void ceph_osdc_build_request(struct ceph_osd_request *req, 22268b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh u64 off, u64 *plen, 22368b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct ceph_osd_req_op *src_ops, 22468b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct ceph_snap_context *snapc, 22568b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh struct timespec *mtime, 22668b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh const char *oid, 22768b4476b0bc13fef18266b4140309a30e86739d2Yehuda Sadeh int oid_len); 2283499e8a5d4dbb083324efd942e2c4fb7eb65f27cYehuda Sadeh 229f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilextern struct ceph_osd_request *ceph_osdc_new_request(struct ceph_osd_client *, 230f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_file_layout *layout, 231f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_vino vino, 232f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil u64 offset, u64 *len, int op, int flags, 233f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_snap_context *snapc, 234f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil int do_sync, u32 truncate_seq, 235f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil u64 truncate_size, 236f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct timespec *mtime, 237b7495fc2ff941db6a118a93ab8d61149e3f4cef8Sage Weil bool use_mempool, int num_reply, 238b7495fc2ff941db6a118a93ab8d61149e3f4cef8Sage Weil int page_align); 239f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 240a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadehextern void ceph_osdc_set_request_linger(struct ceph_osd_client *osdc, 241a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct ceph_osd_request *req); 242a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadehextern void ceph_osdc_unregister_linger_request(struct ceph_osd_client *osdc, 243a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct ceph_osd_request *req); 244a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh 245f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilstatic inline void ceph_osdc_get_request(struct ceph_osd_request *req) 246f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil{ 247415e49a9c4faf1a1480b1497da2037608e5aa2c5Sage Weil kref_get(&req->r_kref); 248415e49a9c4faf1a1480b1497da2037608e5aa2c5Sage Weil} 249415e49a9c4faf1a1480b1497da2037608e5aa2c5Sage Weilextern void ceph_osdc_release_request(struct kref *kref); 250415e49a9c4faf1a1480b1497da2037608e5aa2c5Sage Weilstatic inline void ceph_osdc_put_request(struct ceph_osd_request *req) 251415e49a9c4faf1a1480b1497da2037608e5aa2c5Sage Weil{ 252415e49a9c4faf1a1480b1497da2037608e5aa2c5Sage Weil kref_put(&req->r_kref, ceph_osdc_release_request); 253f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil} 254f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 255f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilextern int ceph_osdc_start_request(struct ceph_osd_client *osdc, 256f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_osd_request *req, 257f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil bool nofail); 258f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilextern int ceph_osdc_wait_request(struct ceph_osd_client *osdc, 259f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_osd_request *req); 260f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilextern void ceph_osdc_sync(struct ceph_osd_client *osdc); 261f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 262f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilextern int ceph_osdc_readpages(struct ceph_osd_client *osdc, 263f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_vino vino, 264f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_file_layout *layout, 265f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil u64 off, u64 *plen, 266f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil u32 truncate_seq, u64 truncate_size, 267b7495fc2ff941db6a118a93ab8d61149e3f4cef8Sage Weil struct page **pages, int nr_pages, 268b7495fc2ff941db6a118a93ab8d61149e3f4cef8Sage Weil int page_align); 269f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 270f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weilextern int ceph_osdc_writepages(struct ceph_osd_client *osdc, 271f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_vino vino, 272f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_file_layout *layout, 273f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct ceph_snap_context *sc, 274f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil u64 off, u64 len, 275f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil u32 truncate_seq, u64 truncate_size, 276f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct timespec *mtime, 277f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil struct page **pages, int nr_pages, 278f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil int flags, int do_sync, bool nofail); 279f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 280a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh/* watch/notify events */ 281a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadehextern int ceph_osdc_create_event(struct ceph_osd_client *osdc, 282a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh void (*event_cb)(u64, u64, u8, void *), 283a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh int one_shot, void *data, 284a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh struct ceph_osd_event **pevent); 285a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadehextern void ceph_osdc_cancel_event(struct ceph_osd_event *event); 286a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadehextern int ceph_osdc_wait_event(struct ceph_osd_event *event, 287a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadeh unsigned long timeout); 288a40c4f10e3fb96030358e49abd010c1f08446fa3Yehuda Sadehextern void ceph_osdc_put_event(struct ceph_osd_event *event); 289f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil#endif 290f24e9980eb860d8600cbe5ef3d2fd9295320d229Sage Weil 291