From 2589ac2894d005f0fd03bd1714841f1bf0a3c020 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 29 Apr 2008 13:20:06 -0700 Subject: [PATCH] kclient: beginnings of sysfs --- src/TODO | 1 - src/kernel/client.c | 10 +++++++++- src/kernel/super.c | 10 +++++++++- src/kernel/super.h | 6 ++++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/TODO b/src/TODO index 79bd0f9a8f6ff..c6f9f2d63728e 100644 --- a/src/TODO +++ b/src/TODO @@ -18,7 +18,6 @@ userspace client - reference count lease validations on path lookup? kernel client -- flush all WRITE caps on session close - flush caps on sync, fsync, etc. - hmm, should these go in a per-session "check" list, instead of independently scheduling delayed_work for each inode? - fsync should flush cap file size to mds. not sure how to block on that, however.. maybe a want_reply flag in the cap msg? diff --git a/src/kernel/client.c b/src/kernel/client.c index 31fb9e34557c5..e7a78699cce6b 100644 --- a/src/kernel/client.c +++ b/src/kernel/client.c @@ -162,11 +162,17 @@ static void handle_monmap(struct ceph_client *client, struct ceph_msg *msg) client->monc.monmap = new; if (first) { + char name[10]; client->whoami = le32_to_cpu(msg->hdr.dst.name.num); client->msgr->inst.name = msg->hdr.dst.name; - dout(1, "i am client%d, fsid is %llx.%llx\n", client->whoami, + sprintf(name, "client%d", client->whoami); + dout(1, "i am %s, fsid is %llx.%llx\n", name, le64_to_cpu(client->monc.monmap->fsid.major), le64_to_cpu(client->monc.monmap->fsid.minor)); + + client->client_kobj = kobject_create_and_add(name, ceph_kobj); + //client->fsid_kobj = kobject_create_and_add("fsid", + //client->client_kobj); } } @@ -245,6 +251,8 @@ void ceph_destroy_client(struct ceph_client *cl) /* unmount */ /* ... */ + if (cl->client_kobj) + kobject_put(cl->client_kobj); if (cl->wb_wq) destroy_workqueue(cl->wb_wq); ceph_messenger_destroy(cl->msgr); diff --git a/src/kernel/super.c b/src/kernel/super.c index cf4111beb66d5..2a7218d99a099 100644 --- a/src/kernel/super.c +++ b/src/kernel/super.c @@ -554,14 +554,19 @@ static struct file_system_type ceph_fs_type = { .fs_flags = FS_RENAME_DOES_D_MOVE, }; +struct kobject *ceph_kobj; + static int __init init_ceph(void) { int ret = 0; dout(1, "init_ceph\n"); - spin_lock_init(&ceph_client_spinlock); + ceph_kobj = kobject_create_and_add("ceph", fs_kobj); + if (!ceph_kobj) + return -ENOMEM; + ceph_fs_proc_init(); ret = init_inodecache(); @@ -578,6 +583,9 @@ static void __exit exit_ceph(void) { dout(1, "exit_ceph\n"); + kobject_put(ceph_kobj); + ceph_kobj = 0; + unregister_filesystem(&ceph_fs_type); destroy_inodecache(); } diff --git a/src/kernel/super.h b/src/kernel/super.h index 4d563ca0aff3a..ec4949c404147 100644 --- a/src/kernel/super.h +++ b/src/kernel/super.h @@ -6,6 +6,7 @@ #include #include #include +#include #include "ceph_fs.h" #include "messenger.h" @@ -92,6 +93,9 @@ enum { CEPH_MOUNT_UNMOUNTED, }; + +extern struct kobject *ceph_kobj; + /* * per-filesystem client state * @@ -117,6 +121,8 @@ struct ceph_client { /* writeback */ struct workqueue_struct *wb_wq; + struct kobject *client_kobj; + /* lets ignore all this until later */ spinlock_t sb_lock; int num_sb; /* ref count (for each sb_info that points to me) */ -- 2.39.5