aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2013-01-30 12:13:33 -0500
committerSage Weil <sage@inktank.com>2013-02-13 21:29:11 -0500
commit72fe25e3460c8673984370208e0e6261101372d6 (patch)
treefae2e1db42c35f14db6c1f952f460b49dcffea89
parentb82d167be64b3e88d9434d8a98ce83c83a07aa48 (diff)
libceph: add a compatibility check interface
An upcoming change implements semantic change that could lead to a crash if an old version of the libceph kernel module is used with a new version of the rbd kernel module. In order to preclude that possibility, this adds a compatibilty check interface. If this interface doesn't exist, the modules are obviously not compatible. But if it does exist, this provides a way of letting the caller know whether it will operate properly with this libceph module. Perhaps confusingly, it returns false right now. The semantic change mentioned above will make it return true. This resolves: http://tracker.ceph.com/issues/3800 Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
-rw-r--r--include/linux/ceph/libceph.h2
-rw-r--r--net/ceph/ceph_common.c16
2 files changed, 18 insertions, 0 deletions
diff --git a/include/linux/ceph/libceph.h b/include/linux/ceph/libceph.h
index 084d3c622b12..c44275ab375c 100644
--- a/include/linux/ceph/libceph.h
+++ b/include/linux/ceph/libceph.h
@@ -193,6 +193,8 @@ static inline int calc_pages_for(u64 off, u64 len)
193} 193}
194 194
195/* ceph_common.c */ 195/* ceph_common.c */
196extern bool libceph_compatible(void *data);
197
196extern const char *ceph_msg_type_name(int type); 198extern const char *ceph_msg_type_name(int type);
197extern int ceph_check_fsid(struct ceph_client *client, struct ceph_fsid *fsid); 199extern int ceph_check_fsid(struct ceph_client *client, struct ceph_fsid *fsid);
198extern struct kmem_cache *ceph_inode_cachep; 200extern struct kmem_cache *ceph_inode_cachep;
diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c
index ee71ea26777a..a98c03ff853f 100644
--- a/net/ceph/ceph_common.c
+++ b/net/ceph/ceph_common.c
@@ -26,6 +26,22 @@
26#include "crypto.h" 26#include "crypto.h"
27 27
28 28
29/*
30 * Module compatibility interface. For now it doesn't do anything,
31 * but its existence signals a certain level of functionality.
32 *
33 * The data buffer is used to pass information both to and from
34 * libceph. The return value indicates whether libceph determines
35 * it is compatible with the caller (from another kernel module),
36 * given the provided data.
37 *
38 * The data pointer can be null.
39 */
40bool libceph_compatible(void *data)
41{
42 return false;
43}
44EXPORT_SYMBOL(libceph_compatible);
29 45
30/* 46/*
31 * find filename portion of a path (/foo/bar/baz -> baz) 47 * find filename portion of a path (/foo/bar/baz -> baz)