Lines Matching refs:op
681 static void afs_do_lookup_success(struct afs_operation *op) in afs_do_lookup_success() argument
691 for (i = 0; i < op->nr_files; i++) { in afs_do_lookup_success()
694 vp = &op->file[0]; in afs_do_lookup_success()
697 op->call_abort_code = abort_code; in afs_do_lookup_success()
698 afs_op_set_error(op, afs_abort_to_error(abort_code)); in afs_do_lookup_success()
699 op->cumul_error.abort_code = abort_code; in afs_do_lookup_success()
704 vp = &op->file[1]; in afs_do_lookup_success()
708 vp = &op->more_files[i - 2]; in afs_do_lookup_success()
713 trace_afs_bulkstat_error(op, &vp->fid, i, vp->scb.status.abort_code); in afs_do_lookup_success()
720 afs_vnode_commit_status(op, vp); in afs_do_lookup_success()
722 inode = afs_iget(op, vp); in afs_do_lookup_success()
725 afs_cache_permit(vnode, op->key, in afs_do_lookup_success()
727 op->cb_v_break, in afs_do_lookup_success()
796 struct afs_operation *op; in afs_do_lookup() local
840 op = afs_alloc_operation(NULL, dvnode->volume); in afs_do_lookup()
841 if (IS_ERR(op)) { in afs_do_lookup()
842 ret = PTR_ERR(op); in afs_do_lookup()
846 afs_op_set_vnode(op, 0, dvnode); in afs_do_lookup()
847 afs_op_set_fid(op, 1, &cookie->fids[1]); in afs_do_lookup()
849 op->nr_files = cookie->nr_fids; in afs_do_lookup()
850 _debug("nr_files %u", op->nr_files); in afs_do_lookup()
853 if (op->nr_files > 2) { in afs_do_lookup()
854 op->more_files = kvcalloc(op->nr_files - 2, in afs_do_lookup()
857 if (!op->more_files) { in afs_do_lookup()
858 afs_op_nomem(op); in afs_do_lookup()
862 for (i = 2; i < op->nr_files; i++) { in afs_do_lookup()
863 vp = &op->more_files[i - 2]; in afs_do_lookup()
886 afs_op_set_error(op, -ENOTSUPP); in afs_do_lookup()
888 op->ops = &afs_inline_bulk_status_operation; in afs_do_lookup()
889 afs_begin_vnode_operation(op); in afs_do_lookup()
890 afs_wait_for_operation(op); in afs_do_lookup()
893 if (afs_op_error(op) == -ENOTSUPP) { in afs_do_lookup()
898 op->fetch_status.which = 1; in afs_do_lookup()
899 op->ops = &afs_lookup_fetch_status_operation; in afs_do_lookup()
900 afs_begin_vnode_operation(op); in afs_do_lookup()
901 afs_wait_for_operation(op); in afs_do_lookup()
905 if (!afs_op_error(op)) { in afs_do_lookup()
906 if (op->file[1].scb.status.abort_code) { in afs_do_lookup()
907 afs_op_accumulate_error(op, -ECONNABORTED, in afs_do_lookup()
908 op->file[1].scb.status.abort_code); in afs_do_lookup()
910 inode = &op->file[1].vnode->netfs.inode; in afs_do_lookup()
911 op->file[1].vnode = NULL; in afs_do_lookup()
915 if (op->file[0].scb.have_status) in afs_do_lookup()
916 dentry->d_fsdata = (void *)(unsigned long)op->file[0].scb.status.data_version; in afs_do_lookup()
918 dentry->d_fsdata = (void *)(unsigned long)op->file[0].dv_before; in afs_do_lookup()
919 ret = afs_put_operation(op); in afs_do_lookup()
1268 void afs_check_for_remote_deletion(struct afs_operation *op) in afs_check_for_remote_deletion() argument
1270 struct afs_vnode *vnode = op->file[0].vnode; in afs_check_for_remote_deletion()
1272 switch (afs_op_abort_code(op)) { in afs_check_for_remote_deletion()
1283 static void afs_vnode_new_inode(struct afs_operation *op) in afs_vnode_new_inode() argument
1285 struct afs_vnode_param *vp = &op->file[1]; in afs_vnode_new_inode()
1291 ASSERTCMP(afs_op_error(op), ==, 0); in afs_vnode_new_inode()
1293 inode = afs_iget(op, vp); in afs_vnode_new_inode()
1298 afs_op_accumulate_error(op, PTR_ERR(inode), 0); in afs_vnode_new_inode()
1304 if (!afs_op_error(op)) in afs_vnode_new_inode()
1305 afs_cache_permit(vnode, op->key, vnode->cb_break, &vp->scb); in afs_vnode_new_inode()
1306 d_instantiate(op->dentry, inode); in afs_vnode_new_inode()
1309 static void afs_create_success(struct afs_operation *op) in afs_create_success() argument
1311 _enter("op=%08x", op->debug_id); in afs_create_success()
1312 op->ctime = op->file[0].scb.status.mtime_client; in afs_create_success()
1313 afs_vnode_commit_status(op, &op->file[0]); in afs_create_success()
1314 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_create_success()
1315 afs_vnode_new_inode(op); in afs_create_success()
1318 static void afs_create_edit_dir(struct afs_operation *op) in afs_create_edit_dir() argument
1320 struct afs_vnode_param *dvp = &op->file[0]; in afs_create_edit_dir()
1321 struct afs_vnode_param *vp = &op->file[1]; in afs_create_edit_dir()
1324 _enter("op=%08x", op->debug_id); in afs_create_edit_dir()
1329 afs_edit_dir_add(dvnode, &op->dentry->d_name, &vp->fid, in afs_create_edit_dir()
1330 op->create.reason); in afs_create_edit_dir()
1334 static void afs_create_put(struct afs_operation *op) in afs_create_put() argument
1336 _enter("op=%08x", op->debug_id); in afs_create_put()
1338 if (afs_op_error(op)) in afs_create_put()
1339 d_drop(op->dentry); in afs_create_put()
1357 struct afs_operation *op; in afs_mkdir() local
1363 op = afs_alloc_operation(NULL, dvnode->volume); in afs_mkdir()
1364 if (IS_ERR(op)) { in afs_mkdir()
1366 return PTR_ERR(op); in afs_mkdir()
1369 afs_op_set_vnode(op, 0, dvnode); in afs_mkdir()
1370 op->file[0].dv_delta = 1; in afs_mkdir()
1371 op->file[0].modification = true; in afs_mkdir()
1372 op->file[0].update_ctime = true; in afs_mkdir()
1373 op->dentry = dentry; in afs_mkdir()
1374 op->create.mode = S_IFDIR | mode; in afs_mkdir()
1375 op->create.reason = afs_edit_dir_for_mkdir; in afs_mkdir()
1376 op->mtime = current_time(dir); in afs_mkdir()
1377 op->ops = &afs_mkdir_operation; in afs_mkdir()
1378 return afs_do_sync_operation(op); in afs_mkdir()
1396 static void afs_rmdir_success(struct afs_operation *op) in afs_rmdir_success() argument
1398 _enter("op=%08x", op->debug_id); in afs_rmdir_success()
1399 op->ctime = op->file[0].scb.status.mtime_client; in afs_rmdir_success()
1400 afs_vnode_commit_status(op, &op->file[0]); in afs_rmdir_success()
1401 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_rmdir_success()
1404 static void afs_rmdir_edit_dir(struct afs_operation *op) in afs_rmdir_edit_dir() argument
1406 struct afs_vnode_param *dvp = &op->file[0]; in afs_rmdir_edit_dir()
1409 _enter("op=%08x", op->debug_id); in afs_rmdir_edit_dir()
1410 afs_dir_remove_subdir(op->dentry); in afs_rmdir_edit_dir()
1415 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_rmdir_edit_dir()
1420 static void afs_rmdir_put(struct afs_operation *op) in afs_rmdir_put() argument
1422 _enter("op=%08x", op->debug_id); in afs_rmdir_put()
1423 if (op->file[1].vnode) in afs_rmdir_put()
1424 up_write(&op->file[1].vnode->rmdir_lock); in afs_rmdir_put()
1441 struct afs_operation *op; in afs_rmdir() local
1448 op = afs_alloc_operation(NULL, dvnode->volume); in afs_rmdir()
1449 if (IS_ERR(op)) in afs_rmdir()
1450 return PTR_ERR(op); in afs_rmdir()
1452 afs_op_set_vnode(op, 0, dvnode); in afs_rmdir()
1453 op->file[0].dv_delta = 1; in afs_rmdir()
1454 op->file[0].modification = true; in afs_rmdir()
1455 op->file[0].update_ctime = true; in afs_rmdir()
1457 op->dentry = dentry; in afs_rmdir()
1458 op->ops = &afs_rmdir_operation; in afs_rmdir()
1463 ret = afs_validate(vnode, op->key); in afs_rmdir()
1472 op->file[1].vnode = vnode; in afs_rmdir()
1475 return afs_do_sync_operation(op); in afs_rmdir()
1478 return afs_put_operation(op); in afs_rmdir()
1491 static void afs_dir_remove_link(struct afs_operation *op) in afs_dir_remove_link() argument
1493 struct afs_vnode *dvnode = op->file[0].vnode; in afs_dir_remove_link()
1494 struct afs_vnode *vnode = op->file[1].vnode; in afs_dir_remove_link()
1495 struct dentry *dentry = op->dentry; in afs_dir_remove_link()
1498 if (afs_op_error(op) || in afs_dir_remove_link()
1499 (op->file[1].scb.have_status && op->file[1].scb.have_error)) in afs_dir_remove_link()
1520 ret = afs_validate(vnode, op->key); in afs_dir_remove_link()
1522 afs_op_set_error(op, ret); in afs_dir_remove_link()
1525 _debug("nlink %d [val %d]", vnode->netfs.inode.i_nlink, afs_op_error(op)); in afs_dir_remove_link()
1528 static void afs_unlink_success(struct afs_operation *op) in afs_unlink_success() argument
1530 _enter("op=%08x", op->debug_id); in afs_unlink_success()
1531 op->ctime = op->file[0].scb.status.mtime_client; in afs_unlink_success()
1532 afs_check_dir_conflict(op, &op->file[0]); in afs_unlink_success()
1533 afs_vnode_commit_status(op, &op->file[0]); in afs_unlink_success()
1534 afs_vnode_commit_status(op, &op->file[1]); in afs_unlink_success()
1535 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_unlink_success()
1536 afs_dir_remove_link(op); in afs_unlink_success()
1539 static void afs_unlink_edit_dir(struct afs_operation *op) in afs_unlink_edit_dir() argument
1541 struct afs_vnode_param *dvp = &op->file[0]; in afs_unlink_edit_dir()
1544 _enter("op=%08x", op->debug_id); in afs_unlink_edit_dir()
1548 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_unlink_edit_dir()
1553 static void afs_unlink_put(struct afs_operation *op) in afs_unlink_put() argument
1555 _enter("op=%08x", op->debug_id); in afs_unlink_put()
1556 if (op->unlink.need_rehash && afs_op_error(op) < 0 && afs_op_error(op) != -ENOENT) in afs_unlink_put()
1557 d_rehash(op->dentry); in afs_unlink_put()
1574 struct afs_operation *op; in afs_unlink() local
1585 op = afs_alloc_operation(NULL, dvnode->volume); in afs_unlink()
1586 if (IS_ERR(op)) in afs_unlink()
1587 return PTR_ERR(op); in afs_unlink()
1589 afs_op_set_vnode(op, 0, dvnode); in afs_unlink()
1590 op->file[0].dv_delta = 1; in afs_unlink()
1591 op->file[0].modification = true; in afs_unlink()
1592 op->file[0].update_ctime = true; in afs_unlink()
1595 ret = afs_validate(vnode, op->key); in afs_unlink()
1597 afs_op_set_error(op, ret); in afs_unlink()
1606 afs_op_set_error(op, afs_sillyrename(dvnode, vnode, dentry, op->key)); in afs_unlink()
1612 op->unlink.need_rehash = true; in afs_unlink()
1616 op->file[1].vnode = vnode; in afs_unlink()
1617 op->file[1].update_ctime = true; in afs_unlink()
1618 op->file[1].op_unlinked = true; in afs_unlink()
1619 op->dentry = dentry; in afs_unlink()
1620 op->ops = &afs_unlink_operation; in afs_unlink()
1621 afs_begin_vnode_operation(op); in afs_unlink()
1622 afs_wait_for_operation(op); in afs_unlink()
1627 if (afs_op_error(op) == 0 && (op->flags & AFS_OPERATION_DIR_CONFLICT)) { in afs_unlink()
1628 op->file[1].update_ctime = false; in afs_unlink()
1629 op->fetch_status.which = 1; in afs_unlink()
1630 op->ops = &afs_fetch_status_operation; in afs_unlink()
1631 afs_begin_vnode_operation(op); in afs_unlink()
1632 afs_wait_for_operation(op); in afs_unlink()
1635 return afs_put_operation(op); in afs_unlink()
1638 return afs_put_operation(op); in afs_unlink()
1656 struct afs_operation *op; in afs_create() local
1666 op = afs_alloc_operation(NULL, dvnode->volume); in afs_create()
1667 if (IS_ERR(op)) { in afs_create()
1668 ret = PTR_ERR(op); in afs_create()
1672 afs_op_set_vnode(op, 0, dvnode); in afs_create()
1673 op->file[0].dv_delta = 1; in afs_create()
1674 op->file[0].modification = true; in afs_create()
1675 op->file[0].update_ctime = true; in afs_create()
1677 op->dentry = dentry; in afs_create()
1678 op->create.mode = S_IFREG | mode; in afs_create()
1679 op->create.reason = afs_edit_dir_for_create; in afs_create()
1680 op->mtime = current_time(dir); in afs_create()
1681 op->ops = &afs_create_operation; in afs_create()
1682 return afs_do_sync_operation(op); in afs_create()
1690 static void afs_link_success(struct afs_operation *op) in afs_link_success() argument
1692 struct afs_vnode_param *dvp = &op->file[0]; in afs_link_success()
1693 struct afs_vnode_param *vp = &op->file[1]; in afs_link_success()
1695 _enter("op=%08x", op->debug_id); in afs_link_success()
1696 op->ctime = dvp->scb.status.mtime_client; in afs_link_success()
1697 afs_vnode_commit_status(op, dvp); in afs_link_success()
1698 afs_vnode_commit_status(op, vp); in afs_link_success()
1699 afs_update_dentry_version(op, dvp, op->dentry); in afs_link_success()
1700 if (op->dentry_2->d_parent == op->dentry->d_parent) in afs_link_success()
1701 afs_update_dentry_version(op, dvp, op->dentry_2); in afs_link_success()
1703 d_instantiate(op->dentry, &vp->vnode->netfs.inode); in afs_link_success()
1706 static void afs_link_put(struct afs_operation *op) in afs_link_put() argument
1708 _enter("op=%08x", op->debug_id); in afs_link_put()
1709 if (afs_op_error(op)) in afs_link_put()
1710 d_drop(op->dentry); in afs_link_put()
1728 struct afs_operation *op; in afs_link() local
1741 op = afs_alloc_operation(NULL, dvnode->volume); in afs_link()
1742 if (IS_ERR(op)) { in afs_link()
1743 ret = PTR_ERR(op); in afs_link()
1747 ret = afs_validate(vnode, op->key); in afs_link()
1751 afs_op_set_vnode(op, 0, dvnode); in afs_link()
1752 afs_op_set_vnode(op, 1, vnode); in afs_link()
1753 op->file[0].dv_delta = 1; in afs_link()
1754 op->file[0].modification = true; in afs_link()
1755 op->file[0].update_ctime = true; in afs_link()
1756 op->file[1].update_ctime = true; in afs_link()
1758 op->dentry = dentry; in afs_link()
1759 op->dentry_2 = from; in afs_link()
1760 op->ops = &afs_link_operation; in afs_link()
1761 op->create.reason = afs_edit_dir_for_link; in afs_link()
1762 return afs_do_sync_operation(op); in afs_link()
1765 afs_put_operation(op); in afs_link()
1787 struct afs_operation *op; in afs_symlink() local
1803 op = afs_alloc_operation(NULL, dvnode->volume); in afs_symlink()
1804 if (IS_ERR(op)) { in afs_symlink()
1805 ret = PTR_ERR(op); in afs_symlink()
1809 afs_op_set_vnode(op, 0, dvnode); in afs_symlink()
1810 op->file[0].dv_delta = 1; in afs_symlink()
1812 op->dentry = dentry; in afs_symlink()
1813 op->ops = &afs_symlink_operation; in afs_symlink()
1814 op->create.reason = afs_edit_dir_for_symlink; in afs_symlink()
1815 op->create.symlink = content; in afs_symlink()
1816 op->mtime = current_time(dir); in afs_symlink()
1817 return afs_do_sync_operation(op); in afs_symlink()
1825 static void afs_rename_success(struct afs_operation *op) in afs_rename_success() argument
1827 struct afs_vnode *vnode = AFS_FS_I(d_inode(op->dentry)); in afs_rename_success()
1829 _enter("op=%08x", op->debug_id); in afs_rename_success()
1831 op->ctime = op->file[0].scb.status.mtime_client; in afs_rename_success()
1832 afs_check_dir_conflict(op, &op->file[1]); in afs_rename_success()
1833 afs_vnode_commit_status(op, &op->file[0]); in afs_rename_success()
1834 if (op->file[1].vnode != op->file[0].vnode) { in afs_rename_success()
1835 op->ctime = op->file[1].scb.status.mtime_client; in afs_rename_success()
1836 afs_vnode_commit_status(op, &op->file[1]); in afs_rename_success()
1843 op->file[0].vnode != op->file[1].vnode) { in afs_rename_success()
1856 static void afs_rename_edit_dir(struct afs_operation *op) in afs_rename_edit_dir() argument
1858 struct afs_vnode_param *orig_dvp = &op->file[0]; in afs_rename_edit_dir()
1859 struct afs_vnode_param *new_dvp = &op->file[1]; in afs_rename_edit_dir()
1862 struct afs_vnode *vnode = AFS_FS_I(d_inode(op->dentry)); in afs_rename_edit_dir()
1863 struct dentry *old_dentry = op->dentry; in afs_rename_edit_dir()
1864 struct dentry *new_dentry = op->dentry_2; in afs_rename_edit_dir()
1867 _enter("op=%08x", op->debug_id); in afs_rename_edit_dir()
1869 if (op->rename.rehash) { in afs_rename_edit_dir()
1870 d_rehash(op->rename.rehash); in afs_rename_edit_dir()
1871 op->rename.rehash = NULL; in afs_rename_edit_dir()
1887 if (!op->rename.new_negative) in afs_rename_edit_dir()
1917 afs_update_dentry_version(op, new_dvp, op->dentry); in afs_rename_edit_dir()
1918 afs_update_dentry_version(op, new_dvp, op->dentry_2); in afs_rename_edit_dir()
1925 static void afs_rename_put(struct afs_operation *op) in afs_rename_put() argument
1927 _enter("op=%08x", op->debug_id); in afs_rename_put()
1928 if (op->rename.rehash) in afs_rename_put()
1929 d_rehash(op->rename.rehash); in afs_rename_put()
1930 dput(op->rename.tmp); in afs_rename_put()
1931 if (afs_op_error(op)) in afs_rename_put()
1932 d_rehash(op->dentry); in afs_rename_put()
1950 struct afs_operation *op; in afs_rename() local
1971 op = afs_alloc_operation(NULL, orig_dvnode->volume); in afs_rename()
1972 if (IS_ERR(op)) in afs_rename()
1973 return PTR_ERR(op); in afs_rename()
1975 ret = afs_validate(vnode, op->key); in afs_rename()
1976 afs_op_set_error(op, ret); in afs_rename()
1980 afs_op_set_vnode(op, 0, orig_dvnode); in afs_rename()
1981 afs_op_set_vnode(op, 1, new_dvnode); /* May be same as orig_dvnode */ in afs_rename()
1982 op->file[0].dv_delta = 1; in afs_rename()
1983 op->file[1].dv_delta = 1; in afs_rename()
1984 op->file[0].modification = true; in afs_rename()
1985 op->file[1].modification = true; in afs_rename()
1986 op->file[0].update_ctime = true; in afs_rename()
1987 op->file[1].update_ctime = true; in afs_rename()
1989 op->dentry = old_dentry; in afs_rename()
1990 op->dentry_2 = new_dentry; in afs_rename()
1991 op->rename.new_negative = d_is_negative(new_dentry); in afs_rename()
1992 op->ops = &afs_rename_operation; in afs_rename()
2005 op->rename.rehash = new_dentry; in afs_rename()
2010 op->rename.tmp = d_alloc(new_dentry->d_parent, in afs_rename()
2012 if (!op->rename.tmp) { in afs_rename()
2013 afs_op_nomem(op); in afs_rename()
2019 new_dentry, op->key); in afs_rename()
2021 afs_op_set_error(op, ret); in afs_rename()
2025 op->dentry_2 = op->rename.tmp; in afs_rename()
2026 op->rename.rehash = NULL; in afs_rename()
2027 op->rename.new_negative = true; in afs_rename()
2042 return afs_do_sync_operation(op); in afs_rename()
2045 return afs_put_operation(op); in afs_rename()