Lines Matching refs:req

387 		struct ceph_mds_request *req;  in ceph_readdir()  local
409 req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS); in ceph_readdir()
410 if (IS_ERR(req)) in ceph_readdir()
411 return PTR_ERR(req); in ceph_readdir()
413 err = ceph_alloc_readdir_reply_buffer(req, inode); in ceph_readdir()
415 ceph_mdsc_put_request(req); in ceph_readdir()
419 req->r_direct_mode = USE_AUTH_MDS; in ceph_readdir()
421 req->r_direct_hash = ceph_frag_value(frag); in ceph_readdir()
422 __set_bit(CEPH_MDS_R_DIRECT_IS_HASH, &req->r_req_flags); in ceph_readdir()
423 req->r_inode_drop = CEPH_CAP_FILE_EXCL; in ceph_readdir()
428 req->r_path2 = kzalloc(NAME_MAX + 1, GFP_KERNEL); in ceph_readdir()
429 if (!req->r_path2) { in ceph_readdir()
430 ceph_mdsc_put_request(req); in ceph_readdir()
433 memcpy(req->r_path2, dfi->last_name, len); in ceph_readdir()
435 err = ceph_encode_encrypted_dname(inode, req->r_path2, len); in ceph_readdir()
437 ceph_mdsc_put_request(req); in ceph_readdir()
441 req->r_args.readdir.offset_hash = in ceph_readdir()
445 req->r_dir_release_cnt = dfi->dir_release_count; in ceph_readdir()
446 req->r_dir_ordered_cnt = dfi->dir_ordered_count; in ceph_readdir()
447 req->r_readdir_cache_idx = dfi->readdir_cache_idx; in ceph_readdir()
448 req->r_readdir_offset = dfi->next_offset; in ceph_readdir()
449 req->r_args.readdir.frag = cpu_to_le32(frag); in ceph_readdir()
450 req->r_args.readdir.flags = in ceph_readdir()
453 req->r_inode = inode; in ceph_readdir()
455 req->r_dentry = dget(file->f_path.dentry); in ceph_readdir()
456 err = ceph_mdsc_do_request(mdsc, NULL, req); in ceph_readdir()
458 ceph_mdsc_put_request(req); in ceph_readdir()
464 (int)req->r_reply_info.dir_end, in ceph_readdir()
465 (int)req->r_reply_info.dir_complete, in ceph_readdir()
466 (int)req->r_reply_info.hash_order); in ceph_readdir()
468 rinfo = &req->r_reply_info; in ceph_readdir()
472 dfi->next_offset = req->r_readdir_offset; in ceph_readdir()
481 dfi->last_readdir = req; in ceph_readdir()
483 if (test_bit(CEPH_MDS_R_DID_PREPOPULATE, &req->r_req_flags)) { in ceph_readdir()
484 dfi->readdir_cache_idx = req->r_readdir_cache_idx; in ceph_readdir()
492 dfi->dir_release_count = req->r_dir_release_cnt; in ceph_readdir()
493 dfi->dir_ordered_count = req->r_dir_ordered_cnt; in ceph_readdir()
508 unsigned next_offset = req->r_reply_info.dir_end ? in ceph_readdir()
517 } else if (req->r_reply_info.dir_end) { in ceph_readdir()
722 struct dentry *ceph_handle_snapdir(struct ceph_mds_request *req, in ceph_handle_snapdir() argument
756 struct dentry *ceph_finish_lookup(struct ceph_mds_request *req, in ceph_finish_lookup() argument
759 struct ceph_client *cl = req->r_mdsc->fsc->client; in ceph_finish_lookup()
764 if (!req->r_reply_info.head->is_dentry) { in ceph_finish_lookup()
778 else if (dentry != req->r_dentry) in ceph_finish_lookup()
779 dentry = dget(req->r_dentry); /* we got spliced */ in ceph_finish_lookup()
801 struct ceph_mds_request *req; in ceph_lookup() local
852 req = ceph_mdsc_create_request(mdsc, op, USE_ANY_MDS); in ceph_lookup()
853 if (IS_ERR(req)) in ceph_lookup()
854 return ERR_CAST(req); in ceph_lookup()
855 req->r_dentry = dget(dentry); in ceph_lookup()
856 req->r_num_caps = 2; in ceph_lookup()
861 req->r_args.getattr.mask = cpu_to_le32(mask); in ceph_lookup()
864 req->r_parent = dir; in ceph_lookup()
865 set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags); in ceph_lookup()
866 err = ceph_mdsc_do_request(mdsc, NULL, req); in ceph_lookup()
870 res = ceph_handle_snapdir(req, dentry); in ceph_lookup()
878 dentry = ceph_finish_lookup(req, dentry, err); in ceph_lookup()
879 ceph_mdsc_put_request(req); /* will dput(dentry) */ in ceph_lookup()
916 struct ceph_mds_request *req; in ceph_mknod() local
934 req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_MKNOD, USE_AUTH_MDS); in ceph_mknod()
935 if (IS_ERR(req)) { in ceph_mknod()
936 err = PTR_ERR(req); in ceph_mknod()
940 req->r_new_inode = ceph_new_inode(dir, dentry, &mode, &as_ctx); in ceph_mknod()
941 if (IS_ERR(req->r_new_inode)) { in ceph_mknod()
942 err = PTR_ERR(req->r_new_inode); in ceph_mknod()
943 req->r_new_inode = NULL; in ceph_mknod()
948 set_bit(CEPH_MDS_R_FSCRYPT_FILE, &req->r_req_flags); in ceph_mknod()
950 req->r_dentry = dget(dentry); in ceph_mknod()
951 req->r_num_caps = 2; in ceph_mknod()
952 req->r_parent = dir; in ceph_mknod()
954 set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags); in ceph_mknod()
955 req->r_mnt_idmap = mnt_idmap_get(idmap); in ceph_mknod()
956 req->r_args.mknod.mode = cpu_to_le32(mode); in ceph_mknod()
957 req->r_args.mknod.rdev = cpu_to_le32(rdev); in ceph_mknod()
958 req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL | in ceph_mknod()
960 req->r_dentry_unless = CEPH_CAP_FILE_EXCL; in ceph_mknod()
962 ceph_as_ctx_to_req(req, &as_ctx); in ceph_mknod()
964 err = ceph_mdsc_do_request(mdsc, dir, req); in ceph_mknod()
965 if (!err && !req->r_reply_info.head->is_dentry) in ceph_mknod()
968 ceph_mdsc_put_request(req); in ceph_mknod()
985 static int prep_encrypted_symlink_target(struct ceph_mds_request *req, in prep_encrypted_symlink_target() argument
992 err = fscrypt_prepare_symlink(req->r_parent, dest, len, PATH_MAX, in prep_encrypted_symlink_target()
997 err = fscrypt_encrypt_symlink(req->r_new_inode, dest, len, &osd_link); in prep_encrypted_symlink_target()
1001 req->r_path2 = kmalloc(CEPH_BASE64_CHARS(osd_link.len) + 1, GFP_KERNEL); in prep_encrypted_symlink_target()
1002 if (!req->r_path2) { in prep_encrypted_symlink_target()
1007 len = ceph_base64_encode(osd_link.name, osd_link.len, req->r_path2); in prep_encrypted_symlink_target()
1008 req->r_path2[len] = '\0'; in prep_encrypted_symlink_target()
1014 static int prep_encrypted_symlink_target(struct ceph_mds_request *req, in prep_encrypted_symlink_target() argument
1026 struct ceph_mds_request *req; in ceph_symlink() local
1045 req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_SYMLINK, USE_AUTH_MDS); in ceph_symlink()
1046 if (IS_ERR(req)) { in ceph_symlink()
1047 err = PTR_ERR(req); in ceph_symlink()
1051 req->r_new_inode = ceph_new_inode(dir, dentry, &mode, &as_ctx); in ceph_symlink()
1052 if (IS_ERR(req->r_new_inode)) { in ceph_symlink()
1053 err = PTR_ERR(req->r_new_inode); in ceph_symlink()
1054 req->r_new_inode = NULL; in ceph_symlink()
1058 req->r_parent = dir; in ceph_symlink()
1061 if (IS_ENCRYPTED(req->r_new_inode)) { in ceph_symlink()
1062 err = prep_encrypted_symlink_target(req, dest); in ceph_symlink()
1066 req->r_path2 = kstrdup(dest, GFP_KERNEL); in ceph_symlink()
1067 if (!req->r_path2) { in ceph_symlink()
1073 set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags); in ceph_symlink()
1074 req->r_mnt_idmap = mnt_idmap_get(idmap); in ceph_symlink()
1075 req->r_dentry = dget(dentry); in ceph_symlink()
1076 req->r_num_caps = 2; in ceph_symlink()
1077 req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL | in ceph_symlink()
1079 req->r_dentry_unless = CEPH_CAP_FILE_EXCL; in ceph_symlink()
1081 ceph_as_ctx_to_req(req, &as_ctx); in ceph_symlink()
1083 err = ceph_mdsc_do_request(mdsc, dir, req); in ceph_symlink()
1084 if (!err && !req->r_reply_info.head->is_dentry) in ceph_symlink()
1087 ceph_mdsc_put_request(req); in ceph_symlink()
1100 struct ceph_mds_request *req; in ceph_mkdir() local
1136 req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS); in ceph_mkdir()
1137 if (IS_ERR(req)) { in ceph_mkdir()
1138 ret = ERR_CAST(req); in ceph_mkdir()
1143 req->r_new_inode = ceph_new_inode(dir, dentry, &mode, &as_ctx); in ceph_mkdir()
1144 if (IS_ERR(req->r_new_inode)) { in ceph_mkdir()
1145 ret = ERR_CAST(req->r_new_inode); in ceph_mkdir()
1146 req->r_new_inode = NULL; in ceph_mkdir()
1150 req->r_dentry = dget(dentry); in ceph_mkdir()
1151 req->r_num_caps = 2; in ceph_mkdir()
1152 req->r_parent = dir; in ceph_mkdir()
1154 set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags); in ceph_mkdir()
1156 req->r_mnt_idmap = mnt_idmap_get(idmap); in ceph_mkdir()
1157 req->r_args.mkdir.mode = cpu_to_le32(mode); in ceph_mkdir()
1158 req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL | in ceph_mkdir()
1160 req->r_dentry_unless = CEPH_CAP_FILE_EXCL; in ceph_mkdir()
1162 ceph_as_ctx_to_req(req, &as_ctx); in ceph_mkdir()
1164 err = ceph_mdsc_do_request(mdsc, dir, req); in ceph_mkdir()
1166 !req->r_reply_info.head->is_target && in ceph_mkdir()
1167 !req->r_reply_info.head->is_dentry) in ceph_mkdir()
1171 if (!IS_ERR(ret) && req->r_dentry != dentry) in ceph_mkdir()
1173 ret = dget(req->r_dentry); in ceph_mkdir()
1174 ceph_mdsc_put_request(req); in ceph_mkdir()
1192 struct ceph_mds_request *req; in ceph_link() local
1211 req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_LINK, USE_AUTH_MDS); in ceph_link()
1212 if (IS_ERR(req)) { in ceph_link()
1214 return PTR_ERR(req); in ceph_link()
1216 req->r_dentry = dget(dentry); in ceph_link()
1217 req->r_num_caps = 2; in ceph_link()
1218 req->r_old_dentry = dget(old_dentry); in ceph_link()
1224 req->r_ino2 = ceph_vino(d_inode(old_dentry)); in ceph_link()
1225 req->r_parent = dir; in ceph_link()
1227 set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags); in ceph_link()
1228 req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_XATTR_EXCL; in ceph_link()
1229 req->r_dentry_unless = CEPH_CAP_FILE_EXCL; in ceph_link()
1231 req->r_old_inode_drop = CEPH_CAP_LINK_SHARED | CEPH_CAP_LINK_EXCL; in ceph_link()
1232 err = ceph_mdsc_do_request(mdsc, dir, req); in ceph_link()
1235 } else if (!req->r_reply_info.head->is_dentry) { in ceph_link()
1239 ceph_mdsc_put_request(req); in ceph_link()
1244 struct ceph_mds_request *req) in ceph_async_unlink_cb() argument
1246 struct dentry *dentry = req->r_dentry; in ceph_async_unlink_cb()
1250 int result = req->r_err ? req->r_err : in ceph_async_unlink_cb()
1251 le32_to_cpu(req->r_reply_info.head->result); in ceph_async_unlink_cb()
1280 mapping_set_error(req->r_parent->i_mapping, result); in ceph_async_unlink_cb()
1281 ceph_dir_clear_complete(req->r_parent); in ceph_async_unlink_cb()
1288 mapping_set_error(req->r_old_inode->i_mapping, result); in ceph_async_unlink_cb()
1295 iput(req->r_old_inode); in ceph_async_unlink_cb()
1296 ceph_mdsc_release_dir_caps(req); in ceph_async_unlink_cb()
1344 struct ceph_mds_request *req; in ceph_unlink() local
1390 req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS); in ceph_unlink()
1391 if (IS_ERR(req)) { in ceph_unlink()
1392 err = PTR_ERR(req); in ceph_unlink()
1395 req->r_dentry = dget(dentry); in ceph_unlink()
1396 req->r_num_caps = 2; in ceph_unlink()
1397 req->r_parent = dir; in ceph_unlink()
1399 req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_XATTR_EXCL; in ceph_unlink()
1400 req->r_dentry_unless = CEPH_CAP_FILE_EXCL; in ceph_unlink()
1401 req->r_inode_drop = ceph_drop_caps_for_unlink(inode); in ceph_unlink()
1404 (req->r_dir_caps = get_caps_for_async_unlink(dir, dentry))) { in ceph_unlink()
1409 ceph_cap_string(req->r_dir_caps)); in ceph_unlink()
1410 set_bit(CEPH_MDS_R_ASYNC, &req->r_req_flags); in ceph_unlink()
1411 req->r_callback = ceph_async_unlink_cb; in ceph_unlink()
1412 req->r_old_inode = d_inode(dentry); in ceph_unlink()
1413 ihold(req->r_old_inode); in ceph_unlink()
1424 err = ceph_mdsc_submit_request(mdsc, dir, req); in ceph_unlink()
1443 ceph_mdsc_put_request(req); in ceph_unlink()
1448 set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags); in ceph_unlink()
1449 err = ceph_mdsc_do_request(mdsc, dir, req); in ceph_unlink()
1450 if (!err && !req->r_reply_info.head->is_dentry) in ceph_unlink()
1454 ceph_mdsc_put_request(req); in ceph_unlink()
1465 struct ceph_mds_request *req; in ceph_rename() local
1497 req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS); in ceph_rename()
1498 if (IS_ERR(req)) in ceph_rename()
1499 return PTR_ERR(req); in ceph_rename()
1501 req->r_dentry = dget(new_dentry); in ceph_rename()
1502 req->r_num_caps = 2; in ceph_rename()
1503 req->r_old_dentry = dget(old_dentry); in ceph_rename()
1504 req->r_old_dentry_dir = old_dir; in ceph_rename()
1505 req->r_parent = new_dir; in ceph_rename()
1507 set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags); in ceph_rename()
1508 req->r_old_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_XATTR_EXCL; in ceph_rename()
1509 req->r_old_dentry_unless = CEPH_CAP_FILE_EXCL; in ceph_rename()
1510 req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_XATTR_EXCL; in ceph_rename()
1511 req->r_dentry_unless = CEPH_CAP_FILE_EXCL; in ceph_rename()
1513 req->r_old_inode_drop = CEPH_CAP_LINK_SHARED | CEPH_CAP_LINK_EXCL; in ceph_rename()
1515 req->r_inode_drop = in ceph_rename()
1518 err = ceph_mdsc_do_request(mdsc, old_dir, req); in ceph_rename()
1519 if (!err && !req->r_reply_info.head->is_dentry) { in ceph_rename()
1527 ceph_mdsc_put_request(req); in ceph_rename()
1991 struct ceph_mds_request *req; in ceph_d_revalidate() local
2002 req = ceph_mdsc_create_request(mdsc, op, USE_ANY_MDS); in ceph_d_revalidate()
2003 if (!IS_ERR(req)) { in ceph_d_revalidate()
2004 req->r_dentry = dget(dentry); in ceph_d_revalidate()
2005 req->r_num_caps = 2; in ceph_d_revalidate()
2006 req->r_parent = dir; in ceph_d_revalidate()
2009 req->r_dname = name; in ceph_d_revalidate()
2014 req->r_args.getattr.mask = cpu_to_le32(mask); in ceph_d_revalidate()
2016 err = ceph_mdsc_do_request(mdsc, NULL, req); in ceph_d_revalidate()
2020 d_inode(dentry) == req->r_target_inode) in ceph_d_revalidate()
2030 ceph_mdsc_put_request(req); in ceph_d_revalidate()