Lines Matching refs:op

674 static void afs_do_lookup_success(struct afs_operation *op)  in afs_do_lookup_success()  argument
684 for (i = 0; i < op->nr_files; i++) { in afs_do_lookup_success()
687 vp = &op->file[0]; in afs_do_lookup_success()
690 op->ac.abort_code = abort_code; in afs_do_lookup_success()
691 op->error = afs_abort_to_error(abort_code); in afs_do_lookup_success()
696 vp = &op->file[1]; in afs_do_lookup_success()
700 vp = &op->more_files[i - 2]; in afs_do_lookup_success()
710 afs_vnode_commit_status(op, vp); in afs_do_lookup_success()
712 inode = afs_iget(op, vp); in afs_do_lookup_success()
715 afs_cache_permit(vnode, op->key, in afs_do_lookup_success()
717 op->cb_v_break, in afs_do_lookup_success()
786 struct afs_operation *op; in afs_do_lookup() local
830 op = afs_alloc_operation(NULL, dvnode->volume); in afs_do_lookup()
831 if (IS_ERR(op)) { in afs_do_lookup()
832 ret = PTR_ERR(op); in afs_do_lookup()
836 afs_op_set_vnode(op, 0, dvnode); in afs_do_lookup()
837 afs_op_set_fid(op, 1, &cookie->fids[1]); in afs_do_lookup()
839 op->nr_files = cookie->nr_fids; in afs_do_lookup()
840 _debug("nr_files %u", op->nr_files); in afs_do_lookup()
843 op->error = -ENOMEM; in afs_do_lookup()
844 if (op->nr_files > 2) { in afs_do_lookup()
845 op->more_files = kvcalloc(op->nr_files - 2, in afs_do_lookup()
848 if (!op->more_files) in afs_do_lookup()
851 for (i = 2; i < op->nr_files; i++) { in afs_do_lookup()
852 vp = &op->more_files[i - 2]; in afs_do_lookup()
875 op->error = -ENOTSUPP; in afs_do_lookup()
877 op->ops = &afs_inline_bulk_status_operation; in afs_do_lookup()
878 afs_begin_vnode_operation(op); in afs_do_lookup()
879 afs_wait_for_operation(op); in afs_do_lookup()
882 if (op->error == -ENOTSUPP) { in afs_do_lookup()
887 op->fetch_status.which = 1; in afs_do_lookup()
888 op->ops = &afs_lookup_fetch_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()
892 inode = ERR_PTR(op->error); in afs_do_lookup()
895 if (op->error == 0) { in afs_do_lookup()
896 inode = &op->file[1].vnode->vfs_inode; in afs_do_lookup()
897 op->file[1].vnode = NULL; in afs_do_lookup()
900 if (op->file[0].scb.have_status) in afs_do_lookup()
901 dentry->d_fsdata = (void *)(unsigned long)op->file[0].scb.status.data_version; in afs_do_lookup()
903 dentry->d_fsdata = (void *)(unsigned long)op->file[0].dv_before; in afs_do_lookup()
904 ret = afs_put_operation(op); in afs_do_lookup()
1248 void afs_check_for_remote_deletion(struct afs_operation *op) in afs_check_for_remote_deletion() argument
1250 struct afs_vnode *vnode = op->file[0].vnode; in afs_check_for_remote_deletion()
1252 switch (op->ac.abort_code) { in afs_check_for_remote_deletion()
1262 static void afs_vnode_new_inode(struct afs_operation *op) in afs_vnode_new_inode() argument
1264 struct afs_vnode_param *vp = &op->file[1]; in afs_vnode_new_inode()
1270 ASSERTCMP(op->error, ==, 0); in afs_vnode_new_inode()
1272 inode = afs_iget(op, vp); in afs_vnode_new_inode()
1277 op->error = PTR_ERR(inode); in afs_vnode_new_inode()
1283 if (!op->error) in afs_vnode_new_inode()
1284 afs_cache_permit(vnode, op->key, vnode->cb_break, &vp->scb); in afs_vnode_new_inode()
1285 d_instantiate(op->dentry, inode); in afs_vnode_new_inode()
1288 static void afs_create_success(struct afs_operation *op) in afs_create_success() argument
1290 _enter("op=%08x", op->debug_id); in afs_create_success()
1291 op->ctime = op->file[0].scb.status.mtime_client; in afs_create_success()
1292 afs_vnode_commit_status(op, &op->file[0]); in afs_create_success()
1293 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_create_success()
1294 afs_vnode_new_inode(op); in afs_create_success()
1297 static void afs_create_edit_dir(struct afs_operation *op) in afs_create_edit_dir() argument
1299 struct afs_vnode_param *dvp = &op->file[0]; in afs_create_edit_dir()
1300 struct afs_vnode_param *vp = &op->file[1]; in afs_create_edit_dir()
1303 _enter("op=%08x", op->debug_id); in afs_create_edit_dir()
1308 afs_edit_dir_add(dvnode, &op->dentry->d_name, &vp->fid, in afs_create_edit_dir()
1309 op->create.reason); in afs_create_edit_dir()
1313 static void afs_create_put(struct afs_operation *op) in afs_create_put() argument
1315 _enter("op=%08x", op->debug_id); in afs_create_put()
1317 if (op->error) in afs_create_put()
1318 d_drop(op->dentry); in afs_create_put()
1336 struct afs_operation *op; in afs_mkdir() local
1342 op = afs_alloc_operation(NULL, dvnode->volume); in afs_mkdir()
1343 if (IS_ERR(op)) { in afs_mkdir()
1345 return PTR_ERR(op); in afs_mkdir()
1348 afs_op_set_vnode(op, 0, dvnode); in afs_mkdir()
1349 op->file[0].dv_delta = 1; in afs_mkdir()
1350 op->file[0].modification = true; in afs_mkdir()
1351 op->file[0].update_ctime = true; in afs_mkdir()
1352 op->dentry = dentry; in afs_mkdir()
1353 op->create.mode = S_IFDIR | mode; in afs_mkdir()
1354 op->create.reason = afs_edit_dir_for_mkdir; in afs_mkdir()
1355 op->ops = &afs_mkdir_operation; in afs_mkdir()
1356 return afs_do_sync_operation(op); in afs_mkdir()
1374 static void afs_rmdir_success(struct afs_operation *op) in afs_rmdir_success() argument
1376 _enter("op=%08x", op->debug_id); in afs_rmdir_success()
1377 op->ctime = op->file[0].scb.status.mtime_client; in afs_rmdir_success()
1378 afs_vnode_commit_status(op, &op->file[0]); in afs_rmdir_success()
1379 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_rmdir_success()
1382 static void afs_rmdir_edit_dir(struct afs_operation *op) in afs_rmdir_edit_dir() argument
1384 struct afs_vnode_param *dvp = &op->file[0]; in afs_rmdir_edit_dir()
1387 _enter("op=%08x", op->debug_id); in afs_rmdir_edit_dir()
1388 afs_dir_remove_subdir(op->dentry); in afs_rmdir_edit_dir()
1393 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_rmdir_edit_dir()
1398 static void afs_rmdir_put(struct afs_operation *op) in afs_rmdir_put() argument
1400 _enter("op=%08x", op->debug_id); in afs_rmdir_put()
1401 if (op->file[1].vnode) in afs_rmdir_put()
1402 up_write(&op->file[1].vnode->rmdir_lock); in afs_rmdir_put()
1419 struct afs_operation *op; in afs_rmdir() local
1426 op = afs_alloc_operation(NULL, dvnode->volume); in afs_rmdir()
1427 if (IS_ERR(op)) in afs_rmdir()
1428 return PTR_ERR(op); in afs_rmdir()
1430 afs_op_set_vnode(op, 0, dvnode); in afs_rmdir()
1431 op->file[0].dv_delta = 1; in afs_rmdir()
1432 op->file[0].modification = true; in afs_rmdir()
1433 op->file[0].update_ctime = true; in afs_rmdir()
1435 op->dentry = dentry; in afs_rmdir()
1436 op->ops = &afs_rmdir_operation; in afs_rmdir()
1441 ret = afs_validate(vnode, op->key); in afs_rmdir()
1450 op->file[1].vnode = vnode; in afs_rmdir()
1453 return afs_do_sync_operation(op); in afs_rmdir()
1456 return afs_put_operation(op); in afs_rmdir()
1469 static void afs_dir_remove_link(struct afs_operation *op) in afs_dir_remove_link() argument
1471 struct afs_vnode *dvnode = op->file[0].vnode; in afs_dir_remove_link()
1472 struct afs_vnode *vnode = op->file[1].vnode; in afs_dir_remove_link()
1473 struct dentry *dentry = op->dentry; in afs_dir_remove_link()
1476 if (op->error != 0 || in afs_dir_remove_link()
1477 (op->file[1].scb.have_status && op->file[1].scb.have_error)) in afs_dir_remove_link()
1498 ret = afs_validate(vnode, op->key); in afs_dir_remove_link()
1500 op->error = ret; in afs_dir_remove_link()
1503 _debug("nlink %d [val %d]", vnode->vfs_inode.i_nlink, op->error); in afs_dir_remove_link()
1506 static void afs_unlink_success(struct afs_operation *op) in afs_unlink_success() argument
1508 _enter("op=%08x", op->debug_id); in afs_unlink_success()
1509 op->ctime = op->file[0].scb.status.mtime_client; in afs_unlink_success()
1510 afs_check_dir_conflict(op, &op->file[0]); in afs_unlink_success()
1511 afs_vnode_commit_status(op, &op->file[0]); in afs_unlink_success()
1512 afs_vnode_commit_status(op, &op->file[1]); in afs_unlink_success()
1513 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_unlink_success()
1514 afs_dir_remove_link(op); in afs_unlink_success()
1517 static void afs_unlink_edit_dir(struct afs_operation *op) in afs_unlink_edit_dir() argument
1519 struct afs_vnode_param *dvp = &op->file[0]; in afs_unlink_edit_dir()
1522 _enter("op=%08x", op->debug_id); in afs_unlink_edit_dir()
1526 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_unlink_edit_dir()
1531 static void afs_unlink_put(struct afs_operation *op) in afs_unlink_put() argument
1533 _enter("op=%08x", op->debug_id); in afs_unlink_put()
1534 if (op->unlink.need_rehash && op->error < 0 && op->error != -ENOENT) in afs_unlink_put()
1535 d_rehash(op->dentry); in afs_unlink_put()
1552 struct afs_operation *op; in afs_unlink() local
1563 op = afs_alloc_operation(NULL, dvnode->volume); in afs_unlink()
1564 if (IS_ERR(op)) in afs_unlink()
1565 return PTR_ERR(op); in afs_unlink()
1567 afs_op_set_vnode(op, 0, dvnode); in afs_unlink()
1568 op->file[0].dv_delta = 1; in afs_unlink()
1569 op->file[0].modification = true; in afs_unlink()
1570 op->file[0].update_ctime = true; in afs_unlink()
1573 ret = afs_validate(vnode, op->key); in afs_unlink()
1575 op->error = ret; in afs_unlink()
1584 op->error = afs_sillyrename(dvnode, vnode, dentry, op->key); in afs_unlink()
1590 op->unlink.need_rehash = true; in afs_unlink()
1594 op->file[1].vnode = vnode; in afs_unlink()
1595 op->file[1].update_ctime = true; in afs_unlink()
1596 op->file[1].op_unlinked = true; in afs_unlink()
1597 op->dentry = dentry; in afs_unlink()
1598 op->ops = &afs_unlink_operation; in afs_unlink()
1599 afs_begin_vnode_operation(op); in afs_unlink()
1600 afs_wait_for_operation(op); in afs_unlink()
1605 if (op->error == 0 && (op->flags & AFS_OPERATION_DIR_CONFLICT)) { in afs_unlink()
1606 op->file[1].update_ctime = false; in afs_unlink()
1607 op->fetch_status.which = 1; in afs_unlink()
1608 op->ops = &afs_fetch_status_operation; in afs_unlink()
1609 afs_begin_vnode_operation(op); in afs_unlink()
1610 afs_wait_for_operation(op); in afs_unlink()
1613 return afs_put_operation(op); in afs_unlink()
1616 return afs_put_operation(op); in afs_unlink()
1634 struct afs_operation *op; in afs_create() local
1644 op = afs_alloc_operation(NULL, dvnode->volume); in afs_create()
1645 if (IS_ERR(op)) { in afs_create()
1646 ret = PTR_ERR(op); in afs_create()
1650 afs_op_set_vnode(op, 0, dvnode); in afs_create()
1651 op->file[0].dv_delta = 1; in afs_create()
1652 op->file[0].modification = true; in afs_create()
1653 op->file[0].update_ctime = true; in afs_create()
1655 op->dentry = dentry; in afs_create()
1656 op->create.mode = S_IFREG | mode; in afs_create()
1657 op->create.reason = afs_edit_dir_for_create; in afs_create()
1658 op->ops = &afs_create_operation; in afs_create()
1659 return afs_do_sync_operation(op); in afs_create()
1667 static void afs_link_success(struct afs_operation *op) in afs_link_success() argument
1669 struct afs_vnode_param *dvp = &op->file[0]; in afs_link_success()
1670 struct afs_vnode_param *vp = &op->file[1]; in afs_link_success()
1672 _enter("op=%08x", op->debug_id); in afs_link_success()
1673 op->ctime = dvp->scb.status.mtime_client; in afs_link_success()
1674 afs_vnode_commit_status(op, dvp); in afs_link_success()
1675 afs_vnode_commit_status(op, vp); in afs_link_success()
1676 afs_update_dentry_version(op, dvp, op->dentry); in afs_link_success()
1677 if (op->dentry_2->d_parent == op->dentry->d_parent) in afs_link_success()
1678 afs_update_dentry_version(op, dvp, op->dentry_2); in afs_link_success()
1680 d_instantiate(op->dentry, &vp->vnode->vfs_inode); in afs_link_success()
1683 static void afs_link_put(struct afs_operation *op) in afs_link_put() argument
1685 _enter("op=%08x", op->debug_id); in afs_link_put()
1686 if (op->error) in afs_link_put()
1687 d_drop(op->dentry); in afs_link_put()
1705 struct afs_operation *op; in afs_link() local
1718 op = afs_alloc_operation(NULL, dvnode->volume); in afs_link()
1719 if (IS_ERR(op)) { in afs_link()
1720 ret = PTR_ERR(op); in afs_link()
1724 ret = afs_validate(vnode, op->key); in afs_link()
1728 afs_op_set_vnode(op, 0, dvnode); in afs_link()
1729 afs_op_set_vnode(op, 1, vnode); in afs_link()
1730 op->file[0].dv_delta = 1; in afs_link()
1731 op->file[0].modification = true; in afs_link()
1732 op->file[0].update_ctime = true; in afs_link()
1733 op->file[1].update_ctime = true; in afs_link()
1735 op->dentry = dentry; in afs_link()
1736 op->dentry_2 = from; in afs_link()
1737 op->ops = &afs_link_operation; in afs_link()
1738 op->create.reason = afs_edit_dir_for_link; in afs_link()
1739 return afs_do_sync_operation(op); in afs_link()
1742 afs_put_operation(op); in afs_link()
1764 struct afs_operation *op; in afs_symlink() local
1780 op = afs_alloc_operation(NULL, dvnode->volume); in afs_symlink()
1781 if (IS_ERR(op)) { in afs_symlink()
1782 ret = PTR_ERR(op); in afs_symlink()
1786 afs_op_set_vnode(op, 0, dvnode); in afs_symlink()
1787 op->file[0].dv_delta = 1; in afs_symlink()
1789 op->dentry = dentry; in afs_symlink()
1790 op->ops = &afs_symlink_operation; in afs_symlink()
1791 op->create.reason = afs_edit_dir_for_symlink; in afs_symlink()
1792 op->create.symlink = content; in afs_symlink()
1793 return afs_do_sync_operation(op); in afs_symlink()
1801 static void afs_rename_success(struct afs_operation *op) in afs_rename_success() argument
1803 _enter("op=%08x", op->debug_id); in afs_rename_success()
1805 op->ctime = op->file[0].scb.status.mtime_client; in afs_rename_success()
1806 afs_check_dir_conflict(op, &op->file[1]); in afs_rename_success()
1807 afs_vnode_commit_status(op, &op->file[0]); in afs_rename_success()
1808 if (op->file[1].vnode != op->file[0].vnode) { in afs_rename_success()
1809 op->ctime = op->file[1].scb.status.mtime_client; in afs_rename_success()
1810 afs_vnode_commit_status(op, &op->file[1]); in afs_rename_success()
1814 static void afs_rename_edit_dir(struct afs_operation *op) in afs_rename_edit_dir() argument
1816 struct afs_vnode_param *orig_dvp = &op->file[0]; in afs_rename_edit_dir()
1817 struct afs_vnode_param *new_dvp = &op->file[1]; in afs_rename_edit_dir()
1820 struct afs_vnode *vnode = AFS_FS_I(d_inode(op->dentry)); in afs_rename_edit_dir()
1821 struct dentry *old_dentry = op->dentry; in afs_rename_edit_dir()
1822 struct dentry *new_dentry = op->dentry_2; in afs_rename_edit_dir()
1825 _enter("op=%08x", op->debug_id); in afs_rename_edit_dir()
1827 if (op->rename.rehash) { in afs_rename_edit_dir()
1828 d_rehash(op->rename.rehash); in afs_rename_edit_dir()
1829 op->rename.rehash = NULL; in afs_rename_edit_dir()
1845 if (!op->rename.new_negative) in afs_rename_edit_dir()
1869 afs_update_dentry_version(op, new_dvp, op->dentry); in afs_rename_edit_dir()
1870 afs_update_dentry_version(op, new_dvp, op->dentry_2); in afs_rename_edit_dir()
1877 static void afs_rename_put(struct afs_operation *op) in afs_rename_put() argument
1879 _enter("op=%08x", op->debug_id); in afs_rename_put()
1880 if (op->rename.rehash) in afs_rename_put()
1881 d_rehash(op->rename.rehash); in afs_rename_put()
1882 dput(op->rename.tmp); in afs_rename_put()
1883 if (op->error) in afs_rename_put()
1884 d_rehash(op->dentry); in afs_rename_put()
1902 struct afs_operation *op; in afs_rename() local
1923 op = afs_alloc_operation(NULL, orig_dvnode->volume); in afs_rename()
1924 if (IS_ERR(op)) in afs_rename()
1925 return PTR_ERR(op); in afs_rename()
1927 ret = afs_validate(vnode, op->key); in afs_rename()
1928 op->error = ret; in afs_rename()
1932 afs_op_set_vnode(op, 0, orig_dvnode); in afs_rename()
1933 afs_op_set_vnode(op, 1, new_dvnode); /* May be same as orig_dvnode */ in afs_rename()
1934 op->file[0].dv_delta = 1; in afs_rename()
1935 op->file[1].dv_delta = 1; in afs_rename()
1936 op->file[0].modification = true; in afs_rename()
1937 op->file[1].modification = true; in afs_rename()
1938 op->file[0].update_ctime = true; in afs_rename()
1939 op->file[1].update_ctime = true; in afs_rename()
1941 op->dentry = old_dentry; in afs_rename()
1942 op->dentry_2 = new_dentry; in afs_rename()
1943 op->rename.new_negative = d_is_negative(new_dentry); in afs_rename()
1944 op->ops = &afs_rename_operation; in afs_rename()
1957 op->rename.rehash = new_dentry; in afs_rename()
1962 op->rename.tmp = d_alloc(new_dentry->d_parent, in afs_rename()
1964 if (!op->rename.tmp) { in afs_rename()
1965 op->error = -ENOMEM; in afs_rename()
1971 new_dentry, op->key); in afs_rename()
1973 op->error = ret; in afs_rename()
1977 op->dentry_2 = op->rename.tmp; in afs_rename()
1978 op->rename.rehash = NULL; in afs_rename()
1979 op->rename.new_negative = true; in afs_rename()
1994 return afs_do_sync_operation(op); in afs_rename()
1997 return afs_put_operation(op); in afs_rename()