将mds端unlink请求转为remove请求,remove到一个我们指定的目录,从而实现回收站功能
内核客户端接收消息分发函数fs\ceph\mds_client.c的dispatch函数会调用handle_reply处理回复消息。
handle_reply调用ceph_fill_trace函数在内存中填充inode和dentry的信息。
dmesg报错系统崩溃在ceph_fill_trace函数的BUG_ON(ceph_ino(dir) != dvino.ino)处
dvino.ino = le64_to_cpu(rinfo->diri.in->ino);
dvino.snap = le64_to_cpu(rinfo->diri.in->snapid);
BUG_ON(ceph_ino(dir) != dvino.ino);
BUG_ON(ceph_snap(dir) != dvino.snap);
ceph_ino(dir)是内核客户端发送请求到mds端之前存储的ino,dvino.ino是mds回复给内核客户端reply_info中的ino,因为在mds中调用了set_ino对ino更改了,所以这里两者不相同,从而报错 程序崩溃。
将此处注释掉进行测试,测试结果:
程序正常执行,rm删除文件之后,文件加上.bak后缀然后mv到了指定的trash目录中,但是在执行rm操作的目录中,ls卡顿,大概卡顿两分钟之后,ls正常,文件/目录读写正常。
应该怎么修改以实现这个功能呢?