/- make kclient timeouts tunable
v0.8
-- kill fill_trace
+- revamp client<->mds interaction wrt snapshots...
+- clean up path_traverse interface, esp the usages in Server.cc
+- fix up mds selection, and ESTALE handling.
- - allow mon to log messages
- - log client mount successes, failures
- - mon elections
- - ?
+ - return extra inode(s) in reply (namely, unlink)?
- store root inode on mds
- allow chmod/whatever of root inode
+- piggyback lease/cap release on client_request
+kclient caps
+/- two session lists: dirty_caps, clean_caps
+/- time out and release clean caps explicitly
+/- pin dirty caps
+/- don't pin clean caps
+/- release on destroy_inode
+/- implement write_inode?
+/- hold a pin_ref for request r_inode or r_locked_dir.
+/- flush dirty caps to auth mds only. resend on cap import.
+- reflush caps on mds recovery, cap migration.
+/- cap (release) reservations
+/- size limit on readdir result, partial dirfrag readdir
+/- revisit unmount
+/- make request paths relative to a non-snapshotted inode.
+- fix nfs exportin
- ENOSPC
- flock
return 0;
}
+static int caps_reservation_show(struct seq_file *s, void *p)
+{
+ int total, used, reserved;
+
+ ceph_reservation_status(&total, &used, &reserved);
+
+ seq_printf(s, "total\t\t%d\n"
+ "used\t\t%d\n"
+ "reserved\t%d\n",
+ total, used, reserved);
+ return 0;
+}
+
+ static int dentry_lru_show(struct seq_file *s, void *ptr)
+ {
+ struct ceph_client *client = s->private;
+ struct ceph_mds_client *mdsc = &client->mdsc;
+ struct list_head *p;
+ struct ceph_dentry_info *di;
+
+ spin_lock(&mdsc->dentry_lru_lock);
+ list_for_each(p, &mdsc->dentry_lru) {
+ struct dentry *dentry;
+ di = list_entry(p, struct ceph_dentry_info, lru);
+ dentry = di->dentry;
+ seq_printf(s, "%p %p\t%.*s\n",
+ di, dentry, dentry->d_name.len, dentry->d_name.name);
+ }
+ spin_unlock(&mdsc->dentry_lru_lock);
+
+ return 0;
+ }
+
#define DEFINE_SHOW_FUNC(name) \
static int name##_open(struct inode *inode, struct file *file) \
{ \
DEFINE_SHOW_FUNC(monc_show)
DEFINE_SHOW_FUNC(mdsc_show)
DEFINE_SHOW_FUNC(osdc_show)
++<<<<<<< HEAD:src/kernel/debugfs.c
+DEFINE_SHOW_FUNC(caps_reservation_show)
++=======
+ DEFINE_SHOW_FUNC(dentry_lru_show)
++>>>>>>> unstable:src/kernel/debugfs.c
#ifdef CONFIG_CEPH_BOOKKEEPER
static int debugfs_bookkeeper_set(void *data, u64 val)
spin_lock_init(&mdsc->cap_delay_lock);
INIT_LIST_HEAD(&mdsc->snap_flush_list);
spin_lock_init(&mdsc->snap_flush_lock);
+ INIT_LIST_HEAD(&mdsc->cap_dirty);
+ INIT_LIST_HEAD(&mdsc->cap_sync);
+ spin_lock_init(&mdsc->cap_dirty_lock);
+ init_waitqueue_head(&mdsc->cap_sync_wq);
+ spin_lock_init(&mdsc->dentry_lru_lock);
+ INIT_LIST_HEAD(&mdsc->dentry_lru);
}
/*
spinlock_t cap_delay_lock; /* protects cap_delay_list */
struct list_head snap_flush_list; /* cap_snaps ready to flush */
spinlock_t snap_flush_lock;
+ struct list_head cap_dirty, cap_sync; /* inodes with dirty cap data */
+ spinlock_t cap_dirty_lock;
+ wait_queue_head_t cap_sync_wq;
struct dentry *debugfs_file;
+
+ spinlock_t dentry_lru_lock;
+ struct list_head dentry_lru;
+ int num_dentry;
};
extern const char *ceph_mds_op_name(int op);