From 0ae04592ed59c7b75f5e3c749057e4da950f4dd7 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 20 Dec 2007 18:55:45 -0800 Subject: [PATCH] kernel: rename; debug arg parsing --- src/kernel/dir.c | 57 +++++++++++++++++++++++++++++------------ src/kernel/mds_client.c | 4 +-- src/kernel/messenger.c | 4 +-- src/kernel/osd_client.c | 4 +-- src/kernel/super.c | 15 +++++++++++ src/kernel/super.h | 4 +++ src/start.sh | 2 +- 7 files changed, 66 insertions(+), 24 deletions(-) diff --git a/src/kernel/dir.c b/src/kernel/dir.c index 6d4d28bc9fd87..0ddebaae69bb7 100644 --- a/src/kernel/dir.c +++ b/src/kernel/dir.c @@ -22,7 +22,7 @@ static int get_dentry_path(struct dentry *dn, char *buf, struct dentry *base) dout(20, "get_dentry_path out dn %p bas %p len %d adding %s\n", dn, base, len, dn->d_name.name); - buf[len++] = '/'; + if (len) buf[len++] = '/'; memcpy(buf+len, dn->d_name.name, dn->d_name.len); len += dn->d_name.len; buf[len] = 0; @@ -299,11 +299,12 @@ static int ceph_dir_unlink(struct inode *dir, struct dentry *dentry) char path[200]; int pathlen; int err; - - dout(5, "dir_unlink dir %p dentry %p inode %p\n", dir, dentry, inode); + int op = ((dentry->d_inode->i_mode & S_IFMT) == S_IFDIR) ? CEPH_MDS_OP_RMDIR:CEPH_MDS_OP_UNLINK; + + dout(5, "dir_unlink/rmdir dir %p dentry %p inode %p\n", dir, dentry, inode); pathlen = get_dentry_path(dentry, path, dir->i_sb->s_root); - req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_UNLINK, + req = ceph_mdsc_create_request(mdsc, op, dir->i_sb->s_root->d_inode->i_ino, path, 0, 0); if (IS_ERR(req)) return PTR_ERR(req); @@ -318,13 +319,41 @@ static int ceph_dir_unlink(struct inode *dir, struct dentry *dentry) return err; } +static int ceph_dir_rename(struct inode *old_dir, struct dentry *old_dentry, + struct inode *new_dir, struct dentry *new_dentry) +{ + struct ceph_super_info *sbinfo = ceph_sbinfo(old_dir->i_sb); + struct ceph_mds_client *mdsc = &sbinfo->sb_client->mdsc; + struct ceph_msg *req; + struct ceph_mds_reply_info rinfo; + struct dentry *root = old_dir->i_sb->s_root; + char oldpath[200], newpath[200]; + int oldpathlen, newpathlen; + int err; + + dout(5, "dir_newname dir %p dentry %p to dir %p dentry %p\n", + old_dir, old_dentry, new_dir, new_dentry); + oldpathlen = get_dentry_path(old_dentry, oldpath, root); + newpathlen = get_dentry_path(new_dentry, newpath, root); + + req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_RENAME, + root->d_inode->i_ino, oldpath, + root->d_inode->i_ino, newpath); + if (IS_ERR(req)) + return PTR_ERR(req); + if ((err = ceph_mdsc_do_request(mdsc, req, &rinfo, -1)) < 0) + return err; + + err = le32_to_cpu(rinfo.head->result); + if (err == 0) { + /* FIXME update dir mtime etc. from reply trace */ + } + return err; +} -/* +/* -static int ceph_dir_rmdir(struct inode *i, struct dentry *d) -{ -} static int ceph_dir_create(struct inode *dir, struct dentry *dentry, int mode, @@ -333,23 +362,17 @@ ceph_dir_create(struct inode *dir, struct dentry *dentry, int mode, } - - -static int ceph_dir_rename(struct inode *old_dir, struct dentry *old_dentry, - struct inode *new_dir, struct dentry *new_dentry) -{ -} */ const struct inode_operations ceph_dir_iops = { .lookup = ceph_dir_lookup, // .getattr = ceph_inode_getattr, - .unlink = ceph_dir_unlink, .mkdir = ceph_dir_mkdir, -// .rmdir = ceph_vfs_rmdir, + .unlink = ceph_dir_unlink, + .rmdir = ceph_dir_unlink, + .rename = ceph_dir_rename, /* .create = ceph_dir_create, .mknod = ceph_vfs_mknod, - .rename = ceph_vfs_rename, .getattr = ceph_vfs_getattr, .setattr = ceph_vfs_setattr, */ diff --git a/src/kernel/mds_client.c b/src/kernel/mds_client.c index 71873bf074059..e43cf0becba94 100644 --- a/src/kernel/mds_client.c +++ b/src/kernel/mds_client.c @@ -5,8 +5,8 @@ #include "mds_client.h" #include "mon_client.h" -int ceph_mds_debug = 50; -#define DOUT_VAR ceph_mds_debug +int ceph_debug_mdsc = 50; +#define DOUT_VAR ceph_debug_mdsc #define DOUT_PREFIX "mds: " #include "super.h" #include "messenger.h" diff --git a/src/kernel/messenger.c b/src/kernel/messenger.c index 613f46c61db66..d604490e59f4a 100644 --- a/src/kernel/messenger.c +++ b/src/kernel/messenger.c @@ -8,8 +8,8 @@ #include "messenger.h" #include "ktcp.h" -int ceph_msgr_debug = 50; -#define DOUT_VAR ceph_msgr_debug +int ceph_debug_msgr = 50; +#define DOUT_VAR ceph_debug_msgr #define DOUT_PREFIX "msgr: " #include "super.h" diff --git a/src/kernel/osd_client.c b/src/kernel/osd_client.c index 93110ccc71e8c..effd834b31edc 100644 --- a/src/kernel/osd_client.c +++ b/src/kernel/osd_client.c @@ -4,8 +4,8 @@ #include "osd_client.h" #include "messenger.h" -int ceph_osdc_debug = 50; -#define DOUT_VAR ceph_osdc_debug +int ceph_debug_osdc = 50; +#define DOUT_VAR ceph_debug_osdc #define DOUT_PREFIX "osdc: " #include "super.h" diff --git a/src/kernel/super.c b/src/kernel/super.c index db5c463eb02ec..b908719420ba7 100644 --- a/src/kernel/super.c +++ b/src/kernel/super.c @@ -212,6 +212,9 @@ enum { Opt_fsidmajor, Opt_fsidminor, Opt_debug, + Opt_debug_msgr, + Opt_debug_mdsc, + Opt_debug_osdc, Opt_monport, Opt_port, Opt_ip @@ -221,6 +224,9 @@ static match_table_t arg_tokens = { {Opt_fsidmajor, "fsidmajor=%ld"}, {Opt_fsidminor, "fsidminor=%ld"}, {Opt_debug, "debug=%d"}, + {Opt_debug_msgr, "debug_msgr=%d"}, + {Opt_debug_mdsc, "debug_mdsc=%d"}, + {Opt_debug_osdc, "debug_osdc=%d"}, {Opt_monport, "monport=%d"}, {Opt_port, "port=%d"}, {Opt_ip, "ip=%s"} @@ -332,6 +338,15 @@ static int parse_mount_args(int flags, char *options, const char *dev_name, stru case Opt_debug: ceph_debug = intval; break; + case Opt_debug_msgr: + ceph_debug_msgr = intval; + break; + case Opt_debug_mdsc: + ceph_debug_mdsc = intval; + break; + case Opt_debug_osdc: + ceph_debug_osdc = intval; + break; case Opt_port: args->my_addr.ipaddr.sin_port = htons(intval); break; diff --git a/src/kernel/super.h b/src/kernel/super.h index 41d386f205400..05c384434d229 100644 --- a/src/kernel/super.h +++ b/src/kernel/super.h @@ -7,6 +7,10 @@ #include "client.h" extern int ceph_debug; +extern int ceph_debug_msgr; +extern int ceph_debug_mdsc; +extern int ceph_debug_osdc; + # define dout(x, args...) do { if (x <= (ceph_debug ? ceph_debug : DOUT_VAR)) printk(KERN_INFO "ceph_" DOUT_PREFIX args); } while (0); # define derr(x, args...) do { if (x <= (ceph_debug ? ceph_debug : DOUT_VAR)) printk(KERN_ERR "ceph_" DOUT_PREFIX args); } while (0); diff --git a/src/start.sh b/src/start.sh index 9f2410c4a1008..8de6f59737804 100755 --- a/src/start.sh +++ b/src/start.sh @@ -6,4 +6,4 @@ ./cosd --mkfs --osd 1 & ./cosd --mkfs --osd 2 & ./cosd --mkfs --osd 3 & -./cmds & +./cmds --debug_ms 1 --debug_mds 10 & -- 2.39.5