Lines Matching refs:op
634 static void afs_do_lookup_success(struct afs_operation *op) in afs_do_lookup_success() argument
644 for (i = 0; i < op->nr_files; i++) { in afs_do_lookup_success()
647 vp = &op->file[0]; in afs_do_lookup_success()
650 op->ac.abort_code = abort_code; in afs_do_lookup_success()
651 op->error = afs_abort_to_error(abort_code); in afs_do_lookup_success()
656 vp = &op->file[1]; in afs_do_lookup_success()
660 vp = &op->more_files[i - 2]; in afs_do_lookup_success()
670 afs_vnode_commit_status(op, vp); in afs_do_lookup_success()
672 inode = afs_iget(op, vp); in afs_do_lookup_success()
675 afs_cache_permit(vnode, op->key, in afs_do_lookup_success()
677 op->cb_v_break, in afs_do_lookup_success()
746 struct afs_operation *op; in afs_do_lookup() local
790 op = afs_alloc_operation(NULL, dvnode->volume); in afs_do_lookup()
791 if (IS_ERR(op)) { in afs_do_lookup()
792 ret = PTR_ERR(op); in afs_do_lookup()
796 afs_op_set_vnode(op, 0, dvnode); in afs_do_lookup()
797 afs_op_set_fid(op, 1, &cookie->fids[1]); in afs_do_lookup()
799 op->nr_files = cookie->nr_fids; in afs_do_lookup()
800 _debug("nr_files %u", op->nr_files); in afs_do_lookup()
803 op->error = -ENOMEM; in afs_do_lookup()
804 if (op->nr_files > 2) { in afs_do_lookup()
805 op->more_files = kvcalloc(op->nr_files - 2, in afs_do_lookup()
808 if (!op->more_files) in afs_do_lookup()
811 for (i = 2; i < op->nr_files; i++) { in afs_do_lookup()
812 vp = &op->more_files[i - 2]; in afs_do_lookup()
835 op->error = -ENOTSUPP; in afs_do_lookup()
837 op->ops = &afs_inline_bulk_status_operation; in afs_do_lookup()
838 afs_begin_vnode_operation(op); in afs_do_lookup()
839 afs_wait_for_operation(op); in afs_do_lookup()
842 if (op->error == -ENOTSUPP) { in afs_do_lookup()
847 op->fetch_status.which = 1; in afs_do_lookup()
848 op->ops = &afs_lookup_fetch_status_operation; in afs_do_lookup()
849 afs_begin_vnode_operation(op); in afs_do_lookup()
850 afs_wait_for_operation(op); in afs_do_lookup()
852 inode = ERR_PTR(op->error); in afs_do_lookup()
855 if (op->error == 0) { in afs_do_lookup()
856 inode = &op->file[1].vnode->vfs_inode; in afs_do_lookup()
857 op->file[1].vnode = NULL; in afs_do_lookup()
860 if (op->file[0].scb.have_status) in afs_do_lookup()
861 dentry->d_fsdata = (void *)(unsigned long)op->file[0].scb.status.data_version; in afs_do_lookup()
863 dentry->d_fsdata = (void *)(unsigned long)op->file[0].dv_before; in afs_do_lookup()
864 ret = afs_put_operation(op); in afs_do_lookup()
1240 void afs_check_for_remote_deletion(struct afs_operation *op) in afs_check_for_remote_deletion() argument
1242 struct afs_vnode *vnode = op->file[0].vnode; in afs_check_for_remote_deletion()
1244 switch (op->ac.abort_code) { in afs_check_for_remote_deletion()
1254 static void afs_vnode_new_inode(struct afs_operation *op) in afs_vnode_new_inode() argument
1256 struct afs_vnode_param *vp = &op->file[1]; in afs_vnode_new_inode()
1262 ASSERTCMP(op->error, ==, 0); in afs_vnode_new_inode()
1264 inode = afs_iget(op, vp); in afs_vnode_new_inode()
1269 op->error = PTR_ERR(inode); in afs_vnode_new_inode()
1275 if (!op->error) in afs_vnode_new_inode()
1276 afs_cache_permit(vnode, op->key, vnode->cb_break, &vp->scb); in afs_vnode_new_inode()
1277 d_instantiate(op->dentry, inode); in afs_vnode_new_inode()
1280 static void afs_create_success(struct afs_operation *op) in afs_create_success() argument
1282 _enter("op=%08x", op->debug_id); in afs_create_success()
1283 op->ctime = op->file[0].scb.status.mtime_client; in afs_create_success()
1284 afs_vnode_commit_status(op, &op->file[0]); in afs_create_success()
1285 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_create_success()
1286 afs_vnode_new_inode(op); in afs_create_success()
1289 static void afs_create_edit_dir(struct afs_operation *op) in afs_create_edit_dir() argument
1291 struct afs_vnode_param *dvp = &op->file[0]; in afs_create_edit_dir()
1292 struct afs_vnode_param *vp = &op->file[1]; in afs_create_edit_dir()
1295 _enter("op=%08x", op->debug_id); in afs_create_edit_dir()
1300 afs_edit_dir_add(dvnode, &op->dentry->d_name, &vp->fid, in afs_create_edit_dir()
1301 op->create.reason); in afs_create_edit_dir()
1305 static void afs_create_put(struct afs_operation *op) in afs_create_put() argument
1307 _enter("op=%08x", op->debug_id); in afs_create_put()
1309 if (op->error) in afs_create_put()
1310 d_drop(op->dentry); in afs_create_put()
1327 struct afs_operation *op; in afs_mkdir() local
1333 op = afs_alloc_operation(NULL, dvnode->volume); in afs_mkdir()
1334 if (IS_ERR(op)) { in afs_mkdir()
1336 return PTR_ERR(op); in afs_mkdir()
1339 afs_op_set_vnode(op, 0, dvnode); in afs_mkdir()
1340 op->file[0].dv_delta = 1; in afs_mkdir()
1341 op->file[0].update_ctime = true; in afs_mkdir()
1342 op->dentry = dentry; in afs_mkdir()
1343 op->create.mode = S_IFDIR | mode; in afs_mkdir()
1344 op->create.reason = afs_edit_dir_for_mkdir; in afs_mkdir()
1345 op->ops = &afs_mkdir_operation; in afs_mkdir()
1346 return afs_do_sync_operation(op); in afs_mkdir()
1364 static void afs_rmdir_success(struct afs_operation *op) in afs_rmdir_success() argument
1366 _enter("op=%08x", op->debug_id); in afs_rmdir_success()
1367 op->ctime = op->file[0].scb.status.mtime_client; in afs_rmdir_success()
1368 afs_vnode_commit_status(op, &op->file[0]); in afs_rmdir_success()
1369 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_rmdir_success()
1372 static void afs_rmdir_edit_dir(struct afs_operation *op) in afs_rmdir_edit_dir() argument
1374 struct afs_vnode_param *dvp = &op->file[0]; in afs_rmdir_edit_dir()
1377 _enter("op=%08x", op->debug_id); in afs_rmdir_edit_dir()
1378 afs_dir_remove_subdir(op->dentry); in afs_rmdir_edit_dir()
1383 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_rmdir_edit_dir()
1388 static void afs_rmdir_put(struct afs_operation *op) in afs_rmdir_put() argument
1390 _enter("op=%08x", op->debug_id); in afs_rmdir_put()
1391 if (op->file[1].vnode) in afs_rmdir_put()
1392 up_write(&op->file[1].vnode->rmdir_lock); in afs_rmdir_put()
1409 struct afs_operation *op; in afs_rmdir() local
1416 op = afs_alloc_operation(NULL, dvnode->volume); in afs_rmdir()
1417 if (IS_ERR(op)) in afs_rmdir()
1418 return PTR_ERR(op); in afs_rmdir()
1420 afs_op_set_vnode(op, 0, dvnode); in afs_rmdir()
1421 op->file[0].dv_delta = 1; in afs_rmdir()
1422 op->file[0].update_ctime = true; in afs_rmdir()
1424 op->dentry = dentry; in afs_rmdir()
1425 op->ops = &afs_rmdir_operation; in afs_rmdir()
1430 ret = afs_validate(vnode, op->key); in afs_rmdir()
1439 op->file[1].vnode = vnode; in afs_rmdir()
1442 return afs_do_sync_operation(op); in afs_rmdir()
1445 return afs_put_operation(op); in afs_rmdir()
1458 static void afs_dir_remove_link(struct afs_operation *op) in afs_dir_remove_link() argument
1460 struct afs_vnode *dvnode = op->file[0].vnode; in afs_dir_remove_link()
1461 struct afs_vnode *vnode = op->file[1].vnode; in afs_dir_remove_link()
1462 struct dentry *dentry = op->dentry; in afs_dir_remove_link()
1465 if (op->error != 0 || in afs_dir_remove_link()
1466 (op->file[1].scb.have_status && op->file[1].scb.have_error)) in afs_dir_remove_link()
1487 ret = afs_validate(vnode, op->key); in afs_dir_remove_link()
1489 op->error = ret; in afs_dir_remove_link()
1492 _debug("nlink %d [val %d]", vnode->vfs_inode.i_nlink, op->error); in afs_dir_remove_link()
1495 static void afs_unlink_success(struct afs_operation *op) in afs_unlink_success() argument
1497 _enter("op=%08x", op->debug_id); in afs_unlink_success()
1498 op->ctime = op->file[0].scb.status.mtime_client; in afs_unlink_success()
1499 afs_check_dir_conflict(op, &op->file[0]); in afs_unlink_success()
1500 afs_vnode_commit_status(op, &op->file[0]); in afs_unlink_success()
1501 afs_vnode_commit_status(op, &op->file[1]); in afs_unlink_success()
1502 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_unlink_success()
1503 afs_dir_remove_link(op); in afs_unlink_success()
1506 static void afs_unlink_edit_dir(struct afs_operation *op) in afs_unlink_edit_dir() argument
1508 struct afs_vnode_param *dvp = &op->file[0]; in afs_unlink_edit_dir()
1511 _enter("op=%08x", op->debug_id); in afs_unlink_edit_dir()
1515 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_unlink_edit_dir()
1520 static void afs_unlink_put(struct afs_operation *op) in afs_unlink_put() argument
1522 _enter("op=%08x", op->debug_id); in afs_unlink_put()
1523 if (op->unlink.need_rehash && op->error < 0 && op->error != -ENOENT) in afs_unlink_put()
1524 d_rehash(op->dentry); in afs_unlink_put()
1541 struct afs_operation *op; in afs_unlink() local
1552 op = afs_alloc_operation(NULL, dvnode->volume); in afs_unlink()
1553 if (IS_ERR(op)) in afs_unlink()
1554 return PTR_ERR(op); in afs_unlink()
1556 afs_op_set_vnode(op, 0, dvnode); in afs_unlink()
1557 op->file[0].dv_delta = 1; in afs_unlink()
1558 op->file[0].update_ctime = true; in afs_unlink()
1561 ret = afs_validate(vnode, op->key); in afs_unlink()
1563 op->error = ret; in afs_unlink()
1572 op->error = afs_sillyrename(dvnode, vnode, dentry, op->key); in afs_unlink()
1578 op->unlink.need_rehash = true; in afs_unlink()
1582 op->file[1].vnode = vnode; in afs_unlink()
1583 op->file[1].update_ctime = true; in afs_unlink()
1584 op->file[1].op_unlinked = true; in afs_unlink()
1585 op->dentry = dentry; in afs_unlink()
1586 op->ops = &afs_unlink_operation; in afs_unlink()
1587 afs_begin_vnode_operation(op); in afs_unlink()
1588 afs_wait_for_operation(op); in afs_unlink()
1593 if (op->error == 0 && (op->flags & AFS_OPERATION_DIR_CONFLICT)) { in afs_unlink()
1594 op->file[1].update_ctime = false; in afs_unlink()
1595 op->fetch_status.which = 1; in afs_unlink()
1596 op->ops = &afs_fetch_status_operation; in afs_unlink()
1597 afs_begin_vnode_operation(op); in afs_unlink()
1598 afs_wait_for_operation(op); in afs_unlink()
1601 return afs_put_operation(op); in afs_unlink()
1604 return afs_put_operation(op); in afs_unlink()
1622 struct afs_operation *op; in afs_create() local
1632 op = afs_alloc_operation(NULL, dvnode->volume); in afs_create()
1633 if (IS_ERR(op)) { in afs_create()
1634 ret = PTR_ERR(op); in afs_create()
1638 afs_op_set_vnode(op, 0, dvnode); in afs_create()
1639 op->file[0].dv_delta = 1; in afs_create()
1640 op->file[0].update_ctime = true; in afs_create()
1642 op->dentry = dentry; in afs_create()
1643 op->create.mode = S_IFREG | mode; in afs_create()
1644 op->create.reason = afs_edit_dir_for_create; in afs_create()
1645 op->ops = &afs_create_operation; in afs_create()
1646 return afs_do_sync_operation(op); in afs_create()
1654 static void afs_link_success(struct afs_operation *op) in afs_link_success() argument
1656 struct afs_vnode_param *dvp = &op->file[0]; in afs_link_success()
1657 struct afs_vnode_param *vp = &op->file[1]; in afs_link_success()
1659 _enter("op=%08x", op->debug_id); in afs_link_success()
1660 op->ctime = dvp->scb.status.mtime_client; in afs_link_success()
1661 afs_vnode_commit_status(op, dvp); in afs_link_success()
1662 afs_vnode_commit_status(op, vp); in afs_link_success()
1663 afs_update_dentry_version(op, dvp, op->dentry); in afs_link_success()
1664 if (op->dentry_2->d_parent == op->dentry->d_parent) in afs_link_success()
1665 afs_update_dentry_version(op, dvp, op->dentry_2); in afs_link_success()
1667 d_instantiate(op->dentry, &vp->vnode->vfs_inode); in afs_link_success()
1670 static void afs_link_put(struct afs_operation *op) in afs_link_put() argument
1672 _enter("op=%08x", op->debug_id); in afs_link_put()
1673 if (op->error) in afs_link_put()
1674 d_drop(op->dentry); in afs_link_put()
1692 struct afs_operation *op; in afs_link() local
1705 op = afs_alloc_operation(NULL, dvnode->volume); in afs_link()
1706 if (IS_ERR(op)) { in afs_link()
1707 ret = PTR_ERR(op); in afs_link()
1711 afs_op_set_vnode(op, 0, dvnode); in afs_link()
1712 afs_op_set_vnode(op, 1, vnode); in afs_link()
1713 op->file[0].dv_delta = 1; in afs_link()
1714 op->file[0].update_ctime = true; in afs_link()
1715 op->file[1].update_ctime = true; in afs_link()
1717 op->dentry = dentry; in afs_link()
1718 op->dentry_2 = from; in afs_link()
1719 op->ops = &afs_link_operation; in afs_link()
1720 op->create.reason = afs_edit_dir_for_link; in afs_link()
1721 return afs_do_sync_operation(op); in afs_link()
1744 struct afs_operation *op; in afs_symlink() local
1760 op = afs_alloc_operation(NULL, dvnode->volume); in afs_symlink()
1761 if (IS_ERR(op)) { in afs_symlink()
1762 ret = PTR_ERR(op); in afs_symlink()
1766 afs_op_set_vnode(op, 0, dvnode); in afs_symlink()
1767 op->file[0].dv_delta = 1; in afs_symlink()
1769 op->dentry = dentry; in afs_symlink()
1770 op->ops = &afs_symlink_operation; in afs_symlink()
1771 op->create.reason = afs_edit_dir_for_symlink; in afs_symlink()
1772 op->create.symlink = content; in afs_symlink()
1773 return afs_do_sync_operation(op); in afs_symlink()
1781 static void afs_rename_success(struct afs_operation *op) in afs_rename_success() argument
1783 _enter("op=%08x", op->debug_id); in afs_rename_success()
1785 op->ctime = op->file[0].scb.status.mtime_client; in afs_rename_success()
1786 afs_check_dir_conflict(op, &op->file[1]); in afs_rename_success()
1787 afs_vnode_commit_status(op, &op->file[0]); in afs_rename_success()
1788 if (op->file[1].vnode != op->file[0].vnode) { in afs_rename_success()
1789 op->ctime = op->file[1].scb.status.mtime_client; in afs_rename_success()
1790 afs_vnode_commit_status(op, &op->file[1]); in afs_rename_success()
1794 static void afs_rename_edit_dir(struct afs_operation *op) in afs_rename_edit_dir() argument
1796 struct afs_vnode_param *orig_dvp = &op->file[0]; in afs_rename_edit_dir()
1797 struct afs_vnode_param *new_dvp = &op->file[1]; in afs_rename_edit_dir()
1800 struct afs_vnode *vnode = AFS_FS_I(d_inode(op->dentry)); in afs_rename_edit_dir()
1801 struct dentry *old_dentry = op->dentry; in afs_rename_edit_dir()
1802 struct dentry *new_dentry = op->dentry_2; in afs_rename_edit_dir()
1805 _enter("op=%08x", op->debug_id); in afs_rename_edit_dir()
1807 if (op->rename.rehash) { in afs_rename_edit_dir()
1808 d_rehash(op->rename.rehash); in afs_rename_edit_dir()
1809 op->rename.rehash = NULL; in afs_rename_edit_dir()
1825 if (!op->rename.new_negative) in afs_rename_edit_dir()
1847 afs_update_dentry_version(op, new_dvp, op->dentry); in afs_rename_edit_dir()
1848 afs_update_dentry_version(op, new_dvp, op->dentry_2); in afs_rename_edit_dir()
1855 static void afs_rename_put(struct afs_operation *op) in afs_rename_put() argument
1857 _enter("op=%08x", op->debug_id); in afs_rename_put()
1858 if (op->rename.rehash) in afs_rename_put()
1859 d_rehash(op->rename.rehash); in afs_rename_put()
1860 dput(op->rename.tmp); in afs_rename_put()
1861 if (op->error) in afs_rename_put()
1862 d_rehash(op->dentry); in afs_rename_put()
1880 struct afs_operation *op; in afs_rename() local
1901 op = afs_alloc_operation(NULL, orig_dvnode->volume); in afs_rename()
1902 if (IS_ERR(op)) in afs_rename()
1903 return PTR_ERR(op); in afs_rename()
1905 afs_op_set_vnode(op, 0, orig_dvnode); in afs_rename()
1906 afs_op_set_vnode(op, 1, new_dvnode); /* May be same as orig_dvnode */ in afs_rename()
1907 op->file[0].dv_delta = 1; in afs_rename()
1908 op->file[1].dv_delta = 1; in afs_rename()
1909 op->file[0].update_ctime = true; in afs_rename()
1910 op->file[1].update_ctime = true; in afs_rename()
1912 op->dentry = old_dentry; in afs_rename()
1913 op->dentry_2 = new_dentry; in afs_rename()
1914 op->rename.new_negative = d_is_negative(new_dentry); in afs_rename()
1915 op->ops = &afs_rename_operation; in afs_rename()
1928 op->rename.rehash = new_dentry; in afs_rename()
1934 op->rename.tmp = d_alloc(new_dentry->d_parent, in afs_rename()
1936 if (!op->rename.tmp) in afs_rename()
1941 new_dentry, op->key); in afs_rename()
1945 op->dentry_2 = op->rename.tmp; in afs_rename()
1946 op->rename.rehash = NULL; in afs_rename()
1947 op->rename.new_negative = true; in afs_rename()
1962 return afs_do_sync_operation(op); in afs_rename()
1965 return afs_put_operation(op); in afs_rename()