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->ac.abort_code = abort_code; in afs_do_lookup_success()
698 op->error = afs_abort_to_error(abort_code); in afs_do_lookup_success()
703 vp = &op->file[1]; in afs_do_lookup_success()
707 vp = &op->more_files[i - 2]; in afs_do_lookup_success()
717 afs_vnode_commit_status(op, vp); in afs_do_lookup_success()
719 inode = afs_iget(op, vp); in afs_do_lookup_success()
722 afs_cache_permit(vnode, op->key, in afs_do_lookup_success()
724 op->cb_v_break, in afs_do_lookup_success()
793 struct afs_operation *op; in afs_do_lookup() local
837 op = afs_alloc_operation(NULL, dvnode->volume); in afs_do_lookup()
838 if (IS_ERR(op)) { in afs_do_lookup()
839 ret = PTR_ERR(op); in afs_do_lookup()
843 afs_op_set_vnode(op, 0, dvnode); in afs_do_lookup()
844 afs_op_set_fid(op, 1, &cookie->fids[1]); in afs_do_lookup()
846 op->nr_files = cookie->nr_fids; in afs_do_lookup()
847 _debug("nr_files %u", op->nr_files); in afs_do_lookup()
850 op->error = -ENOMEM; in afs_do_lookup()
851 if (op->nr_files > 2) { in afs_do_lookup()
852 op->more_files = kvcalloc(op->nr_files - 2, in afs_do_lookup()
855 if (!op->more_files) in afs_do_lookup()
858 for (i = 2; i < op->nr_files; i++) { in afs_do_lookup()
859 vp = &op->more_files[i - 2]; in afs_do_lookup()
882 op->error = -ENOTSUPP; in afs_do_lookup()
884 op->ops = &afs_inline_bulk_status_operation; in afs_do_lookup()
885 afs_begin_vnode_operation(op); in afs_do_lookup()
886 afs_wait_for_operation(op); in afs_do_lookup()
889 if (op->error == -ENOTSUPP) { in afs_do_lookup()
894 op->fetch_status.which = 1; in afs_do_lookup()
895 op->ops = &afs_lookup_fetch_status_operation; in afs_do_lookup()
896 afs_begin_vnode_operation(op); in afs_do_lookup()
897 afs_wait_for_operation(op); in afs_do_lookup()
899 inode = ERR_PTR(op->error); in afs_do_lookup()
902 if (op->error == 0) { in afs_do_lookup()
903 inode = &op->file[1].vnode->netfs.inode; in afs_do_lookup()
904 op->file[1].vnode = NULL; in afs_do_lookup()
907 if (op->file[0].scb.have_status) in afs_do_lookup()
908 dentry->d_fsdata = (void *)(unsigned long)op->file[0].scb.status.data_version; in afs_do_lookup()
910 dentry->d_fsdata = (void *)(unsigned long)op->file[0].dv_before; in afs_do_lookup()
911 ret = afs_put_operation(op); in afs_do_lookup()
1255 void afs_check_for_remote_deletion(struct afs_operation *op) in afs_check_for_remote_deletion() argument
1257 struct afs_vnode *vnode = op->file[0].vnode; in afs_check_for_remote_deletion()
1259 switch (op->ac.abort_code) { in afs_check_for_remote_deletion()
1269 static void afs_vnode_new_inode(struct afs_operation *op) in afs_vnode_new_inode() argument
1271 struct afs_vnode_param *vp = &op->file[1]; in afs_vnode_new_inode()
1277 ASSERTCMP(op->error, ==, 0); in afs_vnode_new_inode()
1279 inode = afs_iget(op, vp); in afs_vnode_new_inode()
1284 op->error = PTR_ERR(inode); in afs_vnode_new_inode()
1290 if (!op->error) in afs_vnode_new_inode()
1291 afs_cache_permit(vnode, op->key, vnode->cb_break, &vp->scb); in afs_vnode_new_inode()
1292 d_instantiate(op->dentry, inode); in afs_vnode_new_inode()
1295 static void afs_create_success(struct afs_operation *op) in afs_create_success() argument
1297 _enter("op=%08x", op->debug_id); in afs_create_success()
1298 op->ctime = op->file[0].scb.status.mtime_client; in afs_create_success()
1299 afs_vnode_commit_status(op, &op->file[0]); in afs_create_success()
1300 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_create_success()
1301 afs_vnode_new_inode(op); in afs_create_success()
1304 static void afs_create_edit_dir(struct afs_operation *op) in afs_create_edit_dir() argument
1306 struct afs_vnode_param *dvp = &op->file[0]; in afs_create_edit_dir()
1307 struct afs_vnode_param *vp = &op->file[1]; in afs_create_edit_dir()
1310 _enter("op=%08x", op->debug_id); in afs_create_edit_dir()
1315 afs_edit_dir_add(dvnode, &op->dentry->d_name, &vp->fid, in afs_create_edit_dir()
1316 op->create.reason); in afs_create_edit_dir()
1320 static void afs_create_put(struct afs_operation *op) in afs_create_put() argument
1322 _enter("op=%08x", op->debug_id); in afs_create_put()
1324 if (op->error) in afs_create_put()
1325 d_drop(op->dentry); in afs_create_put()
1343 struct afs_operation *op; in afs_mkdir() local
1349 op = afs_alloc_operation(NULL, dvnode->volume); in afs_mkdir()
1350 if (IS_ERR(op)) { in afs_mkdir()
1352 return PTR_ERR(op); in afs_mkdir()
1355 afs_op_set_vnode(op, 0, dvnode); in afs_mkdir()
1356 op->file[0].dv_delta = 1; in afs_mkdir()
1357 op->file[0].modification = true; in afs_mkdir()
1358 op->file[0].update_ctime = true; in afs_mkdir()
1359 op->dentry = dentry; in afs_mkdir()
1360 op->create.mode = S_IFDIR | mode; in afs_mkdir()
1361 op->create.reason = afs_edit_dir_for_mkdir; in afs_mkdir()
1362 op->mtime = current_time(dir); in afs_mkdir()
1363 op->ops = &afs_mkdir_operation; in afs_mkdir()
1364 return afs_do_sync_operation(op); in afs_mkdir()
1382 static void afs_rmdir_success(struct afs_operation *op) in afs_rmdir_success() argument
1384 _enter("op=%08x", op->debug_id); in afs_rmdir_success()
1385 op->ctime = op->file[0].scb.status.mtime_client; in afs_rmdir_success()
1386 afs_vnode_commit_status(op, &op->file[0]); in afs_rmdir_success()
1387 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_rmdir_success()
1390 static void afs_rmdir_edit_dir(struct afs_operation *op) in afs_rmdir_edit_dir() argument
1392 struct afs_vnode_param *dvp = &op->file[0]; in afs_rmdir_edit_dir()
1395 _enter("op=%08x", op->debug_id); in afs_rmdir_edit_dir()
1396 afs_dir_remove_subdir(op->dentry); in afs_rmdir_edit_dir()
1401 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_rmdir_edit_dir()
1406 static void afs_rmdir_put(struct afs_operation *op) in afs_rmdir_put() argument
1408 _enter("op=%08x", op->debug_id); in afs_rmdir_put()
1409 if (op->file[1].vnode) in afs_rmdir_put()
1410 up_write(&op->file[1].vnode->rmdir_lock); in afs_rmdir_put()
1427 struct afs_operation *op; in afs_rmdir() local
1434 op = afs_alloc_operation(NULL, dvnode->volume); in afs_rmdir()
1435 if (IS_ERR(op)) in afs_rmdir()
1436 return PTR_ERR(op); in afs_rmdir()
1438 afs_op_set_vnode(op, 0, dvnode); in afs_rmdir()
1439 op->file[0].dv_delta = 1; in afs_rmdir()
1440 op->file[0].modification = true; in afs_rmdir()
1441 op->file[0].update_ctime = true; in afs_rmdir()
1443 op->dentry = dentry; in afs_rmdir()
1444 op->ops = &afs_rmdir_operation; in afs_rmdir()
1449 ret = afs_validate(vnode, op->key); in afs_rmdir()
1458 op->file[1].vnode = vnode; in afs_rmdir()
1461 return afs_do_sync_operation(op); in afs_rmdir()
1464 return afs_put_operation(op); in afs_rmdir()
1477 static void afs_dir_remove_link(struct afs_operation *op) in afs_dir_remove_link() argument
1479 struct afs_vnode *dvnode = op->file[0].vnode; in afs_dir_remove_link()
1480 struct afs_vnode *vnode = op->file[1].vnode; in afs_dir_remove_link()
1481 struct dentry *dentry = op->dentry; in afs_dir_remove_link()
1484 if (op->error != 0 || in afs_dir_remove_link()
1485 (op->file[1].scb.have_status && op->file[1].scb.have_error)) in afs_dir_remove_link()
1506 ret = afs_validate(vnode, op->key); in afs_dir_remove_link()
1508 op->error = ret; in afs_dir_remove_link()
1511 _debug("nlink %d [val %d]", vnode->netfs.inode.i_nlink, op->error); in afs_dir_remove_link()
1514 static void afs_unlink_success(struct afs_operation *op) in afs_unlink_success() argument
1516 _enter("op=%08x", op->debug_id); in afs_unlink_success()
1517 op->ctime = op->file[0].scb.status.mtime_client; in afs_unlink_success()
1518 afs_check_dir_conflict(op, &op->file[0]); in afs_unlink_success()
1519 afs_vnode_commit_status(op, &op->file[0]); in afs_unlink_success()
1520 afs_vnode_commit_status(op, &op->file[1]); in afs_unlink_success()
1521 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_unlink_success()
1522 afs_dir_remove_link(op); in afs_unlink_success()
1525 static void afs_unlink_edit_dir(struct afs_operation *op) in afs_unlink_edit_dir() argument
1527 struct afs_vnode_param *dvp = &op->file[0]; in afs_unlink_edit_dir()
1530 _enter("op=%08x", op->debug_id); in afs_unlink_edit_dir()
1534 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_unlink_edit_dir()
1539 static void afs_unlink_put(struct afs_operation *op) in afs_unlink_put() argument
1541 _enter("op=%08x", op->debug_id); in afs_unlink_put()
1542 if (op->unlink.need_rehash && op->error < 0 && op->error != -ENOENT) in afs_unlink_put()
1543 d_rehash(op->dentry); in afs_unlink_put()
1560 struct afs_operation *op; in afs_unlink() local
1571 op = afs_alloc_operation(NULL, dvnode->volume); in afs_unlink()
1572 if (IS_ERR(op)) in afs_unlink()
1573 return PTR_ERR(op); in afs_unlink()
1575 afs_op_set_vnode(op, 0, dvnode); in afs_unlink()
1576 op->file[0].dv_delta = 1; in afs_unlink()
1577 op->file[0].modification = true; in afs_unlink()
1578 op->file[0].update_ctime = true; in afs_unlink()
1581 ret = afs_validate(vnode, op->key); in afs_unlink()
1583 op->error = ret; in afs_unlink()
1592 op->error = afs_sillyrename(dvnode, vnode, dentry, op->key); in afs_unlink()
1598 op->unlink.need_rehash = true; in afs_unlink()
1602 op->file[1].vnode = vnode; in afs_unlink()
1603 op->file[1].update_ctime = true; in afs_unlink()
1604 op->file[1].op_unlinked = true; in afs_unlink()
1605 op->dentry = dentry; in afs_unlink()
1606 op->ops = &afs_unlink_operation; in afs_unlink()
1607 afs_begin_vnode_operation(op); in afs_unlink()
1608 afs_wait_for_operation(op); in afs_unlink()
1613 if (op->error == 0 && (op->flags & AFS_OPERATION_DIR_CONFLICT)) { in afs_unlink()
1614 op->file[1].update_ctime = false; in afs_unlink()
1615 op->fetch_status.which = 1; in afs_unlink()
1616 op->ops = &afs_fetch_status_operation; in afs_unlink()
1617 afs_begin_vnode_operation(op); in afs_unlink()
1618 afs_wait_for_operation(op); in afs_unlink()
1621 return afs_put_operation(op); in afs_unlink()
1624 return afs_put_operation(op); in afs_unlink()
1642 struct afs_operation *op; in afs_create() local
1652 op = afs_alloc_operation(NULL, dvnode->volume); in afs_create()
1653 if (IS_ERR(op)) { in afs_create()
1654 ret = PTR_ERR(op); in afs_create()
1658 afs_op_set_vnode(op, 0, dvnode); in afs_create()
1659 op->file[0].dv_delta = 1; in afs_create()
1660 op->file[0].modification = true; in afs_create()
1661 op->file[0].update_ctime = true; in afs_create()
1663 op->dentry = dentry; in afs_create()
1664 op->create.mode = S_IFREG | mode; in afs_create()
1665 op->create.reason = afs_edit_dir_for_create; in afs_create()
1666 op->mtime = current_time(dir); in afs_create()
1667 op->ops = &afs_create_operation; in afs_create()
1668 return afs_do_sync_operation(op); in afs_create()
1676 static void afs_link_success(struct afs_operation *op) in afs_link_success() argument
1678 struct afs_vnode_param *dvp = &op->file[0]; in afs_link_success()
1679 struct afs_vnode_param *vp = &op->file[1]; in afs_link_success()
1681 _enter("op=%08x", op->debug_id); in afs_link_success()
1682 op->ctime = dvp->scb.status.mtime_client; in afs_link_success()
1683 afs_vnode_commit_status(op, dvp); in afs_link_success()
1684 afs_vnode_commit_status(op, vp); in afs_link_success()
1685 afs_update_dentry_version(op, dvp, op->dentry); in afs_link_success()
1686 if (op->dentry_2->d_parent == op->dentry->d_parent) in afs_link_success()
1687 afs_update_dentry_version(op, dvp, op->dentry_2); in afs_link_success()
1689 d_instantiate(op->dentry, &vp->vnode->netfs.inode); in afs_link_success()
1692 static void afs_link_put(struct afs_operation *op) in afs_link_put() argument
1694 _enter("op=%08x", op->debug_id); in afs_link_put()
1695 if (op->error) in afs_link_put()
1696 d_drop(op->dentry); in afs_link_put()
1714 struct afs_operation *op; in afs_link() local
1727 op = afs_alloc_operation(NULL, dvnode->volume); in afs_link()
1728 if (IS_ERR(op)) { in afs_link()
1729 ret = PTR_ERR(op); in afs_link()
1733 ret = afs_validate(vnode, op->key); in afs_link()
1737 afs_op_set_vnode(op, 0, dvnode); in afs_link()
1738 afs_op_set_vnode(op, 1, vnode); in afs_link()
1739 op->file[0].dv_delta = 1; in afs_link()
1740 op->file[0].modification = true; in afs_link()
1741 op->file[0].update_ctime = true; in afs_link()
1742 op->file[1].update_ctime = true; in afs_link()
1744 op->dentry = dentry; in afs_link()
1745 op->dentry_2 = from; in afs_link()
1746 op->ops = &afs_link_operation; in afs_link()
1747 op->create.reason = afs_edit_dir_for_link; in afs_link()
1748 return afs_do_sync_operation(op); in afs_link()
1751 afs_put_operation(op); in afs_link()
1773 struct afs_operation *op; in afs_symlink() local
1789 op = afs_alloc_operation(NULL, dvnode->volume); in afs_symlink()
1790 if (IS_ERR(op)) { in afs_symlink()
1791 ret = PTR_ERR(op); in afs_symlink()
1795 afs_op_set_vnode(op, 0, dvnode); in afs_symlink()
1796 op->file[0].dv_delta = 1; in afs_symlink()
1798 op->dentry = dentry; in afs_symlink()
1799 op->ops = &afs_symlink_operation; in afs_symlink()
1800 op->create.reason = afs_edit_dir_for_symlink; in afs_symlink()
1801 op->create.symlink = content; in afs_symlink()
1802 op->mtime = current_time(dir); in afs_symlink()
1803 return afs_do_sync_operation(op); in afs_symlink()
1811 static void afs_rename_success(struct afs_operation *op) in afs_rename_success() argument
1813 struct afs_vnode *vnode = AFS_FS_I(d_inode(op->dentry)); in afs_rename_success()
1815 _enter("op=%08x", op->debug_id); in afs_rename_success()
1817 op->ctime = op->file[0].scb.status.mtime_client; in afs_rename_success()
1818 afs_check_dir_conflict(op, &op->file[1]); in afs_rename_success()
1819 afs_vnode_commit_status(op, &op->file[0]); in afs_rename_success()
1820 if (op->file[1].vnode != op->file[0].vnode) { in afs_rename_success()
1821 op->ctime = op->file[1].scb.status.mtime_client; in afs_rename_success()
1822 afs_vnode_commit_status(op, &op->file[1]); in afs_rename_success()
1829 op->file[0].vnode != op->file[1].vnode) { in afs_rename_success()
1842 static void afs_rename_edit_dir(struct afs_operation *op) in afs_rename_edit_dir() argument
1844 struct afs_vnode_param *orig_dvp = &op->file[0]; in afs_rename_edit_dir()
1845 struct afs_vnode_param *new_dvp = &op->file[1]; in afs_rename_edit_dir()
1848 struct afs_vnode *vnode = AFS_FS_I(d_inode(op->dentry)); in afs_rename_edit_dir()
1849 struct dentry *old_dentry = op->dentry; in afs_rename_edit_dir()
1850 struct dentry *new_dentry = op->dentry_2; in afs_rename_edit_dir()
1853 _enter("op=%08x", op->debug_id); in afs_rename_edit_dir()
1855 if (op->rename.rehash) { in afs_rename_edit_dir()
1856 d_rehash(op->rename.rehash); in afs_rename_edit_dir()
1857 op->rename.rehash = NULL; in afs_rename_edit_dir()
1873 if (!op->rename.new_negative) in afs_rename_edit_dir()
1903 afs_update_dentry_version(op, new_dvp, op->dentry); in afs_rename_edit_dir()
1904 afs_update_dentry_version(op, new_dvp, op->dentry_2); in afs_rename_edit_dir()
1911 static void afs_rename_put(struct afs_operation *op) in afs_rename_put() argument
1913 _enter("op=%08x", op->debug_id); in afs_rename_put()
1914 if (op->rename.rehash) in afs_rename_put()
1915 d_rehash(op->rename.rehash); in afs_rename_put()
1916 dput(op->rename.tmp); in afs_rename_put()
1917 if (op->error) in afs_rename_put()
1918 d_rehash(op->dentry); in afs_rename_put()
1936 struct afs_operation *op; in afs_rename() local
1957 op = afs_alloc_operation(NULL, orig_dvnode->volume); in afs_rename()
1958 if (IS_ERR(op)) in afs_rename()
1959 return PTR_ERR(op); in afs_rename()
1961 ret = afs_validate(vnode, op->key); in afs_rename()
1962 op->error = ret; in afs_rename()
1966 afs_op_set_vnode(op, 0, orig_dvnode); in afs_rename()
1967 afs_op_set_vnode(op, 1, new_dvnode); /* May be same as orig_dvnode */ in afs_rename()
1968 op->file[0].dv_delta = 1; in afs_rename()
1969 op->file[1].dv_delta = 1; in afs_rename()
1970 op->file[0].modification = true; in afs_rename()
1971 op->file[1].modification = true; in afs_rename()
1972 op->file[0].update_ctime = true; in afs_rename()
1973 op->file[1].update_ctime = true; in afs_rename()
1975 op->dentry = old_dentry; in afs_rename()
1976 op->dentry_2 = new_dentry; in afs_rename()
1977 op->rename.new_negative = d_is_negative(new_dentry); in afs_rename()
1978 op->ops = &afs_rename_operation; in afs_rename()
1991 op->rename.rehash = new_dentry; in afs_rename()
1996 op->rename.tmp = d_alloc(new_dentry->d_parent, in afs_rename()
1998 if (!op->rename.tmp) { in afs_rename()
1999 op->error = -ENOMEM; in afs_rename()
2005 new_dentry, op->key); in afs_rename()
2007 op->error = ret; in afs_rename()
2011 op->dentry_2 = op->rename.tmp; in afs_rename()
2012 op->rename.rehash = NULL; in afs_rename()
2013 op->rename.new_negative = true; in afs_rename()
2028 return afs_do_sync_operation(op); in afs_rename()
2031 return afs_put_operation(op); in afs_rename()