Changeset 75675 in vbox for trunk/src/VBox/Additions/darwin/VBoxSF/VBoxSF-VNodeOps.cpp
- Timestamp:
- Nov 22, 2018 9:16:48 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/darwin/VBoxSF/VBoxSF-VNodeOps.cpp
r75666 r75675 21 21 * Header Files * 22 22 *********************************************************************************************************************************/ 23 #define LOG_GROUP LOG_GROUP_SHARED_FOLDERS 23 24 #include "VBoxSFInternal.h" 24 25 25 26 #include <iprt/mem.h> 26 27 #include <iprt/assert.h> 27 28 29 30 int vboxvfs_dfl_error(void) 31 { 32 PDEBUG("vboxvfs_dfl_error is called"); 33 28 #include <VBox/log.h> 29 30 31 /********************************************************************************************************************************* 32 * Structures and Typedefs * 33 *********************************************************************************************************************************/ 34 struct default_error_args_hack 35 { 36 struct default_error_vdesc_hack 37 { 38 int vdesc_offset; 39 const char *vdesc_name; 40 } const *a_desc; 41 }; 42 43 44 45 /** 46 * Default implementation that returns ENOTSUP. 47 */ 48 static int vboxSfDwnVnDefaultError(struct default_error_args_hack *pArgs) 49 { 50 Log(("vboxSfDwnVnDefaultError: %s\n", RT_VALID_PTR(pArgs) && RT_VALID_PTR(pArgs->a_desc) ? pArgs->a_desc->vdesc_name : "??")); 51 RT_NOREF(pArgs); 34 52 return ENOTSUP; 35 53 } 36 54 37 int vboxvfs_vnode_getattr(struct vnop_getattr_args *args) 38 { 55 56 static int vboxFsDwnVnGetAttr(struct vnop_getattr_args *pArgs) 57 { 58 #if 1 59 RT_NOREF(pArgs); 60 return ENOTSUP; 61 #else 62 39 63 vboxvfs_mount_t *pMount; 40 64 struct vnode_attr *vnode_args; … … 50 74 PDEBUG("Getting vnode attribute..."); 51 75 52 AssertReturn( args, EINVAL);53 54 vnode = args->a_vp; AssertReturn(vnode, EINVAL);55 vnode_args = args->a_vap; AssertReturn(vnode_args, EINVAL);76 AssertReturn(pArgs, EINVAL); 77 78 vnode = pArgs->a_vp; AssertReturn(vnode, EINVAL); 79 vnode_args = pArgs->a_vap; AssertReturn(vnode_args, EINVAL); 56 80 mp = vnode_mount(vnode); AssertReturn(mp, EINVAL); 57 81 pMount = (vboxvfs_mount_t *)vfs_fsprivate(mp); AssertReturn(pMount, EINVAL); … … 125 149 126 150 return rc; 127 } 128 151 #endif 152 } 153 154 #if 0 129 155 /** 130 156 * Helper function for vboxvfs_vnode_lookup(): create new vnode. … … 217 243 */ 218 244 static int 219 vboxvfs_vnode_lookup_dot_handler(struct vnop_lookup_args * args, vnode_t *result_vnode)245 vboxvfs_vnode_lookup_dot_handler(struct vnop_lookup_args *pArgs, vnode_t *result_vnode) 220 246 { 221 247 vnode_t vnode = NULL; 222 248 223 if ( args->a_cnp->cn_flags & ISDOTDOT)224 { 225 vnode = vnode_getparent( args->a_dvp);249 if (pArgs->a_cnp->cn_flags & ISDOTDOT) 250 { 251 vnode = vnode_getparent(pArgs->a_dvp); 226 252 if (vnode) 227 253 { … … 233 259 { 234 260 PDEBUG("return parent directory not found, return current directory"); 235 *result_vnode = args->a_dvp;261 *result_vnode = pArgs->a_dvp; 236 262 return 0; 237 263 } 238 264 } 239 else if ((strncmp( args->a_cnp->cn_nameptr, ".", 1) == 0) &&240 args->a_cnp->cn_namelen == 1)265 else if ((strncmp(pArgs->a_cnp->cn_nameptr, ".", 1) == 0) && 266 pArgs->a_cnp->cn_namelen == 1) 241 267 { 242 268 PDEBUG("return current directory"); 243 *result_vnode = args->a_dvp;269 *result_vnode = pArgs->a_dvp; 244 270 return 0; 245 271 } … … 247 273 return ENOENT; 248 274 } 249 250 int vboxvfs_vnode_lookup(struct vnop_lookup_args *args) 251 { 275 #endif 276 277 static int vboxSfDwnVnLookup(struct vnop_lookup_args *pArgs) 278 { 279 #if 1 280 RT_NOREF(pArgs); 281 return ENOTSUP; 282 #else 252 283 int rc; 253 284 … … 257 288 PDEBUG("Looking up for vnode..."); 258 289 259 AssertReturn( args, EINVAL);260 AssertReturn( args->a_dvp, EINVAL);261 AssertReturn(vnode_isdir( args->a_dvp), EINVAL);262 AssertReturn( args->a_cnp, EINVAL);263 AssertReturn( args->a_cnp->cn_nameptr, EINVAL);264 AssertReturn( args->a_vpp, EINVAL);265 266 pVnodeData = (vboxvfs_vnode_t *)vnode_fsnode( args->a_dvp);290 AssertReturn(pArgs, EINVAL); 291 AssertReturn(pArgs->a_dvp, EINVAL); 292 AssertReturn(vnode_isdir(pArgs->a_dvp), EINVAL); 293 AssertReturn(pArgs->a_cnp, EINVAL); 294 AssertReturn(pArgs->a_cnp->cn_nameptr, EINVAL); 295 AssertReturn(pArgs->a_vpp, EINVAL); 296 297 pVnodeData = (vboxvfs_vnode_t *)vnode_fsnode(pArgs->a_dvp); 267 298 AssertReturn(pVnodeData, EINVAL); 268 299 AssertReturn(pVnodeData->pLock, EINVAL); 269 300 270 301 /* 271 todo: take care about args->a_cnp->cn_nameiop302 todo: take care about pArgs->a_cnp->cn_nameiop 272 303 */ 273 304 274 if ( args->a_cnp->cn_nameiop == LOOKUP) PDEBUG("LOOKUP");275 else if ( args->a_cnp->cn_nameiop == CREATE) PDEBUG("CREATE");276 else if ( args->a_cnp->cn_nameiop == RENAME) PDEBUG("RENAME");277 else if ( args->a_cnp->cn_nameiop == DELETE) PDEBUG("DELETE");278 else PDEBUG("Unknown cn_nameiop: 0x%X", (int) args->a_cnp->cn_nameiop);305 if (pArgs->a_cnp->cn_nameiop == LOOKUP) PDEBUG("LOOKUP"); 306 else if (pArgs->a_cnp->cn_nameiop == CREATE) PDEBUG("CREATE"); 307 else if (pArgs->a_cnp->cn_nameiop == RENAME) PDEBUG("RENAME"); 308 else if (pArgs->a_cnp->cn_nameiop == DELETE) PDEBUG("DELETE"); 309 else PDEBUG("Unknown cn_nameiop: 0x%X", (int)pArgs->a_cnp->cn_nameiop); 279 310 280 311 lck_rw_lock_exclusive(pVnodeData->pLock); 281 312 282 313 /* Take care about '.' and '..' entries */ 283 if (vboxvfs_vnode_lookup_dot_handler( args, &vnode) == 0)314 if (vboxvfs_vnode_lookup_dot_handler(pArgs, &vnode) == 0) 284 315 { 285 316 vnode_get(vnode); 286 * args->a_vpp = vnode;317 *pArgs->a_vpp = vnode; 287 318 288 319 lck_rw_unlock_exclusive(pVnodeData->pLock); … … 292 323 293 324 /* Look into VFS cache and attempt to find previously allocated vnode there. */ 294 rc = cache_lookup( args->a_dvp, &vnode, args->a_cnp);325 rc = cache_lookup(pArgs->a_dvp, &vnode, pArgs->a_cnp); 295 326 if (rc == -1) /* Record found */ 296 327 { … … 302 333 /* Prepare & return cached vnode */ 303 334 vnode_get(vnode); 304 * args->a_vpp = vnode;335 *pArgs->a_vpp = vnode; 305 336 306 337 rc = 0; … … 318 349 PDEBUG("cache_lookup() returned %d, create new VFS vnode", rc); 319 350 320 rc = vboxvfs_vnode_lookup_instantinate_vnode( args->a_dvp, args->a_cnp->cn_nameptr, &vnode);351 rc = vboxvfs_vnode_lookup_instantinate_vnode(pArgs->a_dvp, pArgs->a_cnp->cn_nameptr, &vnode); 321 352 if (rc == 0) 322 353 { 323 cache_enter( args->a_dvp, vnode, args->a_cnp);324 * args->a_vpp = vnode;354 cache_enter(pArgs->a_dvp, vnode, pArgs->a_cnp); 355 *pArgs->a_vpp = vnode; 325 356 } 326 357 else … … 333 364 334 365 return rc; 335 } 336 337 int vboxvfs_vnode_open(struct vnop_open_args *args) 338 { 366 #endif 367 } 368 369 static int vboxSfDwnVnOpen(struct vnop_open_args *pArgs) 370 { 371 #if 1 372 RT_NOREF(pArgs); 373 return ENOTSUP; 374 #else 339 375 vnode_t vnode; 340 376 vboxvfs_vnode_t *pVnodeData; … … 347 383 PDEBUG("Opening vnode..."); 348 384 349 AssertReturn( args, EINVAL);350 351 vnode = args->a_vp; AssertReturn(vnode, EINVAL);385 AssertReturn(pArgs, EINVAL); 386 387 vnode = pArgs->a_vp; AssertReturn(vnode, EINVAL); 352 388 pVnodeData = (vboxvfs_vnode_t *)vnode_fsnode(vnode); AssertReturn(pVnodeData, EINVAL); 353 389 mp = vnode_mount(vnode); AssertReturn(mp, EINVAL); … … 374 410 //} 375 411 376 fHostFlags = vboxvfs_g2h_mode_inernal( args->a_mode);412 fHostFlags = vboxvfs_g2h_mode_inernal(pArgs->a_mode); 377 413 fHostFlags |= (vnode_isdir(vnode) ? SHFL_CF_DIRECTORY : 0); 378 414 … … 397 433 398 434 return rc; 399 } 400 401 int vboxvfs_vnode_close(struct vnop_close_args *args) 402 { 435 #endif 436 } 437 438 static int vboxSfDwnVnClose(struct vnop_close_args *pArgs) 439 { 440 #if 1 441 RT_NOREF(pArgs); 442 return ENOTSUP; 443 #else 444 403 445 vnode_t vnode; 404 446 mount_t mp; … … 410 452 PDEBUG("Closing vnode..."); 411 453 412 AssertReturn( args, EINVAL);413 414 vnode = args->a_vp; AssertReturn(vnode, EINVAL);454 AssertReturn(pArgs, EINVAL); 455 456 vnode = pArgs->a_vp; AssertReturn(vnode, EINVAL); 415 457 pVnodeData = (vboxvfs_vnode_t *)vnode_fsnode(vnode); AssertReturn(pVnodeData, EINVAL); 416 458 mp = vnode_mount(vnode); AssertReturn(mp, EINVAL); … … 457 499 458 500 return rc; 459 } 460 501 #endif 502 } 503 504 #if 0 461 505 /** 462 506 * Convert SHFLDIRINFO to struct dirent and copy it back to user. … … 501 545 return rc; 502 546 } 503 504 int vboxvfs_vnode_readdir(struct vnop_readdir_args *args) 505 { 547 #endif 548 549 static int vboxSfDwnVnReadDir(struct vnop_readdir_args *pArgs) 550 { 551 #if 1 552 RT_NOREF(pArgs); 553 return ENOTSUP; 554 #else 506 555 vboxvfs_mount_t *pMount; 507 556 vboxvfs_vnode_t *pVnodeData; … … 516 565 PDEBUG("Reading directory..."); 517 566 518 AssertReturn( args, EINVAL);519 AssertReturn( args->a_eofflag, EINVAL);520 AssertReturn( args->a_numdirent, EINVAL);521 522 uio = args->a_uio; AssertReturn(uio, EINVAL);523 vnode = args->a_vp; AssertReturn(vnode, EINVAL); AssertReturn(vnode_isdir(vnode), EINVAL);567 AssertReturn(pArgs, EINVAL); 568 AssertReturn(pArgs->a_eofflag, EINVAL); 569 AssertReturn(pArgs->a_numdirent, EINVAL); 570 571 uio = pArgs->a_uio; AssertReturn(uio, EINVAL); 572 vnode = pArgs->a_vp; AssertReturn(vnode, EINVAL); AssertReturn(vnode_isdir(vnode), EINVAL); 524 573 pVnodeData = (vboxvfs_vnode_t *)vnode_fsnode(vnode); AssertReturn(pVnodeData, EINVAL); 525 574 mp = vnode_mount(vnode); AssertReturn(mp, EINVAL); … … 572 621 uint32_t cbReturned = cbInfo; 573 622 //rc = VbglR0SfDirInfo(&g_vboxSFClient, &pMount->pMap, Handle, pMask, SHFL_LIST_RETURN_ONE, 0, &cbReturned, (PSHFLDIRINFO)Info, &cFiles); 574 rc = VbglR0SfDirInfo(&g_SfClient , &pMount->pMap, Handle, 0, SHFL_LIST_RETURN_ONE, 0,623 rc = VbglR0SfDirInfo(&g_SfClientDarwin, &pMount->pMap, Handle, 0, SHFL_LIST_RETURN_ONE, 0, 575 624 &cbReturned, (PSHFLDIRINFO)Info, &cFiles); 576 625 … … 598 647 case VINF_SUCCESS: 599 648 { 600 rc = vboxvfs_vnode_readdir_copy_data((ino_t)(index + 1), Info, uio, args->a_numdirent);649 rc = vboxvfs_vnode_readdir_copy_data((ino_t)(index + 1), Info, uio, pArgs->a_numdirent); 601 650 break; 602 651 } … … 605 654 { 606 655 PDEBUG("No more entries in directory"); 607 *( args->a_eofflag) = 1;656 *(pArgs->a_eofflag) = 1; 608 657 break; 609 658 } … … 621 670 622 671 return rc; 623 } 624 625 626 int vboxvfs_vnode_access(struct vnop_access_args *args) 672 #endif 673 } 674 675 676 static int vboxSfDwnVnPathConf(struct vnop_pathconf_args *pArgs) 627 677 { 628 678 PDEBUG("here"); … … 631 681 632 682 633 int vboxvfs_vnode_readdirattr(struct vnop_readdirattr_args *args)634 {635 PDEBUG("here");636 return 0;637 }638 639 int vboxvfs_vnode_pathconf(struct vnop_pathconf_args *args)640 {641 PDEBUG("here");642 return 0;643 }644 645 683 /** 684 * vnop_reclaim implementation. 685 * 646 686 * VBoxVFS reclaim callback. 647 687 * Called when vnode is going to be deallocated. Should release … … 652 692 * @return 0 on success, BSD error code otherwise. 653 693 */ 654 int vboxvfs_vnode_reclaim(struct vnop_reclaim_args *pArgs) 655 { 656 PDEBUG("Releasing vnode resources..."); 657 658 AssertReturn(pArgs, EINVAL); 659 660 vnode_t pVnode; 661 vboxvfs_vnode_t *pVnodeData; 662 vboxvfs_mount_t *pMount; 663 mount_t mp; 664 665 pVnode = pArgs->a_vp; 666 AssertReturn(pVnode, EINVAL); 667 668 mp = vnode_mount(pVnode); 669 AssertReturn(mp, EINVAL); 670 671 pMount = (vboxvfs_mount_t *)vfs_fsprivate(mp); 672 AssertReturn(pMount, EINVAL); 673 674 pVnodeData = (vboxvfs_vnode_t *)vnode_fsnode(pVnode); 675 AssertReturn(pVnodeData, EINVAL); 676 AssertReturn(pVnodeData->pPath, EINVAL); 677 AssertReturn(pVnodeData->pLockAttr, EINVAL); 678 AssertReturn(pVnodeData->pLock, EINVAL); 679 680 RTMemFree(pVnodeData->pPath); 681 pVnodeData->pPath = NULL; 682 683 lck_rw_free(pVnodeData->pLock, pMount->pLockGroup); 684 pVnodeData->pLock = NULL; 685 686 lck_attr_free(pVnodeData->pLockAttr); 687 pVnodeData->pLockAttr = NULL; 688 694 static int vboxSfDwnVnReclaim(struct vnop_reclaim_args *pArgs) 695 { 696 AssertReturn(pArgs && pArgs->a_vp, EINVAL); 697 698 /* Check that it's not a root node that's in use. */ 699 PVBOXSFMNT pMntData = (PVBOXSFMNT)vfs_fsprivate(vnode_mount(pArgs->a_vp)); 700 AssertReturn(!pMntData || pMntData->pVnRoot != pArgs->a_vp, EBUSY); 701 702 /* Get the private data and free it. */ 703 PVBOXSFDWNVNDATA pVnData = (PVBOXSFDWNVNDATA)vnode_fsnode(pArgs->a_vp); 704 AssertPtrReturn(pVnData, 0); 705 706 if (pVnData->hHandle != SHFL_HANDLE_NIL) 707 { 708 /** @todo can this happen? */ 709 pVnData->hHandle = SHFL_HANDLE_NIL; 710 } 711 712 RTMemFree(pVnData); 689 713 return 0; 714 } 715 716 717 /** 718 * Allocates a vnode. 719 * 720 * @returns Pointer to the new VNode, NULL if out of memory. 721 * @param pMount The file system mount structure. 722 * @param enmType The vnode type. 723 * @param pParent The parent vnode, NULL if root. 724 * @param cbFile The file size 725 */ 726 vnode_t vboxSfDwnVnAlloc(mount_t pMount, enum vtype enmType, vnode_t pParent, uint64_t cbFile) 727 { 728 /* 729 * Create our private data. 730 */ 731 PVBOXSFDWNVNDATA pVnData = (PVBOXSFDWNVNDATA)RTMemAllocZ(sizeof(*pVnData)); 732 if (pVnData) 733 { 734 pVnData->hHandle = SHFL_HANDLE_NIL; 735 736 struct vnode_fsparam VnParms; 737 RT_ZERO(VnParms); 738 VnParms.vnfs_mp = pMount; 739 VnParms.vnfs_vtype = enmType; 740 VnParms.vnfs_str = "vboxsf"; 741 VnParms.vnfs_dvp = pParent; 742 VnParms.vnfs_fsnode = pVnData; 743 VnParms.vnfs_vops = g_papfnVBoxVFSVnodeDirOpsVector; 744 VnParms.vnfs_markroot = pParent == NULL; 745 VnParms.vnfs_marksystem = 0; 746 VnParms.vnfs_rdev = 0; 747 VnParms.vnfs_filesize = cbFile; 748 VnParms.vnfs_cnp = 0; 749 VnParms.vnfs_flags = VNFS_NOCACHE; 750 751 vnode_t pVnRet; 752 int rc = vnode_create(VNCREATE_FLAVOR, VCREATESIZE, &VnParms, &pVnRet); 753 if (rc == 0) 754 return pVnRet; 755 RTMemFree(pVnData); 756 } 757 printf("vboxSfDwnVnAlloc: out of memory!\n"); 758 return NULL; 690 759 } 691 760 … … 697 766 { 698 767 #define VNODEOPFUNC int(*)(void *) 699 { &vnop_default_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 700 { &vnop_lookup_desc, (VNODEOPFUNC)vboxvfs_vnode_lookup }, 701 { &vnop_create_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 702 { &vnop_whiteout_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 703 { &vnop_mknod_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 704 { &vnop_open_desc, (VNODEOPFUNC)vboxvfs_vnode_open }, 705 { &vnop_close_desc, (VNODEOPFUNC)vboxvfs_vnode_close }, 706 { &vnop_access_desc, (VNODEOPFUNC)vboxvfs_vnode_access }, 707 { &vnop_getattr_desc, (VNODEOPFUNC)vboxvfs_vnode_getattr }, 708 { &vnop_setattr_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 709 { &vnop_read_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 710 { &vnop_write_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 711 { &vnop_ioctl_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 712 { &vnop_select_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 713 { &vnop_exchange_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 714 { &vnop_revoke_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 715 { &vnop_mmap_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 716 { &vnop_mnomap_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 717 { &vnop_fsync_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 718 { &vnop_remove_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 719 { &vnop_link_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 720 { &vnop_rename_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 721 { &vnop_mkdir_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 722 { &vnop_rmdir_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 723 { &vnop_symlink_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 724 { &vnop_readdir_desc, (VNODEOPFUNC)vboxvfs_vnode_readdir }, 725 { &vnop_readdirattr_desc, (VNODEOPFUNC)vboxvfs_vnode_readdirattr }, 726 { &vnop_readlink_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 727 { &vnop_inactive_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 728 { &vnop_reclaim_desc, (VNODEOPFUNC)vboxvfs_vnode_reclaim }, 729 /* { &vnop_print_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, undefined in ML */ 730 { &vnop_pathconf_desc, (VNODEOPFUNC)vboxvfs_vnode_pathconf }, 731 { &vnop_advlock_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 732 /* { &vnop_truncate_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, undefined in ML */ 733 { &vnop_allocate_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 734 { &vnop_pagein_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 735 { &vnop_pageout_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 736 { &vnop_searchfs_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 737 { &vnop_copyfile_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 738 { &vnop_blktooff_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 739 { &vnop_offtoblk_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 740 { &vnop_blockmap_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 741 { &vnop_strategy_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 742 { &vnop_bwrite_desc, (VNODEOPFUNC)vboxvfs_dfl_error }, 768 { &vnop_default_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 769 //{ &vnop_access_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, - probably not needed. 770 //{ &vnop_advlock_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, - later. 771 //{ &vnop_allocate_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, - maybe, need shfl function 772 { &vnop_blktooff_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 773 //{ &vnop_blockmap_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 774 //{ &vnop_bwrite_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 775 { &vnop_close_desc, (VNODEOPFUNC)vboxSfDwnVnClose }, 776 //{ &vnop_copyfile_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 777 { &vnop_create_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 778 //{ &vnop_exchange_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 779 { &vnop_fsync_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 780 { &vnop_getattr_desc, (VNODEOPFUNC)vboxFsDwnVnGetAttr }, 781 //{ &vnop_getnamedstream_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 782 //{ &vnop_getxattr_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 783 { &vnop_inactive_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 784 { &vnop_ioctl_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 785 { &vnop_link_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 786 //{ &vnop_listxattr_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 787 { &vnop_lookup_desc, (VNODEOPFUNC)vboxSfDwnVnLookup }, 788 { &vnop_mkdir_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 789 { &vnop_mknod_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 790 { &vnop_mmap_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 791 { &vnop_mnomap_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 792 { &vnop_offtoblk_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 793 { &vnop_open_desc, (VNODEOPFUNC)vboxSfDwnVnOpen }, 794 { &vnop_pagein_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 795 { &vnop_pageout_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 796 { &vnop_pathconf_desc, (VNODEOPFUNC)vboxSfDwnVnPathConf }, 797 /* { &vnop_print_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, undefined in ML */ 798 { &vnop_read_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 799 { &vnop_readdir_desc, (VNODEOPFUNC)vboxSfDwnVnReadDir }, 800 //{ &vnop_readdirattr_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, - hfs specific. 801 { &vnop_readlink_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 802 { &vnop_reclaim_desc, (VNODEOPFUNC)vboxSfDwnVnReclaim }, 803 { &vnop_remove_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 804 //{ &vnop_removexattr_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 805 { &vnop_rename_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 806 //{ &vnop_revoke_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, - not needed 807 { &vnop_rmdir_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 808 { &vnop_searchfs_desc, (VNODEOPFUNC)err_searchfs }, 809 //{ &vnop_select_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, - not needed 810 { &vnop_setattr_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 811 { &vnop_setxattr_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 812 //{ &vnop_strategy_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, - not needed 813 { &vnop_symlink_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 814 /* { &vnop_truncate_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, undefined in ML */ 815 //{ &vnop_whiteout_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, - not needed/supported 816 { &vnop_write_desc, (VNODEOPFUNC)vboxSfDwnVnDefaultError }, 743 817 { NULL, (VNODEOPFUNC)NULL }, 744 818 #undef VNODEOPFUNC
Note:
See TracChangeset
for help on using the changeset viewer.