函数结构
时间:2010-08-02
来源:互联网
int Client::_setattr(Inode *in, struct stat_precise *attr, int mask, int uid, int gid)
{
int issued = in->caps_issued();
dout(10) << "_setattr mask " << mask << " issued " << ccap_string(issued) << dendl;
// make the change locally?
if (in->caps_issued_mask(CEPH_CAP_AUTH_EXCL)) {
if (mask & CEPH_SETATTR_MODE) {
in->ctime = g_clock.now();
in->mode = (in->mode & ~07777) | (attr->st_mode & 07777);
mark_caps_dirty(in, CEPH_CAP_AUTH_EXCL);
mask &= ~CEPH_SETATTR_MODE;
}
if (mask & CEPH_SETATTR_UID) {
in->ctime = g_clock.now();
in->uid = attr->st_uid;
mark_caps_dirty(in, CEPH_CAP_AUTH_EXCL);
mask &= ~CEPH_SETATTR_UID;
}
if (mask & CEPH_SETATTR_GID) {
in->ctime = g_clock.now();
in->gid = attr->st_gid;
mark_caps_dirty(in, CEPH_CAP_AUTH_EXCL);
mask &= ~CEPH_SETATTR_GID;
}
}
if (in->caps_issued_mask(CEPH_CAP_FILE_EXCL)) {
if (mask & (CEPH_SETATTR_MTIME|CEPH_SETATTR_ATIME)) {
if (mask & CEPH_SETATTR_MTIME)
in->mtime = utime_t(attr->st_mtime_sec, attr->st_mtime_micro);
if (mask & CEPH_SETATTR_ATIME)
in->atime = utime_t(attr->st_atime_sec, attr->st_atime_micro);
in->ctime = g_clock.now();
in->time_warp_seq++;
mark_caps_dirty(in, CEPH_CAP_FILE_EXCL);
mask &= ~(CEPH_SETATTR_MTIME|CEPH_SETATTR_ATIME);
}
}
if (!mask)
return 0;
MetaRequest *req = new MetaRequest(CEPH_MDS_OP_SETATTR);///////////
filepath path;
in->make_path(path);
req->set_filepath(path);
if (mask & CEPH_SETATTR_MODE) {
req->head.args.setattr.mode = attr->st_mode;
req->inode_drop |= CEPH_CAP_AUTH_SHARED;
req->inode = in;
}
if (mask & CEPH_SETATTR_UID) {
req->head.args.setattr.uid = attr->st_uid;
req->inode_drop |= CEPH_CAP_AUTH_SHARED;
req->inode = in;
}
if (mask & CEPH_SETATTR_GID) {
req->head.args.setattr.gid = attr->st_gid;
req->inode_drop |= CEPH_CAP_AUTH_SHARED;
req->inode = in;
}
if (mask & CEPH_SETATTR_MTIME) {
req->head.args.setattr.mtime =
utime_t(attr->st_mtime_sec, attr->st_mtime_micro);
req->inode_drop |= CEPH_CAP_AUTH_SHARED | CEPH_CAP_FILE_RD |
CEPH_CAP_FILE_WR;
req->inode = in;
}
if (mask & CEPH_SETATTR_ATIME) {
req->head.args.setattr.atime =
utime_t(attr->st_atime_sec, attr->st_atime_micro);
req->inode_drop |= CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_RD |
CEPH_CAP_FILE_WR;
req->inode = in;
}
if (mask & CEPH_SETATTR_SIZE) {
if ((unsigned long)attr->st_size < mdsmap->get_max_filesize())
req->head.args.setattr.size = attr->st_size;
else { //too big!
delete req;
return -EFBIG;
}
req->inode_drop |= CEPH_CAP_AUTH_SHARED | CEPH_CAP_FILE_RD |
CEPH_CAP_FILE_WR;
req->inode = in;
}
req->head.args.setattr.mask = mask;
int res = make_request(req, uid, gid);
dout(10) << "_setattr result=" << res << dendl;
return res;
}
从打了很多///////的那句开始是个什么意思阿?
是不是进行原数据请求在使用mask看要设置哪个参数?
{
int issued = in->caps_issued();
dout(10) << "_setattr mask " << mask << " issued " << ccap_string(issued) << dendl;
// make the change locally?
if (in->caps_issued_mask(CEPH_CAP_AUTH_EXCL)) {
if (mask & CEPH_SETATTR_MODE) {
in->ctime = g_clock.now();
in->mode = (in->mode & ~07777) | (attr->st_mode & 07777);
mark_caps_dirty(in, CEPH_CAP_AUTH_EXCL);
mask &= ~CEPH_SETATTR_MODE;
}
if (mask & CEPH_SETATTR_UID) {
in->ctime = g_clock.now();
in->uid = attr->st_uid;
mark_caps_dirty(in, CEPH_CAP_AUTH_EXCL);
mask &= ~CEPH_SETATTR_UID;
}
if (mask & CEPH_SETATTR_GID) {
in->ctime = g_clock.now();
in->gid = attr->st_gid;
mark_caps_dirty(in, CEPH_CAP_AUTH_EXCL);
mask &= ~CEPH_SETATTR_GID;
}
}
if (in->caps_issued_mask(CEPH_CAP_FILE_EXCL)) {
if (mask & (CEPH_SETATTR_MTIME|CEPH_SETATTR_ATIME)) {
if (mask & CEPH_SETATTR_MTIME)
in->mtime = utime_t(attr->st_mtime_sec, attr->st_mtime_micro);
if (mask & CEPH_SETATTR_ATIME)
in->atime = utime_t(attr->st_atime_sec, attr->st_atime_micro);
in->ctime = g_clock.now();
in->time_warp_seq++;
mark_caps_dirty(in, CEPH_CAP_FILE_EXCL);
mask &= ~(CEPH_SETATTR_MTIME|CEPH_SETATTR_ATIME);
}
}
if (!mask)
return 0;
MetaRequest *req = new MetaRequest(CEPH_MDS_OP_SETATTR);///////////
filepath path;
in->make_path(path);
req->set_filepath(path);
if (mask & CEPH_SETATTR_MODE) {
req->head.args.setattr.mode = attr->st_mode;
req->inode_drop |= CEPH_CAP_AUTH_SHARED;
req->inode = in;
}
if (mask & CEPH_SETATTR_UID) {
req->head.args.setattr.uid = attr->st_uid;
req->inode_drop |= CEPH_CAP_AUTH_SHARED;
req->inode = in;
}
if (mask & CEPH_SETATTR_GID) {
req->head.args.setattr.gid = attr->st_gid;
req->inode_drop |= CEPH_CAP_AUTH_SHARED;
req->inode = in;
}
if (mask & CEPH_SETATTR_MTIME) {
req->head.args.setattr.mtime =
utime_t(attr->st_mtime_sec, attr->st_mtime_micro);
req->inode_drop |= CEPH_CAP_AUTH_SHARED | CEPH_CAP_FILE_RD |
CEPH_CAP_FILE_WR;
req->inode = in;
}
if (mask & CEPH_SETATTR_ATIME) {
req->head.args.setattr.atime =
utime_t(attr->st_atime_sec, attr->st_atime_micro);
req->inode_drop |= CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_RD |
CEPH_CAP_FILE_WR;
req->inode = in;
}
if (mask & CEPH_SETATTR_SIZE) {
if ((unsigned long)attr->st_size < mdsmap->get_max_filesize())
req->head.args.setattr.size = attr->st_size;
else { //too big!
delete req;
return -EFBIG;
}
req->inode_drop |= CEPH_CAP_AUTH_SHARED | CEPH_CAP_FILE_RD |
CEPH_CAP_FILE_WR;
req->inode = in;
}
req->head.args.setattr.mask = mask;
int res = make_request(req, uid, gid);
dout(10) << "_setattr result=" << res << dendl;
return res;
}
从打了很多///////的那句开始是个什么意思阿?
是不是进行原数据请求在使用mask看要设置哪个参数?
作者: hjwsm1989 发布时间: 2010-08-02
好家伙,这个怎么能看得懂?期待高手。。。
作者: rain_fish 发布时间: 2010-08-02
回复 rain_fish
是啊,还要大家多多指教,这个问题很难难搞懂……
是啊,还要大家多多指教,这个问题很难难搞懂……
作者: hjwsm1989 发布时间: 2010-08-02
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28