diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_iops.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_iops.c | 99 |
1 files changed, 44 insertions, 55 deletions
diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 0da1d6b081e7..0857658882e0 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c | |||
@@ -61,7 +61,7 @@ | |||
61 | */ | 61 | */ |
62 | xfs_inode_t * | 62 | xfs_inode_t * |
63 | xfs_vtoi( | 63 | xfs_vtoi( |
64 | struct vnode *vp) | 64 | bhv_vnode_t *vp) |
65 | { | 65 | { |
66 | bhv_desc_t *bdp; | 66 | bhv_desc_t *bdp; |
67 | 67 | ||
@@ -80,7 +80,7 @@ void | |||
80 | xfs_synchronize_atime( | 80 | xfs_synchronize_atime( |
81 | xfs_inode_t *ip) | 81 | xfs_inode_t *ip) |
82 | { | 82 | { |
83 | vnode_t *vp; | 83 | bhv_vnode_t *vp; |
84 | 84 | ||
85 | vp = XFS_ITOV_NULL(ip); | 85 | vp = XFS_ITOV_NULL(ip); |
86 | if (vp) { | 86 | if (vp) { |
@@ -202,12 +202,8 @@ xfs_validate_fields( | |||
202 | struct inode *ip, | 202 | struct inode *ip, |
203 | struct vattr *vattr) | 203 | struct vattr *vattr) |
204 | { | 204 | { |
205 | vnode_t *vp = vn_from_inode(ip); | ||
206 | int error; | ||
207 | |||
208 | vattr->va_mask = XFS_AT_NLINK|XFS_AT_SIZE|XFS_AT_NBLOCKS; | 205 | vattr->va_mask = XFS_AT_NLINK|XFS_AT_SIZE|XFS_AT_NBLOCKS; |
209 | VOP_GETATTR(vp, vattr, ATTR_LAZY, NULL, error); | 206 | if (!bhv_vop_getattr(vn_from_inode(ip), vattr, ATTR_LAZY, NULL)) { |
210 | if (likely(!error)) { | ||
211 | ip->i_nlink = vattr->va_nlink; | 207 | ip->i_nlink = vattr->va_nlink; |
212 | ip->i_blocks = vattr->va_nblocks; | 208 | ip->i_blocks = vattr->va_nblocks; |
213 | 209 | ||
@@ -225,7 +221,7 @@ xfs_validate_fields( | |||
225 | */ | 221 | */ |
226 | STATIC int | 222 | STATIC int |
227 | xfs_init_security( | 223 | xfs_init_security( |
228 | struct vnode *vp, | 224 | bhv_vnode_t *vp, |
229 | struct inode *dir) | 225 | struct inode *dir) |
230 | { | 226 | { |
231 | struct inode *ip = vn_to_inode(vp); | 227 | struct inode *ip = vn_to_inode(vp); |
@@ -241,7 +237,7 @@ xfs_init_security( | |||
241 | return -error; | 237 | return -error; |
242 | } | 238 | } |
243 | 239 | ||
244 | VOP_ATTR_SET(vp, name, value, length, ATTR_SECURE, NULL, error); | 240 | error = bhv_vop_attr_set(vp, name, value, length, ATTR_SECURE, NULL); |
245 | if (!error) | 241 | if (!error) |
246 | VMODIFY(vp); | 242 | VMODIFY(vp); |
247 | 243 | ||
@@ -264,13 +260,12 @@ xfs_has_fs_struct(struct task_struct *task) | |||
264 | 260 | ||
265 | STATIC inline void | 261 | STATIC inline void |
266 | xfs_cleanup_inode( | 262 | xfs_cleanup_inode( |
267 | vnode_t *dvp, | 263 | bhv_vnode_t *dvp, |
268 | vnode_t *vp, | 264 | bhv_vnode_t *vp, |
269 | struct dentry *dentry, | 265 | struct dentry *dentry, |
270 | int mode) | 266 | int mode) |
271 | { | 267 | { |
272 | struct dentry teardown = {}; | 268 | struct dentry teardown = {}; |
273 | int error; | ||
274 | 269 | ||
275 | /* Oh, the horror. | 270 | /* Oh, the horror. |
276 | * If we can't add the ACL or we fail in | 271 | * If we can't add the ACL or we fail in |
@@ -281,9 +276,9 @@ xfs_cleanup_inode( | |||
281 | teardown.d_name = dentry->d_name; | 276 | teardown.d_name = dentry->d_name; |
282 | 277 | ||
283 | if (S_ISDIR(mode)) | 278 | if (S_ISDIR(mode)) |
284 | VOP_RMDIR(dvp, &teardown, NULL, error); | 279 | bhv_vop_rmdir(dvp, &teardown, NULL); |
285 | else | 280 | else |
286 | VOP_REMOVE(dvp, &teardown, NULL, error); | 281 | bhv_vop_remove(dvp, &teardown, NULL); |
287 | VN_RELE(vp); | 282 | VN_RELE(vp); |
288 | } | 283 | } |
289 | 284 | ||
@@ -296,7 +291,7 @@ xfs_vn_mknod( | |||
296 | { | 291 | { |
297 | struct inode *ip; | 292 | struct inode *ip; |
298 | vattr_t vattr = { 0 }; | 293 | vattr_t vattr = { 0 }; |
299 | vnode_t *vp = NULL, *dvp = vn_from_inode(dir); | 294 | bhv_vnode_t *vp = NULL, *dvp = vn_from_inode(dir); |
300 | xfs_acl_t *default_acl = NULL; | 295 | xfs_acl_t *default_acl = NULL; |
301 | attrexists_t test_default_acl = _ACL_DEFAULT_EXISTS; | 296 | attrexists_t test_default_acl = _ACL_DEFAULT_EXISTS; |
302 | int error; | 297 | int error; |
@@ -330,10 +325,10 @@ xfs_vn_mknod( | |||
330 | vattr.va_mask |= XFS_AT_RDEV; | 325 | vattr.va_mask |= XFS_AT_RDEV; |
331 | /*FALLTHROUGH*/ | 326 | /*FALLTHROUGH*/ |
332 | case S_IFREG: | 327 | case S_IFREG: |
333 | VOP_CREATE(dvp, dentry, &vattr, &vp, NULL, error); | 328 | error = bhv_vop_create(dvp, dentry, &vattr, &vp, NULL); |
334 | break; | 329 | break; |
335 | case S_IFDIR: | 330 | case S_IFDIR: |
336 | VOP_MKDIR(dvp, dentry, &vattr, &vp, NULL, error); | 331 | error = bhv_vop_mkdir(dvp, dentry, &vattr, &vp, NULL); |
337 | break; | 332 | break; |
338 | default: | 333 | default: |
339 | error = EINVAL; | 334 | error = EINVAL; |
@@ -396,14 +391,14 @@ xfs_vn_lookup( | |||
396 | struct dentry *dentry, | 391 | struct dentry *dentry, |
397 | struct nameidata *nd) | 392 | struct nameidata *nd) |
398 | { | 393 | { |
399 | struct vnode *vp = vn_from_inode(dir), *cvp; | 394 | bhv_vnode_t *vp = vn_from_inode(dir), *cvp; |
400 | int error; | 395 | int error; |
401 | 396 | ||
402 | if (dentry->d_name.len >= MAXNAMELEN) | 397 | if (dentry->d_name.len >= MAXNAMELEN) |
403 | return ERR_PTR(-ENAMETOOLONG); | 398 | return ERR_PTR(-ENAMETOOLONG); |
404 | 399 | ||
405 | VOP_LOOKUP(vp, dentry, &cvp, 0, NULL, NULL, error); | 400 | error = bhv_vop_lookup(vp, dentry, &cvp, 0, NULL, NULL); |
406 | if (error) { | 401 | if (unlikely(error)) { |
407 | if (unlikely(error != ENOENT)) | 402 | if (unlikely(error != ENOENT)) |
408 | return ERR_PTR(-error); | 403 | return ERR_PTR(-error); |
409 | d_add(dentry, NULL); | 404 | d_add(dentry, NULL); |
@@ -420,8 +415,8 @@ xfs_vn_link( | |||
420 | struct dentry *dentry) | 415 | struct dentry *dentry) |
421 | { | 416 | { |
422 | struct inode *ip; /* inode of guy being linked to */ | 417 | struct inode *ip; /* inode of guy being linked to */ |
423 | vnode_t *tdvp; /* target directory for new name/link */ | 418 | bhv_vnode_t *tdvp; /* target directory for new name/link */ |
424 | vnode_t *vp; /* vp of name being linked */ | 419 | bhv_vnode_t *vp; /* vp of name being linked */ |
425 | vattr_t vattr; | 420 | vattr_t vattr; |
426 | int error; | 421 | int error; |
427 | 422 | ||
@@ -432,7 +427,7 @@ xfs_vn_link( | |||
432 | tdvp = vn_from_inode(dir); | 427 | tdvp = vn_from_inode(dir); |
433 | vp = vn_from_inode(ip); | 428 | vp = vn_from_inode(ip); |
434 | 429 | ||
435 | VOP_LINK(tdvp, vp, dentry, NULL, error); | 430 | error = bhv_vop_link(tdvp, vp, dentry, NULL); |
436 | if (likely(!error)) { | 431 | if (likely(!error)) { |
437 | VMODIFY(tdvp); | 432 | VMODIFY(tdvp); |
438 | VN_HOLD(vp); | 433 | VN_HOLD(vp); |
@@ -448,14 +443,14 @@ xfs_vn_unlink( | |||
448 | struct dentry *dentry) | 443 | struct dentry *dentry) |
449 | { | 444 | { |
450 | struct inode *inode; | 445 | struct inode *inode; |
451 | vnode_t *dvp; /* directory containing name to remove */ | 446 | bhv_vnode_t *dvp; /* directory containing name to remove */ |
452 | vattr_t vattr; | 447 | vattr_t vattr; |
453 | int error; | 448 | int error; |
454 | 449 | ||
455 | inode = dentry->d_inode; | 450 | inode = dentry->d_inode; |
456 | dvp = vn_from_inode(dir); | 451 | dvp = vn_from_inode(dir); |
457 | 452 | ||
458 | VOP_REMOVE(dvp, dentry, NULL, error); | 453 | error = bhv_vop_remove(dvp, dentry, NULL); |
459 | if (likely(!error)) { | 454 | if (likely(!error)) { |
460 | xfs_validate_fields(dir, &vattr); /* size needs update */ | 455 | xfs_validate_fields(dir, &vattr); /* size needs update */ |
461 | xfs_validate_fields(inode, &vattr); | 456 | xfs_validate_fields(inode, &vattr); |
@@ -470,27 +465,26 @@ xfs_vn_symlink( | |||
470 | const char *symname) | 465 | const char *symname) |
471 | { | 466 | { |
472 | struct inode *ip; | 467 | struct inode *ip; |
473 | vattr_t vattr = { 0 }; | 468 | vattr_t va = { 0 }; |
474 | vnode_t *dvp; /* directory containing name of symlink */ | 469 | bhv_vnode_t *dvp; /* directory containing name of symlink */ |
475 | vnode_t *cvp; /* used to lookup symlink to put in dentry */ | 470 | bhv_vnode_t *cvp; /* used to lookup symlink to put in dentry */ |
476 | int error; | 471 | int error; |
477 | 472 | ||
478 | dvp = vn_from_inode(dir); | 473 | dvp = vn_from_inode(dir); |
479 | cvp = NULL; | 474 | cvp = NULL; |
480 | 475 | ||
481 | vattr.va_mode = S_IFLNK | | 476 | va.va_mode = S_IFLNK | |
482 | (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); | 477 | (irix_symlink_mode ? 0777 & ~current->fs->umask : S_IRWXUGO); |
483 | vattr.va_mask = XFS_AT_TYPE|XFS_AT_MODE; | 478 | va.va_mask = XFS_AT_TYPE|XFS_AT_MODE; |
484 | 479 | ||
485 | error = 0; | 480 | error = bhv_vop_symlink(dvp, dentry, &va, (char *)symname, &cvp, NULL); |
486 | VOP_SYMLINK(dvp, dentry, &vattr, (char *)symname, &cvp, NULL, error); | ||
487 | if (likely(!error && cvp)) { | 481 | if (likely(!error && cvp)) { |
488 | error = xfs_init_security(cvp, dir); | 482 | error = xfs_init_security(cvp, dir); |
489 | if (likely(!error)) { | 483 | if (likely(!error)) { |
490 | ip = vn_to_inode(cvp); | 484 | ip = vn_to_inode(cvp); |
491 | d_instantiate(dentry, ip); | 485 | d_instantiate(dentry, ip); |
492 | xfs_validate_fields(dir, &vattr); | 486 | xfs_validate_fields(dir, &va); |
493 | xfs_validate_fields(ip, &vattr); | 487 | xfs_validate_fields(ip, &va); |
494 | } else { | 488 | } else { |
495 | xfs_cleanup_inode(dvp, cvp, dentry, 0); | 489 | xfs_cleanup_inode(dvp, cvp, dentry, 0); |
496 | } | 490 | } |
@@ -504,11 +498,11 @@ xfs_vn_rmdir( | |||
504 | struct dentry *dentry) | 498 | struct dentry *dentry) |
505 | { | 499 | { |
506 | struct inode *inode = dentry->d_inode; | 500 | struct inode *inode = dentry->d_inode; |
507 | vnode_t *dvp = vn_from_inode(dir); | 501 | bhv_vnode_t *dvp = vn_from_inode(dir); |
508 | vattr_t vattr; | 502 | vattr_t vattr; |
509 | int error; | 503 | int error; |
510 | 504 | ||
511 | VOP_RMDIR(dvp, dentry, NULL, error); | 505 | error = bhv_vop_rmdir(dvp, dentry, NULL); |
512 | if (likely(!error)) { | 506 | if (likely(!error)) { |
513 | xfs_validate_fields(inode, &vattr); | 507 | xfs_validate_fields(inode, &vattr); |
514 | xfs_validate_fields(dir, &vattr); | 508 | xfs_validate_fields(dir, &vattr); |
@@ -524,15 +518,15 @@ xfs_vn_rename( | |||
524 | struct dentry *ndentry) | 518 | struct dentry *ndentry) |
525 | { | 519 | { |
526 | struct inode *new_inode = ndentry->d_inode; | 520 | struct inode *new_inode = ndentry->d_inode; |
527 | vnode_t *fvp; /* from directory */ | 521 | bhv_vnode_t *fvp; /* from directory */ |
528 | vnode_t *tvp; /* target directory */ | 522 | bhv_vnode_t *tvp; /* target directory */ |
529 | vattr_t vattr; | 523 | vattr_t vattr; |
530 | int error; | 524 | int error; |
531 | 525 | ||
532 | fvp = vn_from_inode(odir); | 526 | fvp = vn_from_inode(odir); |
533 | tvp = vn_from_inode(ndir); | 527 | tvp = vn_from_inode(ndir); |
534 | 528 | ||
535 | VOP_RENAME(fvp, odentry, tvp, ndentry, NULL, error); | 529 | error = bhv_vop_rename(fvp, odentry, tvp, ndentry, NULL); |
536 | if (likely(!error)) { | 530 | if (likely(!error)) { |
537 | if (new_inode) | 531 | if (new_inode) |
538 | xfs_validate_fields(new_inode, &vattr); | 532 | xfs_validate_fields(new_inode, &vattr); |
@@ -553,7 +547,7 @@ xfs_vn_follow_link( | |||
553 | struct dentry *dentry, | 547 | struct dentry *dentry, |
554 | struct nameidata *nd) | 548 | struct nameidata *nd) |
555 | { | 549 | { |
556 | vnode_t *vp; | 550 | bhv_vnode_t *vp; |
557 | uio_t *uio; | 551 | uio_t *uio; |
558 | iovec_t iov; | 552 | iovec_t iov; |
559 | int error; | 553 | int error; |
@@ -586,8 +580,8 @@ xfs_vn_follow_link( | |||
586 | uio->uio_resid = MAXPATHLEN; | 580 | uio->uio_resid = MAXPATHLEN; |
587 | uio->uio_iovcnt = 1; | 581 | uio->uio_iovcnt = 1; |
588 | 582 | ||
589 | VOP_READLINK(vp, uio, 0, NULL, error); | 583 | error = bhv_vop_readlink(vp, uio, 0, NULL); |
590 | if (error) { | 584 | if (unlikely(error)) { |
591 | kfree(link); | 585 | kfree(link); |
592 | link = ERR_PTR(-error); | 586 | link = ERR_PTR(-error); |
593 | } else { | 587 | } else { |
@@ -618,12 +612,7 @@ xfs_vn_permission( | |||
618 | int mode, | 612 | int mode, |
619 | struct nameidata *nd) | 613 | struct nameidata *nd) |
620 | { | 614 | { |
621 | vnode_t *vp = vn_from_inode(inode); | 615 | return -bhv_vop_access(vn_from_inode(inode), mode << 6, NULL); |
622 | int error; | ||
623 | |||
624 | mode <<= 6; /* convert from linux to vnode access bits */ | ||
625 | VOP_ACCESS(vp, mode, NULL, error); | ||
626 | return -error; | ||
627 | } | 616 | } |
628 | #else | 617 | #else |
629 | #define xfs_vn_permission NULL | 618 | #define xfs_vn_permission NULL |
@@ -636,7 +625,7 @@ xfs_vn_getattr( | |||
636 | struct kstat *stat) | 625 | struct kstat *stat) |
637 | { | 626 | { |
638 | struct inode *inode = dentry->d_inode; | 627 | struct inode *inode = dentry->d_inode; |
639 | vnode_t *vp = vn_from_inode(inode); | 628 | bhv_vnode_t *vp = vn_from_inode(inode); |
640 | int error = 0; | 629 | int error = 0; |
641 | 630 | ||
642 | if (unlikely(vp->v_flag & VMODIFIED)) | 631 | if (unlikely(vp->v_flag & VMODIFIED)) |
@@ -653,7 +642,7 @@ xfs_vn_setattr( | |||
653 | { | 642 | { |
654 | struct inode *inode = dentry->d_inode; | 643 | struct inode *inode = dentry->d_inode; |
655 | unsigned int ia_valid = attr->ia_valid; | 644 | unsigned int ia_valid = attr->ia_valid; |
656 | vnode_t *vp = vn_from_inode(inode); | 645 | bhv_vnode_t *vp = vn_from_inode(inode); |
657 | vattr_t vattr = { 0 }; | 646 | vattr_t vattr = { 0 }; |
658 | int flags = 0; | 647 | int flags = 0; |
659 | int error; | 648 | int error; |
@@ -697,7 +686,7 @@ xfs_vn_setattr( | |||
697 | flags |= ATTR_NONBLOCK; | 686 | flags |= ATTR_NONBLOCK; |
698 | #endif | 687 | #endif |
699 | 688 | ||
700 | VOP_SETATTR(vp, &vattr, flags, NULL, error); | 689 | error = bhv_vop_setattr(vp, &vattr, flags, NULL); |
701 | if (likely(!error)) | 690 | if (likely(!error)) |
702 | __vn_revalidate(vp, &vattr); | 691 | __vn_revalidate(vp, &vattr); |
703 | return -error; | 692 | return -error; |
@@ -718,7 +707,7 @@ xfs_vn_setxattr( | |||
718 | size_t size, | 707 | size_t size, |
719 | int flags) | 708 | int flags) |
720 | { | 709 | { |
721 | vnode_t *vp = vn_from_inode(dentry->d_inode); | 710 | bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); |
722 | char *attr = (char *)name; | 711 | char *attr = (char *)name; |
723 | attrnames_t *namesp; | 712 | attrnames_t *namesp; |
724 | int xflags = 0; | 713 | int xflags = 0; |
@@ -748,7 +737,7 @@ xfs_vn_getxattr( | |||
748 | void *data, | 737 | void *data, |
749 | size_t size) | 738 | size_t size) |
750 | { | 739 | { |
751 | vnode_t *vp = vn_from_inode(dentry->d_inode); | 740 | bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); |
752 | char *attr = (char *)name; | 741 | char *attr = (char *)name; |
753 | attrnames_t *namesp; | 742 | attrnames_t *namesp; |
754 | int xflags = 0; | 743 | int xflags = 0; |
@@ -777,7 +766,7 @@ xfs_vn_listxattr( | |||
777 | char *data, | 766 | char *data, |
778 | size_t size) | 767 | size_t size) |
779 | { | 768 | { |
780 | vnode_t *vp = vn_from_inode(dentry->d_inode); | 769 | bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); |
781 | int error, xflags = ATTR_KERNAMELS; | 770 | int error, xflags = ATTR_KERNAMELS; |
782 | ssize_t result; | 771 | ssize_t result; |
783 | 772 | ||
@@ -796,7 +785,7 @@ xfs_vn_removexattr( | |||
796 | struct dentry *dentry, | 785 | struct dentry *dentry, |
797 | const char *name) | 786 | const char *name) |
798 | { | 787 | { |
799 | vnode_t *vp = vn_from_inode(dentry->d_inode); | 788 | bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); |
800 | char *attr = (char *)name; | 789 | char *attr = (char *)name; |
801 | attrnames_t *namesp; | 790 | attrnames_t *namesp; |
802 | int xflags = 0; | 791 | int xflags = 0; |