Lines Matching refs:op
664 static void afs_do_lookup_success(struct afs_operation *op)
674 for (i = 0; i < op->nr_files; i++) {
677 vp = &op->file[0];
680 op->call_abort_code = abort_code;
681 afs_op_set_error(op, afs_abort_to_error(abort_code));
682 op->cumul_error.abort_code = abort_code;
687 vp = &op->file[1];
691 vp = &op->more_files[i - 2];
696 trace_afs_bulkstat_error(op, &vp->fid, i, vp->scb.status.abort_code);
703 afs_vnode_commit_status(op, vp);
705 inode = afs_iget(op, vp);
708 afs_cache_permit(vnode, op->key,
710 op->cb_v_break,
778 struct afs_operation *op;
823 op = afs_alloc_operation(NULL, dvnode->volume);
824 if (IS_ERR(op)) {
825 ret = PTR_ERR(op);
829 afs_op_set_vnode(op, 0, dvnode);
830 afs_op_set_fid(op, 1, &cookie->fids[1]);
832 op->nr_files = cookie->nr_fids;
833 _debug("nr_files %u", op->nr_files);
836 if (op->nr_files > 2) {
837 op->more_files = kvcalloc(op->nr_files - 2,
840 if (!op->more_files) {
841 afs_op_nomem(op);
845 for (i = 2; i < op->nr_files; i++) {
846 vp = &op->more_files[i - 2];
869 afs_op_set_error(op, -ENOTSUPP);
871 op->ops = &afs_inline_bulk_status_operation;
872 afs_begin_vnode_operation(op);
873 afs_wait_for_operation(op);
876 if (afs_op_error(op) == -ENOTSUPP) {
878 * op if any of the lookups fails - so, for the moment, revert
879 * to FS.FetchStatus for op->file[1].
881 op->fetch_status.which = 1;
882 op->ops = &afs_lookup_fetch_status_operation;
883 afs_begin_vnode_operation(op);
884 afs_wait_for_operation(op);
888 if (!afs_op_error(op)) {
889 if (op->file[1].scb.status.abort_code) {
890 afs_op_accumulate_error(op, -ECONNABORTED,
891 op->file[1].scb.status.abort_code);
893 inode = &op->file[1].vnode->netfs.inode;
894 op->file[1].vnode = NULL;
898 if (op->file[0].scb.have_status)
899 dentry->d_fsdata = (void *)(unsigned long)op->file[0].scb.status.data_version;
901 dentry->d_fsdata = (void *)(unsigned long)op->file[0].dv_before;
902 ret = afs_put_operation(op);
1223 void afs_check_for_remote_deletion(struct afs_operation *op)
1225 struct afs_vnode *vnode = op->file[0].vnode;
1227 switch (afs_op_abort_code(op)) {
1238 static void afs_vnode_new_inode(struct afs_operation *op)
1240 struct afs_vnode_param *dvp = &op->file[0];
1241 struct afs_vnode_param *vp = &op->file[1];
1247 ASSERTCMP(afs_op_error(op), ==, 0);
1249 inode = afs_iget(op, vp);
1254 afs_op_accumulate_error(op, PTR_ERR(inode), 0);
1263 afs_init_new_symlink(vnode, op);
1264 if (!afs_op_error(op))
1265 afs_cache_permit(vnode, op->key, vnode->cb_break, &vp->scb);
1266 d_instantiate(op->dentry, inode);
1269 static void afs_create_success(struct afs_operation *op)
1271 _enter("op=%08x", op->debug_id);
1272 op->ctime = op->file[0].scb.status.mtime_client;
1273 afs_vnode_commit_status(op, &op->file[0]);
1274 afs_update_dentry_version(op, &op->file[0], op->dentry);
1275 afs_vnode_new_inode(op);
1278 static void afs_create_edit_dir(struct afs_operation *op)
1281 struct afs_vnode_param *dvp = &op->file[0];
1282 struct afs_vnode_param *vp = &op->file[1];
1285 _enter("op=%08x", op->debug_id);
1291 afs_edit_dir_add(dvnode, &op->dentry->d_name, &vp->fid,
1292 op->create.reason);
1297 static void afs_create_put(struct afs_operation *op)
1299 _enter("op=%08x", op->debug_id);
1301 if (afs_op_error(op))
1302 d_drop(op->dentry);
1320 struct afs_operation *op;
1327 op = afs_alloc_operation(NULL, dvnode->volume);
1328 if (IS_ERR(op)) {
1330 return ERR_CAST(op);
1335 afs_op_set_vnode(op, 0, dvnode);
1336 op->file[0].dv_delta = 1;
1337 op->file[0].modification = true;
1338 op->file[0].update_ctime = true;
1339 op->dentry = dentry;
1340 op->create.mode = S_IFDIR | mode;
1341 op->create.reason = afs_edit_dir_for_mkdir;
1342 op->mtime = current_time(dir);
1343 op->ops = &afs_mkdir_operation;
1344 ret = afs_do_sync_operation(op);
1364 static void afs_rmdir_success(struct afs_operation *op)
1366 _enter("op=%08x", op->debug_id);
1367 op->ctime = op->file[0].scb.status.mtime_client;
1368 afs_vnode_commit_status(op, &op->file[0]);
1369 afs_update_dentry_version(op, &op->file[0], op->dentry);
1372 static void afs_rmdir_edit_dir(struct afs_operation *op)
1375 struct afs_vnode_param *dvp = &op->file[0];
1378 _enter("op=%08x", op->debug_id);
1379 afs_dir_remove_subdir(op->dentry);
1385 afs_edit_dir_remove(dvnode, &op->dentry->d_name,
1391 static void afs_rmdir_put(struct afs_operation *op)
1393 _enter("op=%08x", op->debug_id);
1394 if (op->file[1].vnode)
1395 up_write(&op->file[1].vnode->rmdir_lock);
1412 struct afs_operation *op;
1419 op = afs_alloc_operation(NULL, dvnode->volume);
1420 if (IS_ERR(op))
1421 return PTR_ERR(op);
1425 afs_op_set_vnode(op, 0, dvnode);
1426 op->file[0].dv_delta = 1;
1427 op->file[0].modification = true;
1428 op->file[0].update_ctime = true;
1430 op->dentry = dentry;
1431 op->ops = &afs_rmdir_operation;
1436 ret = afs_validate(vnode, op->key);
1445 op->file[1].vnode = vnode;
1448 ret = afs_do_sync_operation(op);
1458 ret = afs_put_operation(op);
1472 static void afs_dir_remove_link(struct afs_operation *op)
1474 struct afs_vnode *dvnode = op->file[0].vnode;
1475 struct afs_vnode *vnode = op->file[1].vnode;
1476 struct dentry *dentry = op->dentry;
1479 if (afs_op_error(op) ||
1480 (op->file[1].scb.have_status && op->file[1].scb.have_error))
1501 ret = afs_validate(vnode, op->key);
1503 afs_op_set_error(op, ret);
1506 _debug("nlink %d [val %d]", vnode->netfs.inode.i_nlink, afs_op_error(op));
1509 static void afs_unlink_success(struct afs_operation *op)
1511 _enter("op=%08x", op->debug_id);
1512 op->ctime = op->file[0].scb.status.mtime_client;
1513 afs_check_dir_conflict(op, &op->file[0]);
1514 afs_vnode_commit_status(op, &op->file[0]);
1515 afs_vnode_commit_status(op, &op->file[1]);
1516 afs_update_dentry_version(op, &op->file[0], op->dentry);
1517 afs_dir_remove_link(op);
1520 static void afs_unlink_edit_dir(struct afs_operation *op)
1523 struct afs_vnode_param *dvp = &op->file[0];
1526 _enter("op=%08x", op->debug_id);
1531 afs_edit_dir_remove(dvnode, &op->dentry->d_name,
1537 static void afs_unlink_put(struct afs_operation *op)
1539 _enter("op=%08x", op->debug_id);
1540 if (op->unlink.need_rehash && afs_op_error(op) < 0 && afs_op_error(op) != -ENOENT)
1541 d_rehash(op->dentry);
1558 struct afs_operation *op;
1569 op = afs_alloc_operation(NULL, dvnode->volume);
1570 if (IS_ERR(op))
1571 return PTR_ERR(op);
1575 afs_op_set_vnode(op, 0, dvnode);
1576 op->file[0].dv_delta = 1;
1577 op->file[0].modification = true;
1578 op->file[0].update_ctime = true;
1581 ret = afs_validate(vnode, op->key);
1583 afs_op_set_error(op, ret);
1592 afs_op_set_error(op, afs_sillyrename(dvnode, vnode, dentry, op->key));
1598 op->unlink.need_rehash = true;
1602 op->file[1].vnode = vnode;
1603 op->file[1].update_ctime = true;
1604 op->file[1].op_unlinked = true;
1605 op->dentry = dentry;
1606 op->ops = &afs_unlink_operation;
1607 afs_begin_vnode_operation(op);
1608 afs_wait_for_operation(op);
1613 if (afs_op_error(op) == 0 && (op->flags & AFS_OPERATION_DIR_CONFLICT)) {
1614 op->file[1].update_ctime = false;
1615 op->fetch_status.which = 1;
1616 op->ops = &afs_fetch_status_operation;
1617 afs_begin_vnode_operation(op);
1618 afs_wait_for_operation(op);
1622 ret = afs_put_operation(op);
1642 struct afs_operation *op;
1652 op = afs_alloc_operation(NULL, dvnode->volume);
1653 if (IS_ERR(op)) {
1654 ret = PTR_ERR(op);
1660 afs_op_set_vnode(op, 0, dvnode);
1661 op->file[0].dv_delta = 1;
1662 op->file[0].modification = true;
1663 op->file[0].update_ctime = true;
1665 op->dentry = dentry;
1666 op->create.mode = S_IFREG | mode;
1667 op->create.reason = afs_edit_dir_for_create;
1668 op->mtime = current_time(dir);
1669 op->ops = &afs_create_operation;
1670 ret = afs_do_sync_operation(op);
1680 static void afs_link_success(struct afs_operation *op)
1682 struct afs_vnode_param *dvp = &op->file[0];
1683 struct afs_vnode_param *vp = &op->file[1];
1685 _enter("op=%08x", op->debug_id);
1686 op->ctime = dvp->scb.status.mtime_client;
1687 afs_vnode_commit_status(op, dvp);
1688 afs_vnode_commit_status(op, vp);
1689 afs_update_dentry_version(op, dvp, op->dentry);
1690 if (op->dentry_2->d_parent == op->dentry->d_parent)
1691 afs_update_dentry_version(op, dvp, op->dentry_2);
1693 d_instantiate(op->dentry, &vp->vnode->netfs.inode);
1696 static void afs_link_put(struct afs_operation *op)
1698 _enter("op=%08x", op->debug_id);
1699 if (afs_op_error(op))
1700 d_drop(op->dentry);
1718 struct afs_operation *op;
1731 op = afs_alloc_operation(NULL, dvnode->volume);
1732 if (IS_ERR(op)) {
1733 ret = PTR_ERR(op);
1739 ret = afs_validate(vnode, op->key);
1743 afs_op_set_vnode(op, 0, dvnode);
1744 afs_op_set_vnode(op, 1, vnode);
1745 op->file[0].dv_delta = 1;
1746 op->file[0].modification = true;
1747 op->file[0].update_ctime = true;
1748 op->file[1].update_ctime = true;
1750 op->dentry = dentry;
1751 op->dentry_2 = from;
1752 op->ops = &afs_link_operation;
1753 op->create.reason = afs_edit_dir_for_link;
1754 ret = afs_do_sync_operation(op);
1759 afs_put_operation(op);
1782 struct afs_operation *op;
1798 op = afs_alloc_operation(NULL, dvnode->volume);
1799 if (IS_ERR(op)) {
1800 ret = PTR_ERR(op);
1806 afs_op_set_vnode(op, 0, dvnode);
1807 op->file[0].dv_delta = 1;
1809 op->dentry = dentry;
1810 op->ops = &afs_symlink_operation;
1811 op->create.reason = afs_edit_dir_for_symlink;
1812 op->create.symlink = content;
1813 op->mtime = current_time(dir);
1814 ret = afs_do_sync_operation(op);
1824 static void afs_rename_success(struct afs_operation *op)
1826 struct afs_vnode *vnode = AFS_FS_I(d_inode(op->dentry));
1828 _enter("op=%08x", op->debug_id);
1830 op->ctime = op->file[0].scb.status.mtime_client;
1831 afs_check_dir_conflict(op, &op->file[1]);
1832 afs_vnode_commit_status(op, &op->file[0]);
1833 if (op->file[1].vnode != op->file[0].vnode) {
1834 op->ctime = op->file[1].scb.status.mtime_client;
1835 afs_vnode_commit_status(op, &op->file[1]);
1842 op->file[0].vnode != op->file[1].vnode) {
1856 static void afs_rename_edit_dir(struct afs_operation *op)
1859 struct afs_vnode_param *orig_dvp = &op->file[0];
1860 struct afs_vnode_param *new_dvp = &op->file[1];
1863 struct afs_vnode *vnode = AFS_FS_I(d_inode(op->dentry));
1864 struct dentry *old_dentry = op->dentry;
1865 struct dentry *new_dentry = op->dentry_2;
1868 _enter("op=%08x", op->debug_id);
1870 if (op->rename.rehash) {
1871 d_rehash(op->rename.rehash);
1872 op->rename.rehash = NULL;
1892 if (!op->rename.new_negative)
1922 afs_update_dentry_version(op, new_dvp, op->dentry);
1923 afs_update_dentry_version(op, new_dvp, op->dentry_2);
1933 static void afs_rename_put(struct afs_operation *op)
1935 _enter("op=%08x", op->debug_id);
1936 if (op->rename.rehash)
1937 d_rehash(op->rename.rehash);
1938 dput(op->rename.tmp);
1939 if (afs_op_error(op))
1940 d_rehash(op->dentry);
1958 struct afs_operation *op;
1979 op = afs_alloc_operation(NULL, orig_dvnode->volume);
1980 if (IS_ERR(op))
1981 return PTR_ERR(op);
1987 ret = afs_validate(vnode, op->key);
1988 afs_op_set_error(op, ret);
1992 afs_op_set_vnode(op, 0, orig_dvnode);
1993 afs_op_set_vnode(op, 1, new_dvnode); /* May be same as orig_dvnode */
1994 op->file[0].dv_delta = 1;
1995 op->file[1].dv_delta = 1;
1996 op->file[0].modification = true;
1997 op->file[1].modification = true;
1998 op->file[0].update_ctime = true;
1999 op->file[1].update_ctime = true;
2001 op->dentry = old_dentry;
2002 op->dentry_2 = new_dentry;
2003 op->rename.new_negative = d_is_negative(new_dentry);
2004 op->ops = &afs_rename_operation;
2017 op->rename.rehash = new_dentry;
2022 op->rename.tmp = d_alloc(new_dentry->d_parent,
2024 if (!op->rename.tmp) {
2025 afs_op_nomem(op);
2031 new_dentry, op->key);
2033 afs_op_set_error(op, ret);
2037 op->dentry_2 = op->rename.tmp;
2038 op->rename.rehash = NULL;
2039 op->rename.new_negative = true;
2045 * to reflect it's new parent's new data_version after the op, but
2046 * d_revalidate may see old_dentry between the op having taken place
2054 ret = afs_do_sync_operation(op);
2062 ret = afs_put_operation(op);