~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/ceph/libceph.h

Version: ~ [ linux-5.13-rc5 ] ~ [ linux-5.12.9 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.42 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.124 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.193 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.235 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.271 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.271 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef _FS_CEPH_LIBCEPH_H
  2 #define _FS_CEPH_LIBCEPH_H
  3 
  4 #include <linux/ceph/ceph_debug.h>
  5 
  6 #include <asm/unaligned.h>
  7 #include <linux/backing-dev.h>
  8 #include <linux/completion.h>
  9 #include <linux/exportfs.h>
 10 #include <linux/bug.h>
 11 #include <linux/fs.h>
 12 #include <linux/mempool.h>
 13 #include <linux/pagemap.h>
 14 #include <linux/wait.h>
 15 #include <linux/writeback.h>
 16 #include <linux/slab.h>
 17 
 18 #include <linux/ceph/types.h>
 19 #include <linux/ceph/messenger.h>
 20 #include <linux/ceph/msgpool.h>
 21 #include <linux/ceph/mon_client.h>
 22 #include <linux/ceph/osd_client.h>
 23 #include <linux/ceph/ceph_fs.h>
 24 
 25 /*
 26  * mount options
 27  */
 28 #define CEPH_OPT_FSID             (1<<0)
 29 #define CEPH_OPT_NOSHARE          (1<<1) /* don't share client with other sbs */
 30 #define CEPH_OPT_MYIP             (1<<2) /* specified my ip */
 31 #define CEPH_OPT_NOCRC            (1<<3) /* no data crc on writes */
 32 
 33 #define CEPH_OPT_DEFAULT   (0)
 34 
 35 #define ceph_set_opt(client, opt) \
 36         (client)->options->flags |= CEPH_OPT_##opt;
 37 #define ceph_test_opt(client, opt) \
 38         (!!((client)->options->flags & CEPH_OPT_##opt))
 39 
 40 struct ceph_options {
 41         int flags;
 42         struct ceph_fsid fsid;
 43         struct ceph_entity_addr my_addr;
 44         int mount_timeout;
 45         int osd_idle_ttl;
 46         int osd_keepalive_timeout;
 47 
 48         /*
 49          * any type that can't be simply compared or doesn't need need
 50          * to be compared should go beyond this point,
 51          * ceph_compare_options() should be updated accordingly
 52          */
 53 
 54         struct ceph_entity_addr *mon_addr; /* should be the first
 55                                               pointer type of args */
 56         int num_mon;
 57         char *name;
 58         struct ceph_crypto_key *key;
 59 };
 60 
 61 /*
 62  * defaults
 63  */
 64 #define CEPH_MOUNT_TIMEOUT_DEFAULT  60
 65 #define CEPH_OSD_KEEPALIVE_DEFAULT  5
 66 #define CEPH_OSD_IDLE_TTL_DEFAULT    60
 67 
 68 #define CEPH_MSG_MAX_FRONT_LEN  (16*1024*1024)
 69 #define CEPH_MSG_MAX_MIDDLE_LEN (16*1024*1024)
 70 #define CEPH_MSG_MAX_DATA_LEN   (16*1024*1024)
 71 
 72 #define CEPH_AUTH_NAME_DEFAULT   "guest"
 73 
 74 /*
 75  * Delay telling the MDS we no longer want caps, in case we reopen
 76  * the file.  Delay a minimum amount of time, even if we send a cap
 77  * message for some other reason.  Otherwise, take the oppotunity to
 78  * update the mds to avoid sending another message later.
 79  */
 80 #define CEPH_CAPS_WANTED_DELAY_MIN_DEFAULT      5  /* cap release delay */
 81 #define CEPH_CAPS_WANTED_DELAY_MAX_DEFAULT     60  /* cap release delay */
 82 
 83 #define CEPH_CAP_RELEASE_SAFETY_DEFAULT        (CEPH_CAPS_PER_RELEASE * 4)
 84 
 85 /* mount state */
 86 enum {
 87         CEPH_MOUNT_MOUNTING,
 88         CEPH_MOUNT_MOUNTED,
 89         CEPH_MOUNT_UNMOUNTING,
 90         CEPH_MOUNT_UNMOUNTED,
 91         CEPH_MOUNT_SHUTDOWN,
 92 };
 93 
 94 /*
 95  * subtract jiffies
 96  */
 97 static inline unsigned long time_sub(unsigned long a, unsigned long b)
 98 {
 99         BUG_ON(time_after(b, a));
100         return (long)a - (long)b;
101 }
102 
103 struct ceph_mds_client;
104 
105 /*
106  * per client state
107  *
108  * possibly shared by multiple mount points, if they are
109  * mounting the same ceph filesystem/cluster.
110  */
111 struct ceph_client {
112         struct ceph_fsid fsid;
113         bool have_fsid;
114 
115         void *private;
116 
117         struct ceph_options *options;
118 
119         struct mutex mount_mutex;      /* serialize mount attempts */
120         wait_queue_head_t auth_wq;
121         int auth_err;
122 
123         int (*extra_mon_dispatch)(struct ceph_client *, struct ceph_msg *);
124 
125         u64 supported_features;
126         u64 required_features;
127 
128         struct ceph_messenger msgr;   /* messenger instance */
129         struct ceph_mon_client monc;
130         struct ceph_osd_client osdc;
131 
132 #ifdef CONFIG_DEBUG_FS
133         struct dentry *debugfs_dir;
134         struct dentry *debugfs_monmap;
135         struct dentry *debugfs_osdmap;
136 #endif
137 };
138 
139 
140 
141 /*
142  * snapshots
143  */
144 
145 /*
146  * A "snap context" is the set of existing snapshots when we
147  * write data.  It is used by the OSD to guide its COW behavior.
148  *
149  * The ceph_snap_context is refcounted, and attached to each dirty
150  * page, indicating which context the dirty data belonged when it was
151  * dirtied.
152  */
153 struct ceph_snap_context {
154         atomic_t nref;
155         u64 seq;
156         u32 num_snaps;
157         u64 snaps[];
158 };
159 
160 extern struct ceph_snap_context *ceph_create_snap_context(u32 snap_count,
161                                         gfp_t gfp_flags);
162 extern struct ceph_snap_context *ceph_get_snap_context(
163                                         struct ceph_snap_context *sc);
164 extern void ceph_put_snap_context(struct ceph_snap_context *sc);
165 
166 /*
167  * calculate the number of pages a given length and offset map onto,
168  * if we align the data.
169  */
170 static inline int calc_pages_for(u64 off, u64 len)
171 {
172         return ((off+len+PAGE_CACHE_SIZE-1) >> PAGE_CACHE_SHIFT) -
173                 (off >> PAGE_CACHE_SHIFT);
174 }
175 
176 extern struct kmem_cache *ceph_inode_cachep;
177 extern struct kmem_cache *ceph_cap_cachep;
178 extern struct kmem_cache *ceph_dentry_cachep;
179 extern struct kmem_cache *ceph_file_cachep;
180 
181 /* ceph_common.c */
182 extern bool libceph_compatible(void *data);
183 
184 extern const char *ceph_msg_type_name(int type);
185 extern int ceph_check_fsid(struct ceph_client *client, struct ceph_fsid *fsid);
186 extern void *ceph_kvmalloc(size_t size, gfp_t flags);
187 extern void ceph_kvfree(const void *ptr);
188 
189 extern struct ceph_options *ceph_parse_options(char *options,
190                               const char *dev_name, const char *dev_name_end,
191                               int (*parse_extra_token)(char *c, void *private),
192                               void *private);
193 extern void ceph_destroy_options(struct ceph_options *opt);
194 extern int ceph_compare_options(struct ceph_options *new_opt,
195                                 struct ceph_client *client);
196 extern struct ceph_client *ceph_create_client(struct ceph_options *opt,
197                                               void *private,
198                                               u64 supported_features,
199                                               u64 required_features);
200 extern u64 ceph_client_id(struct ceph_client *client);
201 extern void ceph_destroy_client(struct ceph_client *client);
202 extern int __ceph_open_session(struct ceph_client *client,
203                                unsigned long started);
204 extern int ceph_open_session(struct ceph_client *client);
205 
206 /* pagevec.c */
207 extern void ceph_release_page_vector(struct page **pages, int num_pages);
208 
209 extern struct page **ceph_get_direct_page_vector(const void __user *data,
210                                                  int num_pages,
211                                                  bool write_page);
212 extern void ceph_put_page_vector(struct page **pages, int num_pages,
213                                  bool dirty);
214 extern void ceph_release_page_vector(struct page **pages, int num_pages);
215 extern struct page **ceph_alloc_page_vector(int num_pages, gfp_t flags);
216 extern int ceph_copy_user_to_page_vector(struct page **pages,
217                                          const void __user *data,
218                                          loff_t off, size_t len);
219 extern void ceph_copy_to_page_vector(struct page **pages,
220                                     const void *data,
221                                     loff_t off, size_t len);
222 extern void ceph_copy_from_page_vector(struct page **pages,
223                                     void *data,
224                                     loff_t off, size_t len);
225 extern int ceph_copy_page_vector_to_user(struct page **pages, void __user *data,
226                                     loff_t off, size_t len);
227 extern void ceph_zero_page_vector_range(int off, int len, struct page **pages);
228 
229 
230 #endif /* _FS_CEPH_SUPER_H */
231 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp