• Home
  • Raw
  • Download

Lines Matching refs:op

633 static void afs_do_lookup_success(struct afs_operation *op)  in afs_do_lookup_success()  argument
643 for (i = 0; i < op->nr_files; i++) { in afs_do_lookup_success()
646 vp = &op->file[0]; in afs_do_lookup_success()
649 op->ac.abort_code = abort_code; in afs_do_lookup_success()
650 op->error = afs_abort_to_error(abort_code); in afs_do_lookup_success()
655 vp = &op->file[1]; in afs_do_lookup_success()
659 vp = &op->more_files[i - 2]; in afs_do_lookup_success()
669 afs_vnode_commit_status(op, vp); in afs_do_lookup_success()
671 inode = afs_iget(op, vp); in afs_do_lookup_success()
674 afs_cache_permit(vnode, op->key, in afs_do_lookup_success()
676 op->cb_v_break, in afs_do_lookup_success()
745 struct afs_operation *op; in afs_do_lookup() local
789 op = afs_alloc_operation(NULL, dvnode->volume); in afs_do_lookup()
790 if (IS_ERR(op)) { in afs_do_lookup()
791 ret = PTR_ERR(op); in afs_do_lookup()
795 afs_op_set_vnode(op, 0, dvnode); in afs_do_lookup()
796 afs_op_set_fid(op, 1, &cookie->fids[1]); in afs_do_lookup()
798 op->nr_files = cookie->nr_fids; in afs_do_lookup()
799 _debug("nr_files %u", op->nr_files); in afs_do_lookup()
802 op->error = -ENOMEM; in afs_do_lookup()
803 if (op->nr_files > 2) { in afs_do_lookup()
804 op->more_files = kvcalloc(op->nr_files - 2, in afs_do_lookup()
807 if (!op->more_files) in afs_do_lookup()
810 for (i = 2; i < op->nr_files; i++) { in afs_do_lookup()
811 vp = &op->more_files[i - 2]; in afs_do_lookup()
834 op->error = -ENOTSUPP; in afs_do_lookup()
836 op->ops = &afs_inline_bulk_status_operation; in afs_do_lookup()
837 afs_begin_vnode_operation(op); in afs_do_lookup()
838 afs_wait_for_operation(op); in afs_do_lookup()
841 if (op->error == -ENOTSUPP) { in afs_do_lookup()
846 op->fetch_status.which = 1; in afs_do_lookup()
847 op->ops = &afs_lookup_fetch_status_operation; in afs_do_lookup()
848 afs_begin_vnode_operation(op); in afs_do_lookup()
849 afs_wait_for_operation(op); in afs_do_lookup()
851 inode = ERR_PTR(op->error); in afs_do_lookup()
854 if (op->error == 0) { in afs_do_lookup()
855 inode = &op->file[1].vnode->vfs_inode; in afs_do_lookup()
856 op->file[1].vnode = NULL; in afs_do_lookup()
859 if (op->file[0].scb.have_status) in afs_do_lookup()
860 dentry->d_fsdata = (void *)(unsigned long)op->file[0].scb.status.data_version; in afs_do_lookup()
862 dentry->d_fsdata = (void *)(unsigned long)op->file[0].dv_before; in afs_do_lookup()
863 ret = afs_put_operation(op); in afs_do_lookup()
1207 void afs_check_for_remote_deletion(struct afs_operation *op) in afs_check_for_remote_deletion() argument
1209 struct afs_vnode *vnode = op->file[0].vnode; in afs_check_for_remote_deletion()
1211 switch (op->ac.abort_code) { in afs_check_for_remote_deletion()
1221 static void afs_vnode_new_inode(struct afs_operation *op) in afs_vnode_new_inode() argument
1223 struct afs_vnode_param *vp = &op->file[1]; in afs_vnode_new_inode()
1229 ASSERTCMP(op->error, ==, 0); in afs_vnode_new_inode()
1231 inode = afs_iget(op, vp); in afs_vnode_new_inode()
1236 op->error = PTR_ERR(inode); in afs_vnode_new_inode()
1242 if (!op->error) in afs_vnode_new_inode()
1243 afs_cache_permit(vnode, op->key, vnode->cb_break, &vp->scb); in afs_vnode_new_inode()
1244 d_instantiate(op->dentry, inode); in afs_vnode_new_inode()
1247 static void afs_create_success(struct afs_operation *op) in afs_create_success() argument
1249 _enter("op=%08x", op->debug_id); in afs_create_success()
1250 op->ctime = op->file[0].scb.status.mtime_client; in afs_create_success()
1251 afs_vnode_commit_status(op, &op->file[0]); in afs_create_success()
1252 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_create_success()
1253 afs_vnode_new_inode(op); in afs_create_success()
1256 static void afs_create_edit_dir(struct afs_operation *op) in afs_create_edit_dir() argument
1258 struct afs_vnode_param *dvp = &op->file[0]; in afs_create_edit_dir()
1259 struct afs_vnode_param *vp = &op->file[1]; in afs_create_edit_dir()
1262 _enter("op=%08x", op->debug_id); in afs_create_edit_dir()
1267 afs_edit_dir_add(dvnode, &op->dentry->d_name, &vp->fid, in afs_create_edit_dir()
1268 op->create.reason); in afs_create_edit_dir()
1272 static void afs_create_put(struct afs_operation *op) in afs_create_put() argument
1274 _enter("op=%08x", op->debug_id); in afs_create_put()
1276 if (op->error) in afs_create_put()
1277 d_drop(op->dentry); in afs_create_put()
1294 struct afs_operation *op; in afs_mkdir() local
1300 op = afs_alloc_operation(NULL, dvnode->volume); in afs_mkdir()
1301 if (IS_ERR(op)) { in afs_mkdir()
1303 return PTR_ERR(op); in afs_mkdir()
1306 afs_op_set_vnode(op, 0, dvnode); in afs_mkdir()
1307 op->file[0].dv_delta = 1; in afs_mkdir()
1308 op->file[0].modification = true; in afs_mkdir()
1309 op->file[0].update_ctime = true; in afs_mkdir()
1310 op->dentry = dentry; in afs_mkdir()
1311 op->create.mode = S_IFDIR | mode; in afs_mkdir()
1312 op->create.reason = afs_edit_dir_for_mkdir; in afs_mkdir()
1313 op->ops = &afs_mkdir_operation; in afs_mkdir()
1314 return afs_do_sync_operation(op); in afs_mkdir()
1332 static void afs_rmdir_success(struct afs_operation *op) in afs_rmdir_success() argument
1334 _enter("op=%08x", op->debug_id); in afs_rmdir_success()
1335 op->ctime = op->file[0].scb.status.mtime_client; in afs_rmdir_success()
1336 afs_vnode_commit_status(op, &op->file[0]); in afs_rmdir_success()
1337 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_rmdir_success()
1340 static void afs_rmdir_edit_dir(struct afs_operation *op) in afs_rmdir_edit_dir() argument
1342 struct afs_vnode_param *dvp = &op->file[0]; in afs_rmdir_edit_dir()
1345 _enter("op=%08x", op->debug_id); in afs_rmdir_edit_dir()
1346 afs_dir_remove_subdir(op->dentry); in afs_rmdir_edit_dir()
1351 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_rmdir_edit_dir()
1356 static void afs_rmdir_put(struct afs_operation *op) in afs_rmdir_put() argument
1358 _enter("op=%08x", op->debug_id); in afs_rmdir_put()
1359 if (op->file[1].vnode) in afs_rmdir_put()
1360 up_write(&op->file[1].vnode->rmdir_lock); in afs_rmdir_put()
1377 struct afs_operation *op; in afs_rmdir() local
1384 op = afs_alloc_operation(NULL, dvnode->volume); in afs_rmdir()
1385 if (IS_ERR(op)) in afs_rmdir()
1386 return PTR_ERR(op); in afs_rmdir()
1388 afs_op_set_vnode(op, 0, dvnode); in afs_rmdir()
1389 op->file[0].dv_delta = 1; in afs_rmdir()
1390 op->file[0].modification = true; in afs_rmdir()
1391 op->file[0].update_ctime = true; in afs_rmdir()
1393 op->dentry = dentry; in afs_rmdir()
1394 op->ops = &afs_rmdir_operation; in afs_rmdir()
1399 ret = afs_validate(vnode, op->key); in afs_rmdir()
1408 op->file[1].vnode = vnode; in afs_rmdir()
1411 return afs_do_sync_operation(op); in afs_rmdir()
1414 return afs_put_operation(op); in afs_rmdir()
1427 static void afs_dir_remove_link(struct afs_operation *op) in afs_dir_remove_link() argument
1429 struct afs_vnode *dvnode = op->file[0].vnode; in afs_dir_remove_link()
1430 struct afs_vnode *vnode = op->file[1].vnode; in afs_dir_remove_link()
1431 struct dentry *dentry = op->dentry; in afs_dir_remove_link()
1434 if (op->error != 0 || in afs_dir_remove_link()
1435 (op->file[1].scb.have_status && op->file[1].scb.have_error)) in afs_dir_remove_link()
1456 ret = afs_validate(vnode, op->key); in afs_dir_remove_link()
1458 op->error = ret; in afs_dir_remove_link()
1461 _debug("nlink %d [val %d]", vnode->vfs_inode.i_nlink, op->error); in afs_dir_remove_link()
1464 static void afs_unlink_success(struct afs_operation *op) in afs_unlink_success() argument
1466 _enter("op=%08x", op->debug_id); in afs_unlink_success()
1467 op->ctime = op->file[0].scb.status.mtime_client; in afs_unlink_success()
1468 afs_check_dir_conflict(op, &op->file[0]); in afs_unlink_success()
1469 afs_vnode_commit_status(op, &op->file[0]); in afs_unlink_success()
1470 afs_vnode_commit_status(op, &op->file[1]); in afs_unlink_success()
1471 afs_update_dentry_version(op, &op->file[0], op->dentry); in afs_unlink_success()
1472 afs_dir_remove_link(op); in afs_unlink_success()
1475 static void afs_unlink_edit_dir(struct afs_operation *op) in afs_unlink_edit_dir() argument
1477 struct afs_vnode_param *dvp = &op->file[0]; in afs_unlink_edit_dir()
1480 _enter("op=%08x", op->debug_id); in afs_unlink_edit_dir()
1484 afs_edit_dir_remove(dvnode, &op->dentry->d_name, in afs_unlink_edit_dir()
1489 static void afs_unlink_put(struct afs_operation *op) in afs_unlink_put() argument
1491 _enter("op=%08x", op->debug_id); in afs_unlink_put()
1492 if (op->unlink.need_rehash && op->error < 0 && op->error != -ENOENT) in afs_unlink_put()
1493 d_rehash(op->dentry); in afs_unlink_put()
1510 struct afs_operation *op; in afs_unlink() local
1521 op = afs_alloc_operation(NULL, dvnode->volume); in afs_unlink()
1522 if (IS_ERR(op)) in afs_unlink()
1523 return PTR_ERR(op); in afs_unlink()
1525 afs_op_set_vnode(op, 0, dvnode); in afs_unlink()
1526 op->file[0].dv_delta = 1; in afs_unlink()
1527 op->file[0].modification = true; in afs_unlink()
1528 op->file[0].update_ctime = true; in afs_unlink()
1531 ret = afs_validate(vnode, op->key); in afs_unlink()
1533 op->error = ret; in afs_unlink()
1542 op->error = afs_sillyrename(dvnode, vnode, dentry, op->key); in afs_unlink()
1548 op->unlink.need_rehash = true; in afs_unlink()
1552 op->file[1].vnode = vnode; in afs_unlink()
1553 op->file[1].update_ctime = true; in afs_unlink()
1554 op->file[1].op_unlinked = true; in afs_unlink()
1555 op->dentry = dentry; in afs_unlink()
1556 op->ops = &afs_unlink_operation; in afs_unlink()
1557 afs_begin_vnode_operation(op); in afs_unlink()
1558 afs_wait_for_operation(op); in afs_unlink()
1563 if (op->error == 0 && (op->flags & AFS_OPERATION_DIR_CONFLICT)) { in afs_unlink()
1564 op->file[1].update_ctime = false; in afs_unlink()
1565 op->fetch_status.which = 1; in afs_unlink()
1566 op->ops = &afs_fetch_status_operation; in afs_unlink()
1567 afs_begin_vnode_operation(op); in afs_unlink()
1568 afs_wait_for_operation(op); in afs_unlink()
1571 return afs_put_operation(op); in afs_unlink()
1574 return afs_put_operation(op); in afs_unlink()
1592 struct afs_operation *op; in afs_create() local
1602 op = afs_alloc_operation(NULL, dvnode->volume); in afs_create()
1603 if (IS_ERR(op)) { in afs_create()
1604 ret = PTR_ERR(op); in afs_create()
1608 afs_op_set_vnode(op, 0, dvnode); in afs_create()
1609 op->file[0].dv_delta = 1; in afs_create()
1610 op->file[0].modification = true; in afs_create()
1611 op->file[0].update_ctime = true; in afs_create()
1613 op->dentry = dentry; in afs_create()
1614 op->create.mode = S_IFREG | mode; in afs_create()
1615 op->create.reason = afs_edit_dir_for_create; in afs_create()
1616 op->ops = &afs_create_operation; in afs_create()
1617 return afs_do_sync_operation(op); in afs_create()
1625 static void afs_link_success(struct afs_operation *op) in afs_link_success() argument
1627 struct afs_vnode_param *dvp = &op->file[0]; in afs_link_success()
1628 struct afs_vnode_param *vp = &op->file[1]; in afs_link_success()
1630 _enter("op=%08x", op->debug_id); in afs_link_success()
1631 op->ctime = dvp->scb.status.mtime_client; in afs_link_success()
1632 afs_vnode_commit_status(op, dvp); in afs_link_success()
1633 afs_vnode_commit_status(op, vp); in afs_link_success()
1634 afs_update_dentry_version(op, dvp, op->dentry); in afs_link_success()
1635 if (op->dentry_2->d_parent == op->dentry->d_parent) in afs_link_success()
1636 afs_update_dentry_version(op, dvp, op->dentry_2); in afs_link_success()
1638 d_instantiate(op->dentry, &vp->vnode->vfs_inode); in afs_link_success()
1641 static void afs_link_put(struct afs_operation *op) in afs_link_put() argument
1643 _enter("op=%08x", op->debug_id); in afs_link_put()
1644 if (op->error) in afs_link_put()
1645 d_drop(op->dentry); in afs_link_put()
1663 struct afs_operation *op; in afs_link() local
1676 op = afs_alloc_operation(NULL, dvnode->volume); in afs_link()
1677 if (IS_ERR(op)) { in afs_link()
1678 ret = PTR_ERR(op); in afs_link()
1682 afs_op_set_vnode(op, 0, dvnode); in afs_link()
1683 afs_op_set_vnode(op, 1, vnode); in afs_link()
1684 op->file[0].dv_delta = 1; in afs_link()
1685 op->file[0].modification = true; in afs_link()
1686 op->file[0].update_ctime = true; in afs_link()
1687 op->file[1].update_ctime = true; in afs_link()
1689 op->dentry = dentry; in afs_link()
1690 op->dentry_2 = from; in afs_link()
1691 op->ops = &afs_link_operation; in afs_link()
1692 op->create.reason = afs_edit_dir_for_link; in afs_link()
1693 return afs_do_sync_operation(op); in afs_link()
1716 struct afs_operation *op; in afs_symlink() local
1732 op = afs_alloc_operation(NULL, dvnode->volume); in afs_symlink()
1733 if (IS_ERR(op)) { in afs_symlink()
1734 ret = PTR_ERR(op); in afs_symlink()
1738 afs_op_set_vnode(op, 0, dvnode); in afs_symlink()
1739 op->file[0].dv_delta = 1; in afs_symlink()
1741 op->dentry = dentry; in afs_symlink()
1742 op->ops = &afs_symlink_operation; in afs_symlink()
1743 op->create.reason = afs_edit_dir_for_symlink; in afs_symlink()
1744 op->create.symlink = content; in afs_symlink()
1745 return afs_do_sync_operation(op); in afs_symlink()
1753 static void afs_rename_success(struct afs_operation *op) in afs_rename_success() argument
1755 _enter("op=%08x", op->debug_id); in afs_rename_success()
1757 op->ctime = op->file[0].scb.status.mtime_client; in afs_rename_success()
1758 afs_check_dir_conflict(op, &op->file[1]); in afs_rename_success()
1759 afs_vnode_commit_status(op, &op->file[0]); in afs_rename_success()
1760 if (op->file[1].vnode != op->file[0].vnode) { in afs_rename_success()
1761 op->ctime = op->file[1].scb.status.mtime_client; in afs_rename_success()
1762 afs_vnode_commit_status(op, &op->file[1]); in afs_rename_success()
1766 static void afs_rename_edit_dir(struct afs_operation *op) in afs_rename_edit_dir() argument
1768 struct afs_vnode_param *orig_dvp = &op->file[0]; in afs_rename_edit_dir()
1769 struct afs_vnode_param *new_dvp = &op->file[1]; in afs_rename_edit_dir()
1772 struct afs_vnode *vnode = AFS_FS_I(d_inode(op->dentry)); in afs_rename_edit_dir()
1773 struct dentry *old_dentry = op->dentry; in afs_rename_edit_dir()
1774 struct dentry *new_dentry = op->dentry_2; in afs_rename_edit_dir()
1777 _enter("op=%08x", op->debug_id); in afs_rename_edit_dir()
1779 if (op->rename.rehash) { in afs_rename_edit_dir()
1780 d_rehash(op->rename.rehash); in afs_rename_edit_dir()
1781 op->rename.rehash = NULL; in afs_rename_edit_dir()
1797 if (!op->rename.new_negative) in afs_rename_edit_dir()
1821 afs_update_dentry_version(op, new_dvp, op->dentry); in afs_rename_edit_dir()
1822 afs_update_dentry_version(op, new_dvp, op->dentry_2); in afs_rename_edit_dir()
1829 static void afs_rename_put(struct afs_operation *op) in afs_rename_put() argument
1831 _enter("op=%08x", op->debug_id); in afs_rename_put()
1832 if (op->rename.rehash) in afs_rename_put()
1833 d_rehash(op->rename.rehash); in afs_rename_put()
1834 dput(op->rename.tmp); in afs_rename_put()
1835 if (op->error) in afs_rename_put()
1836 d_rehash(op->dentry); in afs_rename_put()
1854 struct afs_operation *op; in afs_rename() local
1875 op = afs_alloc_operation(NULL, orig_dvnode->volume); in afs_rename()
1876 if (IS_ERR(op)) in afs_rename()
1877 return PTR_ERR(op); in afs_rename()
1879 afs_op_set_vnode(op, 0, orig_dvnode); in afs_rename()
1880 afs_op_set_vnode(op, 1, new_dvnode); /* May be same as orig_dvnode */ in afs_rename()
1881 op->file[0].dv_delta = 1; in afs_rename()
1882 op->file[1].dv_delta = 1; in afs_rename()
1883 op->file[0].modification = true; in afs_rename()
1884 op->file[1].modification = true; in afs_rename()
1885 op->file[0].update_ctime = true; in afs_rename()
1886 op->file[1].update_ctime = true; in afs_rename()
1888 op->dentry = old_dentry; in afs_rename()
1889 op->dentry_2 = new_dentry; in afs_rename()
1890 op->rename.new_negative = d_is_negative(new_dentry); in afs_rename()
1891 op->ops = &afs_rename_operation; in afs_rename()
1904 op->rename.rehash = new_dentry; in afs_rename()
1910 op->rename.tmp = d_alloc(new_dentry->d_parent, in afs_rename()
1912 if (!op->rename.tmp) in afs_rename()
1917 new_dentry, op->key); in afs_rename()
1921 op->dentry_2 = op->rename.tmp; in afs_rename()
1922 op->rename.rehash = NULL; in afs_rename()
1923 op->rename.new_negative = true; in afs_rename()
1938 return afs_do_sync_operation(op); in afs_rename()
1941 return afs_put_operation(op); in afs_rename()