提交 0ea611a3 编写于 作者: Y Yan, Zheng 提交者: Ilya Dryomov

ceph: rename snapshot support

Signed-off-by: NYan, Zheng <zyan@redhat.com>
上级 c0bd50e2
...@@ -947,16 +947,20 @@ static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry, ...@@ -947,16 +947,20 @@ static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry,
struct ceph_fs_client *fsc = ceph_sb_to_client(old_dir->i_sb); struct ceph_fs_client *fsc = ceph_sb_to_client(old_dir->i_sb);
struct ceph_mds_client *mdsc = fsc->mdsc; struct ceph_mds_client *mdsc = fsc->mdsc;
struct ceph_mds_request *req; struct ceph_mds_request *req;
int op = CEPH_MDS_OP_RENAME;
int err; int err;
if (ceph_snap(old_dir) != ceph_snap(new_dir)) if (ceph_snap(old_dir) != ceph_snap(new_dir))
return -EXDEV; return -EXDEV;
if (ceph_snap(old_dir) != CEPH_NOSNAP || if (ceph_snap(old_dir) != CEPH_NOSNAP) {
ceph_snap(new_dir) != CEPH_NOSNAP) if (old_dir == new_dir && ceph_snap(old_dir) == CEPH_SNAPDIR)
return -EROFS; op = CEPH_MDS_OP_RENAMESNAP;
else
return -EROFS;
}
dout("rename dir %p dentry %p to dir %p dentry %p\n", dout("rename dir %p dentry %p to dir %p dentry %p\n",
old_dir, old_dentry, new_dir, new_dentry); old_dir, old_dentry, new_dir, new_dentry);
req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_RENAME, USE_AUTH_MDS); req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS);
if (IS_ERR(req)) if (IS_ERR(req))
return PTR_ERR(req); return PTR_ERR(req);
ihold(old_dir); ihold(old_dir);
...@@ -1387,6 +1391,7 @@ const struct inode_operations ceph_snapdir_iops = { ...@@ -1387,6 +1391,7 @@ const struct inode_operations ceph_snapdir_iops = {
.getattr = ceph_getattr, .getattr = ceph_getattr,
.mkdir = ceph_mkdir, .mkdir = ceph_mkdir,
.rmdir = ceph_unlink, .rmdir = ceph_unlink,
.rename = ceph_rename,
}; };
const struct dentry_operations ceph_dentry_ops = { const struct dentry_operations ceph_dentry_ops = {
......
...@@ -75,6 +75,7 @@ const char *ceph_mds_op_name(int op) ...@@ -75,6 +75,7 @@ const char *ceph_mds_op_name(int op)
case CEPH_MDS_OP_LSSNAP: return "lssnap"; case CEPH_MDS_OP_LSSNAP: return "lssnap";
case CEPH_MDS_OP_MKSNAP: return "mksnap"; case CEPH_MDS_OP_MKSNAP: return "mksnap";
case CEPH_MDS_OP_RMSNAP: return "rmsnap"; case CEPH_MDS_OP_RMSNAP: return "rmsnap";
case CEPH_MDS_OP_RENAMESNAP: return "renamesnap";
case CEPH_MDS_OP_SETFILELOCK: return "setfilelock"; case CEPH_MDS_OP_SETFILELOCK: return "setfilelock";
case CEPH_MDS_OP_GETFILELOCK: return "getfilelock"; case CEPH_MDS_OP_GETFILELOCK: return "getfilelock";
} }
......
...@@ -323,6 +323,7 @@ enum { ...@@ -323,6 +323,7 @@ enum {
CEPH_MDS_OP_MKSNAP = 0x01400, CEPH_MDS_OP_MKSNAP = 0x01400,
CEPH_MDS_OP_RMSNAP = 0x01401, CEPH_MDS_OP_RMSNAP = 0x01401,
CEPH_MDS_OP_LSSNAP = 0x00402, CEPH_MDS_OP_LSSNAP = 0x00402,
CEPH_MDS_OP_RENAMESNAP = 0x01403,
}; };
extern const char *ceph_mds_op_name(int op); extern const char *ceph_mds_op_name(int op);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册