diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_export.c | 6 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_super.c | 141 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_vfs.c | 28 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_vfs.h | 126 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_vnode.c | 2 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_vnode.h | 4 | ||||
| -rw-r--r-- | fs/xfs/quota/xfs_qm_bhv.c | 23 | ||||
| -rw-r--r-- | fs/xfs/quota/xfs_qm_syscalls.c | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_dmapi.h | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_fsops.c | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_iget.c | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_inode.c | 4 | ||||
| -rw-r--r-- | fs/xfs/xfs_inode.h | 1 | ||||
| -rw-r--r-- | fs/xfs/xfs_iocore.c | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_log.c | 7 | ||||
| -rw-r--r-- | fs/xfs/xfs_mount.c | 8 | ||||
| -rw-r--r-- | fs/xfs/xfs_mount.h | 22 | ||||
| -rw-r--r-- | fs/xfs/xfs_quota.h | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_vfsops.c | 23 |
19 files changed, 183 insertions, 224 deletions
diff --git a/fs/xfs/linux-2.6/xfs_export.c b/fs/xfs/linux-2.6/xfs_export.c index b768ea910bbe..b5c579eeb8ef 100644 --- a/fs/xfs/linux-2.6/xfs_export.c +++ b/fs/xfs/linux-2.6/xfs_export.c | |||
| @@ -97,7 +97,7 @@ xfs_fs_encode_fh( | |||
| 97 | int len; | 97 | int len; |
| 98 | int is64 = 0; | 98 | int is64 = 0; |
| 99 | #if XFS_BIG_INUMS | 99 | #if XFS_BIG_INUMS |
| 100 | vfs_t *vfs = vfs_from_sb(inode->i_sb); | 100 | bhv_vfs_t *vfs = vfs_from_sb(inode->i_sb); |
| 101 | 101 | ||
| 102 | if (!(vfs->vfs_flag & VFS_32BITINODES)) { | 102 | if (!(vfs->vfs_flag & VFS_32BITINODES)) { |
| 103 | /* filesystem may contain 64bit inode numbers */ | 103 | /* filesystem may contain 64bit inode numbers */ |
| @@ -139,10 +139,10 @@ xfs_fs_get_dentry( | |||
| 139 | vnode_t *vp; | 139 | vnode_t *vp; |
| 140 | struct inode *inode; | 140 | struct inode *inode; |
| 141 | struct dentry *result; | 141 | struct dentry *result; |
| 142 | vfs_t *vfsp = vfs_from_sb(sb); | 142 | bhv_vfs_t *vfsp = vfs_from_sb(sb); |
| 143 | int error; | 143 | int error; |
| 144 | 144 | ||
| 145 | VFS_VGET(vfsp, &vp, (fid_t *)data, error); | 145 | error = bhv_vfs_vget(vfsp, &vp, (fid_t *)data); |
| 146 | if (error || vp == NULL) | 146 | if (error || vp == NULL) |
| 147 | return ERR_PTR(-ESTALE) ; | 147 | return ERR_PTR(-ESTALE) ; |
| 148 | 148 | ||
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index 68f4793e8a11..97dbcb68b25f 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c | |||
| @@ -475,13 +475,13 @@ xfs_fs_clear_inode( | |||
| 475 | */ | 475 | */ |
| 476 | STATIC void | 476 | STATIC void |
| 477 | xfs_syncd_queue_work( | 477 | xfs_syncd_queue_work( |
| 478 | struct vfs *vfs, | 478 | struct bhv_vfs *vfs, |
| 479 | void *data, | 479 | void *data, |
| 480 | void (*syncer)(vfs_t *, void *)) | 480 | void (*syncer)(bhv_vfs_t *, void *)) |
| 481 | { | 481 | { |
| 482 | vfs_sync_work_t *work; | 482 | struct bhv_vfs_sync_work *work; |
| 483 | 483 | ||
| 484 | work = kmem_alloc(sizeof(struct vfs_sync_work), KM_SLEEP); | 484 | work = kmem_alloc(sizeof(struct bhv_vfs_sync_work), KM_SLEEP); |
| 485 | INIT_LIST_HEAD(&work->w_list); | 485 | INIT_LIST_HEAD(&work->w_list); |
| 486 | work->w_syncer = syncer; | 486 | work->w_syncer = syncer; |
| 487 | work->w_data = data; | 487 | work->w_data = data; |
| @@ -500,7 +500,7 @@ xfs_syncd_queue_work( | |||
| 500 | */ | 500 | */ |
| 501 | STATIC void | 501 | STATIC void |
| 502 | xfs_flush_inode_work( | 502 | xfs_flush_inode_work( |
| 503 | vfs_t *vfs, | 503 | bhv_vfs_t *vfs, |
| 504 | void *inode) | 504 | void *inode) |
| 505 | { | 505 | { |
| 506 | filemap_flush(((struct inode *)inode)->i_mapping); | 506 | filemap_flush(((struct inode *)inode)->i_mapping); |
| @@ -512,7 +512,7 @@ xfs_flush_inode( | |||
| 512 | xfs_inode_t *ip) | 512 | xfs_inode_t *ip) |
| 513 | { | 513 | { |
| 514 | struct inode *inode = vn_to_inode(XFS_ITOV(ip)); | 514 | struct inode *inode = vn_to_inode(XFS_ITOV(ip)); |
| 515 | struct vfs *vfs = XFS_MTOVFS(ip->i_mount); | 515 | struct bhv_vfs *vfs = XFS_MTOVFS(ip->i_mount); |
| 516 | 516 | ||
| 517 | igrab(inode); | 517 | igrab(inode); |
| 518 | xfs_syncd_queue_work(vfs, inode, xfs_flush_inode_work); | 518 | xfs_syncd_queue_work(vfs, inode, xfs_flush_inode_work); |
| @@ -525,7 +525,7 @@ xfs_flush_inode( | |||
| 525 | */ | 525 | */ |
| 526 | STATIC void | 526 | STATIC void |
| 527 | xfs_flush_device_work( | 527 | xfs_flush_device_work( |
| 528 | vfs_t *vfs, | 528 | bhv_vfs_t *vfs, |
| 529 | void *inode) | 529 | void *inode) |
| 530 | { | 530 | { |
| 531 | sync_blockdev(vfs->vfs_super->s_bdev); | 531 | sync_blockdev(vfs->vfs_super->s_bdev); |
| @@ -537,7 +537,7 @@ xfs_flush_device( | |||
| 537 | xfs_inode_t *ip) | 537 | xfs_inode_t *ip) |
| 538 | { | 538 | { |
| 539 | struct inode *inode = vn_to_inode(XFS_ITOV(ip)); | 539 | struct inode *inode = vn_to_inode(XFS_ITOV(ip)); |
| 540 | struct vfs *vfs = XFS_MTOVFS(ip->i_mount); | 540 | struct bhv_vfs *vfs = XFS_MTOVFS(ip->i_mount); |
| 541 | 541 | ||
| 542 | igrab(inode); | 542 | igrab(inode); |
| 543 | xfs_syncd_queue_work(vfs, inode, xfs_flush_device_work); | 543 | xfs_syncd_queue_work(vfs, inode, xfs_flush_device_work); |
| @@ -545,16 +545,16 @@ xfs_flush_device( | |||
| 545 | xfs_log_force(ip->i_mount, (xfs_lsn_t)0, XFS_LOG_FORCE|XFS_LOG_SYNC); | 545 | xfs_log_force(ip->i_mount, (xfs_lsn_t)0, XFS_LOG_FORCE|XFS_LOG_SYNC); |
| 546 | } | 546 | } |
| 547 | 547 | ||
| 548 | #define SYNCD_FLAGS (SYNC_FSDATA|SYNC_BDFLUSH|SYNC_ATTR|SYNC_REFCACHE) | ||
| 549 | STATIC void | 548 | STATIC void |
| 550 | vfs_sync_worker( | 549 | vfs_sync_worker( |
| 551 | vfs_t *vfsp, | 550 | bhv_vfs_t *vfsp, |
| 552 | void *unused) | 551 | void *unused) |
| 553 | { | 552 | { |
| 554 | int error; | 553 | int error; |
| 555 | 554 | ||
| 556 | if (!(vfsp->vfs_flag & VFS_RDONLY)) | 555 | if (!(vfsp->vfs_flag & VFS_RDONLY)) |
| 557 | VFS_SYNC(vfsp, SYNCD_FLAGS, NULL, error); | 556 | error = bhv_vfs_sync(vfsp, SYNC_FSDATA | SYNC_BDFLUSH | \ |
| 557 | SYNC_ATTR | SYNC_REFCACHE, NULL); | ||
| 558 | vfsp->vfs_sync_seq++; | 558 | vfsp->vfs_sync_seq++; |
| 559 | wmb(); | 559 | wmb(); |
| 560 | wake_up(&vfsp->vfs_wait_single_sync_task); | 560 | wake_up(&vfsp->vfs_wait_single_sync_task); |
| @@ -565,8 +565,8 @@ xfssyncd( | |||
| 565 | void *arg) | 565 | void *arg) |
| 566 | { | 566 | { |
| 567 | long timeleft; | 567 | long timeleft; |
| 568 | vfs_t *vfsp = (vfs_t *) arg; | 568 | bhv_vfs_t *vfsp = (bhv_vfs_t *) arg; |
| 569 | struct vfs_sync_work *work, *n; | 569 | bhv_vfs_sync_work_t *work, *n; |
| 570 | LIST_HEAD (tmp); | 570 | LIST_HEAD (tmp); |
| 571 | 571 | ||
| 572 | timeleft = xfs_syncd_centisecs * msecs_to_jiffies(10); | 572 | timeleft = xfs_syncd_centisecs * msecs_to_jiffies(10); |
| @@ -600,7 +600,7 @@ xfssyncd( | |||
| 600 | list_del(&work->w_list); | 600 | list_del(&work->w_list); |
| 601 | if (work == &vfsp->vfs_sync_work) | 601 | if (work == &vfsp->vfs_sync_work) |
| 602 | continue; | 602 | continue; |
| 603 | kmem_free(work, sizeof(struct vfs_sync_work)); | 603 | kmem_free(work, sizeof(struct bhv_vfs_sync_work)); |
| 604 | } | 604 | } |
| 605 | } | 605 | } |
| 606 | 606 | ||
| @@ -609,7 +609,7 @@ xfssyncd( | |||
| 609 | 609 | ||
| 610 | STATIC int | 610 | STATIC int |
| 611 | xfs_fs_start_syncd( | 611 | xfs_fs_start_syncd( |
| 612 | vfs_t *vfsp) | 612 | bhv_vfs_t *vfsp) |
| 613 | { | 613 | { |
| 614 | vfsp->vfs_sync_work.w_syncer = vfs_sync_worker; | 614 | vfsp->vfs_sync_work.w_syncer = vfs_sync_worker; |
| 615 | vfsp->vfs_sync_work.w_vfs = vfsp; | 615 | vfsp->vfs_sync_work.w_vfs = vfsp; |
| @@ -621,7 +621,7 @@ xfs_fs_start_syncd( | |||
| 621 | 621 | ||
| 622 | STATIC void | 622 | STATIC void |
| 623 | xfs_fs_stop_syncd( | 623 | xfs_fs_stop_syncd( |
| 624 | vfs_t *vfsp) | 624 | bhv_vfs_t *vfsp) |
| 625 | { | 625 | { |
| 626 | kthread_stop(vfsp->vfs_sync_task); | 626 | kthread_stop(vfsp->vfs_sync_task); |
| 627 | } | 627 | } |
| @@ -630,35 +630,26 @@ STATIC void | |||
| 630 | xfs_fs_put_super( | 630 | xfs_fs_put_super( |
| 631 | struct super_block *sb) | 631 | struct super_block *sb) |
| 632 | { | 632 | { |
| 633 | vfs_t *vfsp = vfs_from_sb(sb); | 633 | bhv_vfs_t *vfsp = vfs_from_sb(sb); |
| 634 | int error; | 634 | int error; |
| 635 | 635 | ||
| 636 | xfs_fs_stop_syncd(vfsp); | 636 | xfs_fs_stop_syncd(vfsp); |
| 637 | VFS_SYNC(vfsp, SYNC_ATTR|SYNC_DELWRI, NULL, error); | 637 | bhv_vfs_sync(vfsp, SYNC_ATTR | SYNC_DELWRI, NULL); |
| 638 | if (!error) | 638 | error = bhv_vfs_unmount(vfsp, 0, NULL); |
| 639 | VFS_UNMOUNT(vfsp, 0, NULL, error); | ||
| 640 | if (error) { | 639 | if (error) { |
| 641 | printk("XFS unmount got error %d\n", error); | 640 | printk("XFS: unmount got error=%d\n", error); |
| 642 | printk("%s: vfsp/0x%p left dangling!\n", __FUNCTION__, vfsp); | 641 | printk("%s: vfs=0x%p left dangling!\n", __FUNCTION__, vfsp); |
| 643 | return; | 642 | } else { |
| 643 | vfs_deallocate(vfsp); | ||
| 644 | } | 644 | } |
| 645 | |||
| 646 | vfs_deallocate(vfsp); | ||
| 647 | } | 645 | } |
| 648 | 646 | ||
| 649 | STATIC void | 647 | STATIC void |
| 650 | xfs_fs_write_super( | 648 | xfs_fs_write_super( |
| 651 | struct super_block *sb) | 649 | struct super_block *sb) |
| 652 | { | 650 | { |
| 653 | vfs_t *vfsp = vfs_from_sb(sb); | 651 | if (!(sb->s_flags & MS_RDONLY)) |
| 654 | int error; | 652 | bhv_vfs_sync(vfs_from_sb(sb), SYNC_FSDATA, NULL); |
| 655 | |||
| 656 | if (sb->s_flags & MS_RDONLY) { | ||
| 657 | sb->s_dirt = 0; /* paranoia */ | ||
| 658 | return; | ||
| 659 | } | ||
| 660 | /* Push the log and superblock a little */ | ||
| 661 | VFS_SYNC(vfsp, SYNC_FSDATA, NULL, error); | ||
| 662 | sb->s_dirt = 0; | 653 | sb->s_dirt = 0; |
| 663 | } | 654 | } |
| 664 | 655 | ||
| @@ -667,16 +658,16 @@ xfs_fs_sync_super( | |||
| 667 | struct super_block *sb, | 658 | struct super_block *sb, |
| 668 | int wait) | 659 | int wait) |
| 669 | { | 660 | { |
| 670 | vfs_t *vfsp = vfs_from_sb(sb); | 661 | bhv_vfs_t *vfsp = vfs_from_sb(sb); |
| 671 | int error; | 662 | int error; |
| 672 | int flags = SYNC_FSDATA; | 663 | int flags; |
| 673 | 664 | ||
| 674 | if (unlikely(sb->s_frozen == SB_FREEZE_WRITE)) | 665 | if (unlikely(sb->s_frozen == SB_FREEZE_WRITE)) |
| 675 | flags = SYNC_QUIESCE; | 666 | flags = SYNC_QUIESCE; |
| 676 | else | 667 | else |
| 677 | flags = SYNC_FSDATA | (wait ? SYNC_WAIT : 0); | 668 | flags = SYNC_FSDATA | (wait ? SYNC_WAIT : 0); |
| 678 | 669 | ||
| 679 | VFS_SYNC(vfsp, flags, NULL, error); | 670 | error = bhv_vfs_sync(vfsp, flags, NULL); |
| 680 | sb->s_dirt = 0; | 671 | sb->s_dirt = 0; |
| 681 | 672 | ||
| 682 | if (unlikely(laptop_mode)) { | 673 | if (unlikely(laptop_mode)) { |
| @@ -706,11 +697,7 @@ xfs_fs_statfs( | |||
| 706 | struct super_block *sb, | 697 | struct super_block *sb, |
| 707 | struct kstatfs *statp) | 698 | struct kstatfs *statp) |
| 708 | { | 699 | { |
| 709 | vfs_t *vfsp = vfs_from_sb(sb); | 700 | return -bhv_vfs_statvfs(vfs_from_sb(sb), statp, NULL); |
| 710 | int error; | ||
| 711 | |||
| 712 | VFS_STATVFS(vfsp, statp, NULL, error); | ||
| 713 | return -error; | ||
| 714 | } | 701 | } |
| 715 | 702 | ||
| 716 | STATIC int | 703 | STATIC int |
| @@ -719,13 +706,13 @@ xfs_fs_remount( | |||
| 719 | int *flags, | 706 | int *flags, |
| 720 | char *options) | 707 | char *options) |
| 721 | { | 708 | { |
| 722 | vfs_t *vfsp = vfs_from_sb(sb); | 709 | bhv_vfs_t *vfsp = vfs_from_sb(sb); |
| 723 | struct xfs_mount_args *args = xfs_args_allocate(sb, 0); | 710 | struct xfs_mount_args *args = xfs_args_allocate(sb, 0); |
| 724 | int error; | 711 | int error; |
| 725 | 712 | ||
| 726 | VFS_PARSEARGS(vfsp, options, args, 1, error); | 713 | error = bhv_vfs_parseargs(vfsp, options, args, 1); |
| 727 | if (!error) | 714 | if (!error) |
| 728 | VFS_MNTUPDATE(vfsp, flags, args, error); | 715 | error = bhv_vfs_mntupdate(vfsp, flags, args); |
| 729 | kmem_free(args, sizeof(*args)); | 716 | kmem_free(args, sizeof(*args)); |
| 730 | return -error; | 717 | return -error; |
| 731 | } | 718 | } |
| @@ -734,7 +721,7 @@ STATIC void | |||
| 734 | xfs_fs_lockfs( | 721 | xfs_fs_lockfs( |
| 735 | struct super_block *sb) | 722 | struct super_block *sb) |
| 736 | { | 723 | { |
| 737 | VFS_FREEZE(vfs_from_sb(sb)); | 724 | bhv_vfs_freeze(vfs_from_sb(sb)); |
| 738 | } | 725 | } |
| 739 | 726 | ||
| 740 | STATIC int | 727 | STATIC int |
| @@ -742,11 +729,7 @@ xfs_fs_show_options( | |||
| 742 | struct seq_file *m, | 729 | struct seq_file *m, |
| 743 | struct vfsmount *mnt) | 730 | struct vfsmount *mnt) |
| 744 | { | 731 | { |
| 745 | struct vfs *vfsp = vfs_from_sb(mnt->mnt_sb); | 732 | return -bhv_vfs_showargs(vfs_from_sb(mnt->mnt_sb), m); |
| 746 | int error; | ||
| 747 | |||
| 748 | VFS_SHOWARGS(vfsp, m, error); | ||
| 749 | return error; | ||
| 750 | } | 733 | } |
| 751 | 734 | ||
| 752 | STATIC int | 735 | STATIC int |
| @@ -754,11 +737,7 @@ xfs_fs_quotasync( | |||
| 754 | struct super_block *sb, | 737 | struct super_block *sb, |
| 755 | int type) | 738 | int type) |
| 756 | { | 739 | { |
| 757 | struct vfs *vfsp = vfs_from_sb(sb); | 740 | return -bhv_vfs_quotactl(vfs_from_sb(sb), Q_XQUOTASYNC, 0, NULL); |
| 758 | int error; | ||
| 759 | |||
| 760 | VFS_QUOTACTL(vfsp, Q_XQUOTASYNC, 0, (caddr_t)NULL, error); | ||
| 761 | return -error; | ||
| 762 | } | 741 | } |
| 763 | 742 | ||
| 764 | STATIC int | 743 | STATIC int |
| @@ -766,11 +745,7 @@ xfs_fs_getxstate( | |||
| 766 | struct super_block *sb, | 745 | struct super_block *sb, |
| 767 | struct fs_quota_stat *fqs) | 746 | struct fs_quota_stat *fqs) |
| 768 | { | 747 | { |
| 769 | struct vfs *vfsp = vfs_from_sb(sb); | 748 | return -bhv_vfs_quotactl(vfs_from_sb(sb), Q_XGETQSTAT, 0, (caddr_t)fqs); |
| 770 | int error; | ||
| 771 | |||
| 772 | VFS_QUOTACTL(vfsp, Q_XGETQSTAT, 0, (caddr_t)fqs, error); | ||
| 773 | return -error; | ||
| 774 | } | 749 | } |
| 775 | 750 | ||
| 776 | STATIC int | 751 | STATIC int |
| @@ -779,11 +754,7 @@ xfs_fs_setxstate( | |||
| 779 | unsigned int flags, | 754 | unsigned int flags, |
| 780 | int op) | 755 | int op) |
| 781 | { | 756 | { |
| 782 | struct vfs *vfsp = vfs_from_sb(sb); | 757 | return -bhv_vfs_quotactl(vfs_from_sb(sb), op, 0, (caddr_t)&flags); |
| 783 | int error; | ||
| 784 | |||
| 785 | VFS_QUOTACTL(vfsp, op, 0, (caddr_t)&flags, error); | ||
| 786 | return -error; | ||
| 787 | } | 758 | } |
| 788 | 759 | ||
| 789 | STATIC int | 760 | STATIC int |
| @@ -793,13 +764,10 @@ xfs_fs_getxquota( | |||
| 793 | qid_t id, | 764 | qid_t id, |
| 794 | struct fs_disk_quota *fdq) | 765 | struct fs_disk_quota *fdq) |
| 795 | { | 766 | { |
| 796 | struct vfs *vfsp = vfs_from_sb(sb); | 767 | return -bhv_vfs_quotactl(vfs_from_sb(sb), |
| 797 | int error, getmode; | 768 | (type == USRQUOTA) ? Q_XGETQUOTA : |
| 798 | 769 | ((type == GRPQUOTA) ? Q_XGETGQUOTA : | |
| 799 | getmode = (type == USRQUOTA) ? Q_XGETQUOTA : | 770 | Q_XGETPQUOTA), id, (caddr_t)fdq); |
| 800 | ((type == GRPQUOTA) ? Q_XGETGQUOTA : Q_XGETPQUOTA); | ||
| 801 | VFS_QUOTACTL(vfsp, getmode, id, (caddr_t)fdq, error); | ||
| 802 | return -error; | ||
| 803 | } | 771 | } |
| 804 | 772 | ||
| 805 | STATIC int | 773 | STATIC int |
| @@ -809,13 +777,10 @@ xfs_fs_setxquota( | |||
| 809 | qid_t id, | 777 | qid_t id, |
| 810 | struct fs_disk_quota *fdq) | 778 | struct fs_disk_quota *fdq) |
| 811 | { | 779 | { |
| 812 | struct vfs *vfsp = vfs_from_sb(sb); | 780 | return -bhv_vfs_quotactl(vfs_from_sb(sb), |
| 813 | int error, setmode; | 781 | (type == USRQUOTA) ? Q_XSETQLIM : |
| 814 | 782 | ((type == GRPQUOTA) ? Q_XSETGQLIM : | |
| 815 | setmode = (type == USRQUOTA) ? Q_XSETQLIM : | 783 | Q_XSETPQLIM), id, (caddr_t)fdq); |
| 816 | ((type == GRPQUOTA) ? Q_XSETGQLIM : Q_XSETPQLIM); | ||
| 817 | VFS_QUOTACTL(vfsp, setmode, id, (caddr_t)fdq, error); | ||
| 818 | return -error; | ||
| 819 | } | 784 | } |
| 820 | 785 | ||
| 821 | STATIC int | 786 | STATIC int |
| @@ -825,14 +790,14 @@ xfs_fs_fill_super( | |||
| 825 | int silent) | 790 | int silent) |
| 826 | { | 791 | { |
| 827 | vnode_t *rootvp; | 792 | vnode_t *rootvp; |
| 828 | struct vfs *vfsp = vfs_allocate(sb); | 793 | struct bhv_vfs *vfsp = vfs_allocate(sb); |
| 829 | struct xfs_mount_args *args = xfs_args_allocate(sb, silent); | 794 | struct xfs_mount_args *args = xfs_args_allocate(sb, silent); |
| 830 | struct kstatfs statvfs; | 795 | struct kstatfs statvfs; |
| 831 | int error, error2; | 796 | int error; |
| 832 | 797 | ||
| 833 | bhv_insert_all_vfsops(vfsp); | 798 | bhv_insert_all_vfsops(vfsp); |
| 834 | 799 | ||
| 835 | VFS_PARSEARGS(vfsp, (char *)data, args, 0, error); | 800 | error = bhv_vfs_parseargs(vfsp, (char *)data, args, 0); |
| 836 | if (error) { | 801 | if (error) { |
| 837 | bhv_remove_all_vfsops(vfsp, 1); | 802 | bhv_remove_all_vfsops(vfsp, 1); |
| 838 | goto fail_vfsop; | 803 | goto fail_vfsop; |
| @@ -845,13 +810,13 @@ xfs_fs_fill_super( | |||
| 845 | sb->s_qcop = &xfs_quotactl_operations; | 810 | sb->s_qcop = &xfs_quotactl_operations; |
| 846 | sb->s_op = &xfs_super_operations; | 811 | sb->s_op = &xfs_super_operations; |
| 847 | 812 | ||
| 848 | VFS_MOUNT(vfsp, args, NULL, error); | 813 | error = bhv_vfs_mount(vfsp, args, NULL); |
| 849 | if (error) { | 814 | if (error) { |
| 850 | bhv_remove_all_vfsops(vfsp, 1); | 815 | bhv_remove_all_vfsops(vfsp, 1); |
| 851 | goto fail_vfsop; | 816 | goto fail_vfsop; |
| 852 | } | 817 | } |
| 853 | 818 | ||
| 854 | VFS_STATVFS(vfsp, &statvfs, NULL, error); | 819 | error = bhv_vfs_statvfs(vfsp, &statvfs, NULL); |
| 855 | if (error) | 820 | if (error) |
| 856 | goto fail_unmount; | 821 | goto fail_unmount; |
| 857 | 822 | ||
| @@ -863,7 +828,7 @@ xfs_fs_fill_super( | |||
| 863 | sb->s_time_gran = 1; | 828 | sb->s_time_gran = 1; |
| 864 | set_posix_acl_flag(sb); | 829 | set_posix_acl_flag(sb); |
| 865 | 830 | ||
| 866 | VFS_ROOT(vfsp, &rootvp, error); | 831 | error = bhv_vfs_root(vfsp, &rootvp); |
| 867 | if (error) | 832 | if (error) |
| 868 | goto fail_unmount; | 833 | goto fail_unmount; |
| 869 | 834 | ||
| @@ -892,7 +857,7 @@ fail_vnrele: | |||
| 892 | } | 857 | } |
| 893 | 858 | ||
| 894 | fail_unmount: | 859 | fail_unmount: |
| 895 | VFS_UNMOUNT(vfsp, 0, NULL, error2); | 860 | bhv_vfs_unmount(vfsp, 0, NULL); |
| 896 | 861 | ||
| 897 | fail_vfsop: | 862 | fail_vfsop: |
| 898 | vfs_deallocate(vfsp); | 863 | vfs_deallocate(vfsp); |
diff --git a/fs/xfs/linux-2.6/xfs_vfs.c b/fs/xfs/linux-2.6/xfs_vfs.c index 6f7c9f7a8624..9f9bc894deb9 100644 --- a/fs/xfs/linux-2.6/xfs_vfs.c +++ b/fs/xfs/linux-2.6/xfs_vfs.c | |||
| @@ -226,13 +226,13 @@ vfs_freeze( | |||
| 226 | ((*bhvtovfsops(next)->vfs_freeze)(next)); | 226 | ((*bhvtovfsops(next)->vfs_freeze)(next)); |
| 227 | } | 227 | } |
| 228 | 228 | ||
| 229 | vfs_t * | 229 | bhv_vfs_t * |
| 230 | vfs_allocate( | 230 | vfs_allocate( |
| 231 | struct super_block *sb) | 231 | struct super_block *sb) |
| 232 | { | 232 | { |
| 233 | struct vfs *vfsp; | 233 | struct bhv_vfs *vfsp; |
| 234 | 234 | ||
| 235 | vfsp = kmem_zalloc(sizeof(vfs_t), KM_SLEEP); | 235 | vfsp = kmem_zalloc(sizeof(bhv_vfs_t), KM_SLEEP); |
| 236 | bhv_head_init(VFS_BHVHEAD(vfsp), "vfs"); | 236 | bhv_head_init(VFS_BHVHEAD(vfsp), "vfs"); |
| 237 | INIT_LIST_HEAD(&vfsp->vfs_sync_list); | 237 | INIT_LIST_HEAD(&vfsp->vfs_sync_list); |
| 238 | spin_lock_init(&vfsp->vfs_sync_lock); | 238 | spin_lock_init(&vfsp->vfs_sync_lock); |
| @@ -247,25 +247,25 @@ vfs_allocate( | |||
| 247 | return vfsp; | 247 | return vfsp; |
| 248 | } | 248 | } |
| 249 | 249 | ||
| 250 | vfs_t * | 250 | bhv_vfs_t * |
| 251 | vfs_from_sb( | 251 | vfs_from_sb( |
| 252 | struct super_block *sb) | 252 | struct super_block *sb) |
| 253 | { | 253 | { |
| 254 | return (vfs_t *)sb->s_fs_info; | 254 | return (bhv_vfs_t *)sb->s_fs_info; |
| 255 | } | 255 | } |
| 256 | 256 | ||
| 257 | void | 257 | void |
| 258 | vfs_deallocate( | 258 | vfs_deallocate( |
| 259 | struct vfs *vfsp) | 259 | struct bhv_vfs *vfsp) |
| 260 | { | 260 | { |
| 261 | bhv_head_destroy(VFS_BHVHEAD(vfsp)); | 261 | bhv_head_destroy(VFS_BHVHEAD(vfsp)); |
| 262 | kmem_free(vfsp, sizeof(vfs_t)); | 262 | kmem_free(vfsp, sizeof(bhv_vfs_t)); |
| 263 | } | 263 | } |
| 264 | 264 | ||
| 265 | void | 265 | void |
| 266 | vfs_insertops( | 266 | vfs_insertops( |
| 267 | struct vfs *vfsp, | 267 | struct bhv_vfs *vfsp, |
| 268 | struct bhv_vfsops *vfsops) | 268 | struct bhv_module_vfsops *vfsops) |
| 269 | { | 269 | { |
| 270 | struct bhv_desc *bdp; | 270 | struct bhv_desc *bdp; |
| 271 | 271 | ||
| @@ -276,9 +276,9 @@ vfs_insertops( | |||
| 276 | 276 | ||
| 277 | void | 277 | void |
| 278 | vfs_insertbhv( | 278 | vfs_insertbhv( |
| 279 | struct vfs *vfsp, | 279 | struct bhv_vfs *vfsp, |
| 280 | struct bhv_desc *bdp, | 280 | struct bhv_desc *bdp, |
| 281 | struct vfsops *vfsops, | 281 | struct bhv_vfsops *vfsops, |
| 282 | void *mount) | 282 | void *mount) |
| 283 | { | 283 | { |
| 284 | bhv_desc_init(bdp, mount, vfsp, vfsops); | 284 | bhv_desc_init(bdp, mount, vfsp, vfsops); |
| @@ -287,7 +287,7 @@ vfs_insertbhv( | |||
| 287 | 287 | ||
| 288 | void | 288 | void |
| 289 | bhv_remove_vfsops( | 289 | bhv_remove_vfsops( |
| 290 | struct vfs *vfsp, | 290 | struct bhv_vfs *vfsp, |
| 291 | int pos) | 291 | int pos) |
| 292 | { | 292 | { |
| 293 | struct bhv_desc *bhv; | 293 | struct bhv_desc *bhv; |
| @@ -301,7 +301,7 @@ bhv_remove_vfsops( | |||
| 301 | 301 | ||
| 302 | void | 302 | void |
| 303 | bhv_remove_all_vfsops( | 303 | bhv_remove_all_vfsops( |
| 304 | struct vfs *vfsp, | 304 | struct bhv_vfs *vfsp, |
| 305 | int freebase) | 305 | int freebase) |
| 306 | { | 306 | { |
| 307 | struct xfs_mount *mp; | 307 | struct xfs_mount *mp; |
| @@ -317,7 +317,7 @@ bhv_remove_all_vfsops( | |||
| 317 | 317 | ||
| 318 | void | 318 | void |
| 319 | bhv_insert_all_vfsops( | 319 | bhv_insert_all_vfsops( |
| 320 | struct vfs *vfsp) | 320 | struct bhv_vfs *vfsp) |
| 321 | { | 321 | { |
| 322 | struct xfs_mount *mp; | 322 | struct xfs_mount *mp; |
| 323 | 323 | ||
diff --git a/fs/xfs/linux-2.6/xfs_vfs.h b/fs/xfs/linux-2.6/xfs_vfs.h index 2ca05043a0fd..55f0afd3e794 100644 --- a/fs/xfs/linux-2.6/xfs_vfs.h +++ b/fs/xfs/linux-2.6/xfs_vfs.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. | 2 | * Copyright (c) 2000-2006 Silicon Graphics, Inc. |
| 3 | * All Rights Reserved. | 3 | * All Rights Reserved. |
| 4 | * | 4 | * |
| 5 | * This program is free software; you can redistribute it and/or | 5 | * This program is free software; you can redistribute it and/or |
| @@ -21,42 +21,42 @@ | |||
| 21 | #include <linux/vfs.h> | 21 | #include <linux/vfs.h> |
| 22 | #include "xfs_fs.h" | 22 | #include "xfs_fs.h" |
| 23 | 23 | ||
| 24 | struct bhv_vfs; | ||
| 24 | struct fid; | 25 | struct fid; |
| 25 | struct vfs; | ||
| 26 | struct cred; | 26 | struct cred; |
| 27 | struct vnode; | 27 | struct vnode; |
| 28 | struct kstatfs; | 28 | struct statfs; |
| 29 | struct seq_file; | 29 | struct seq_file; |
| 30 | struct super_block; | 30 | struct super_block; |
| 31 | struct xfs_mount_args; | 31 | struct xfs_mount_args; |
| 32 | 32 | ||
| 33 | typedef struct kstatfs xfs_statfs_t; | 33 | typedef struct kstatfs xfs_statfs_t; |
| 34 | 34 | ||
| 35 | typedef struct vfs_sync_work { | 35 | typedef struct bhv_vfs_sync_work { |
| 36 | struct list_head w_list; | 36 | struct list_head w_list; |
| 37 | struct vfs *w_vfs; | 37 | struct bhv_vfs *w_vfs; |
| 38 | void *w_data; /* syncer routine argument */ | 38 | void *w_data; /* syncer routine argument */ |
| 39 | void (*w_syncer)(struct vfs *, void *); | 39 | void (*w_syncer)(struct bhv_vfs *, void *); |
| 40 | } vfs_sync_work_t; | 40 | } bhv_vfs_sync_work_t; |
| 41 | 41 | ||
| 42 | typedef struct vfs { | 42 | typedef struct bhv_vfs { |
| 43 | u_int vfs_flag; /* flags */ | 43 | u_int vfs_flag; /* flags */ |
| 44 | xfs_fsid_t vfs_fsid; /* file system ID */ | 44 | xfs_fsid_t vfs_fsid; /* file system ID */ |
| 45 | xfs_fsid_t *vfs_altfsid; /* An ID fixed for life of FS */ | 45 | xfs_fsid_t *vfs_altfsid; /* An ID fixed for life of FS */ |
| 46 | bhv_head_t vfs_bh; /* head of vfs behavior chain */ | 46 | bhv_head_t vfs_bh; /* head of vfs behavior chain */ |
| 47 | struct super_block *vfs_super; /* generic superblock pointer */ | 47 | struct super_block *vfs_super; /* generic superblock pointer */ |
| 48 | struct task_struct *vfs_sync_task; /* generalised sync thread */ | 48 | struct task_struct *vfs_sync_task; /* generalised sync thread */ |
| 49 | vfs_sync_work_t vfs_sync_work; /* work item for VFS_SYNC */ | 49 | bhv_vfs_sync_work_t vfs_sync_work; /* work item for VFS_SYNC */ |
| 50 | struct list_head vfs_sync_list; /* sync thread work item list */ | 50 | struct list_head vfs_sync_list; /* sync thread work item list */ |
| 51 | spinlock_t vfs_sync_lock; /* work item list lock */ | 51 | spinlock_t vfs_sync_lock; /* work item list lock */ |
| 52 | int vfs_sync_seq; /* sync thread generation no. */ | 52 | int vfs_sync_seq; /* sync thread generation no. */ |
| 53 | wait_queue_head_t vfs_wait_single_sync_task; | 53 | wait_queue_head_t vfs_wait_single_sync_task; |
| 54 | } vfs_t; | 54 | } bhv_vfs_t; |
| 55 | 55 | ||
| 56 | #define vfs_fbhv vfs_bh.bh_first /* 1st on vfs behavior chain */ | 56 | #define vfs_fbhv vfs_bh.bh_first /* 1st on vfs behavior chain */ |
| 57 | 57 | ||
| 58 | #define bhvtovfs(bdp) ( (struct vfs *)BHV_VOBJ(bdp) ) | 58 | #define bhvtovfs(bdp) ( (struct bhv_vfs *)BHV_VOBJ(bdp) ) |
| 59 | #define bhvtovfsops(bdp) ( (struct vfsops *)BHV_OPS(bdp) ) | 59 | #define bhvtovfsops(bdp) ( (struct bhv_vfsops *)BHV_OPS(bdp) ) |
| 60 | #define VFS_BHVHEAD(vfs) ( &(vfs)->vfs_bh ) | 60 | #define VFS_BHVHEAD(vfs) ( &(vfs)->vfs_bh ) |
| 61 | #define VFS_REMOVEBHV(vfs, bdp) ( bhv_remove(VFS_BHVHEAD(vfs), bdp) ) | 61 | #define VFS_REMOVEBHV(vfs, bdp) ( bhv_remove(VFS_BHVHEAD(vfs), bdp) ) |
| 62 | 62 | ||
| @@ -71,7 +71,7 @@ typedef enum { | |||
| 71 | VFS_BHV_QM, /* quota manager */ | 71 | VFS_BHV_QM, /* quota manager */ |
| 72 | VFS_BHV_IO, /* IO path */ | 72 | VFS_BHV_IO, /* IO path */ |
| 73 | VFS_BHV_END /* housekeeping end-of-range */ | 73 | VFS_BHV_END /* housekeeping end-of-range */ |
| 74 | } vfs_bhv_t; | 74 | } bhv_vfs_type_t; |
| 75 | 75 | ||
| 76 | #define VFS_POSITION_XFS (BHV_POSITION_BASE) | 76 | #define VFS_POSITION_XFS (BHV_POSITION_BASE) |
| 77 | #define VFS_POSITION_DM (VFS_POSITION_BASE+10) | 77 | #define VFS_POSITION_DM (VFS_POSITION_BASE+10) |
| @@ -81,8 +81,9 @@ typedef enum { | |||
| 81 | #define VFS_RDONLY 0x0001 /* read-only vfs */ | 81 | #define VFS_RDONLY 0x0001 /* read-only vfs */ |
| 82 | #define VFS_GRPID 0x0002 /* group-ID assigned from directory */ | 82 | #define VFS_GRPID 0x0002 /* group-ID assigned from directory */ |
| 83 | #define VFS_DMI 0x0004 /* filesystem has the DMI enabled */ | 83 | #define VFS_DMI 0x0004 /* filesystem has the DMI enabled */ |
| 84 | #define VFS_32BITINODES 0x0008 /* do not use inums above 32 bits */ | 84 | #define VFS_UMOUNT 0x0008 /* unmount in progress */ |
| 85 | #define VFS_END 0x0008 /* max flag */ | 85 | #define VFS_32BITINODES 0x0010 /* do not use inums above 32 bits */ |
| 86 | #define VFS_END 0x0010 /* max flag */ | ||
| 86 | 87 | ||
| 87 | #define SYNC_ATTR 0x0001 /* sync attributes */ | 88 | #define SYNC_ATTR 0x0001 /* sync attributes */ |
| 88 | #define SYNC_CLOSE 0x0002 /* close file system down */ | 89 | #define SYNC_CLOSE 0x0002 /* close file system down */ |
| @@ -92,7 +93,7 @@ typedef enum { | |||
| 92 | #define SYNC_FSDATA 0x0020 /* flush fs data (e.g. superblocks) */ | 93 | #define SYNC_FSDATA 0x0020 /* flush fs data (e.g. superblocks) */ |
| 93 | #define SYNC_REFCACHE 0x0040 /* prune some of the nfs ref cache */ | 94 | #define SYNC_REFCACHE 0x0040 /* prune some of the nfs ref cache */ |
| 94 | #define SYNC_REMOUNT 0x0080 /* remount readonly, no dummy LRs */ | 95 | #define SYNC_REMOUNT 0x0080 /* remount readonly, no dummy LRs */ |
| 95 | #define SYNC_QUIESCE 0x0100 /* quiesce filesystem for a snapshot */ | 96 | #define SYNC_QUIESCE 0x0100 /* quiesce fileystem for a snapshot */ |
| 96 | 97 | ||
| 97 | #define SHUTDOWN_META_IO_ERROR 0x0001 /* write attempt to metadata failed */ | 98 | #define SHUTDOWN_META_IO_ERROR 0x0001 /* write attempt to metadata failed */ |
| 98 | #define SHUTDOWN_LOG_IO_ERROR 0x0002 /* write attempt to the log failed */ | 99 | #define SHUTDOWN_LOG_IO_ERROR 0x0002 /* write attempt to the log failed */ |
| @@ -120,7 +121,7 @@ typedef void (*vfs_init_vnode_t)(bhv_desc_t *, | |||
| 120 | typedef void (*vfs_force_shutdown_t)(bhv_desc_t *, int, char *, int); | 121 | typedef void (*vfs_force_shutdown_t)(bhv_desc_t *, int, char *, int); |
| 121 | typedef void (*vfs_freeze_t)(bhv_desc_t *); | 122 | typedef void (*vfs_freeze_t)(bhv_desc_t *); |
| 122 | 123 | ||
| 123 | typedef struct vfsops { | 124 | typedef struct bhv_vfsops { |
| 124 | bhv_position_t vf_position; /* behavior chain position */ | 125 | bhv_position_t vf_position; /* behavior chain position */ |
| 125 | vfs_mount_t vfs_mount; /* mount file system */ | 126 | vfs_mount_t vfs_mount; /* mount file system */ |
| 126 | vfs_parseargs_t vfs_parseargs; /* parse mount options */ | 127 | vfs_parseargs_t vfs_parseargs; /* parse mount options */ |
| @@ -136,44 +137,44 @@ typedef struct vfsops { | |||
| 136 | vfs_init_vnode_t vfs_init_vnode; /* initialize a new vnode */ | 137 | vfs_init_vnode_t vfs_init_vnode; /* initialize a new vnode */ |
| 137 | vfs_force_shutdown_t vfs_force_shutdown; /* crash and burn */ | 138 | vfs_force_shutdown_t vfs_force_shutdown; /* crash and burn */ |
| 138 | vfs_freeze_t vfs_freeze; /* freeze fs for snapshot */ | 139 | vfs_freeze_t vfs_freeze; /* freeze fs for snapshot */ |
| 139 | } vfsops_t; | 140 | } bhv_vfsops_t; |
| 140 | 141 | ||
| 141 | /* | 142 | /* |
| 142 | * VFS's. Operates on vfs structure pointers (starts at bhv head). | 143 | * VFS's. Operates on vfs structure pointers (starts at bhv head). |
| 143 | */ | 144 | */ |
| 144 | #define VHEAD(v) ((v)->vfs_fbhv) | 145 | #define VHEAD(v) ((v)->vfs_fbhv) |
| 145 | #define VFS_MOUNT(v, ma,cr, rv) ((rv) = vfs_mount(VHEAD(v), ma,cr)) | 146 | #define bhv_vfs_mount(v, ma,cr) vfs_mount(VHEAD(v), ma,cr) |
| 146 | #define VFS_PARSEARGS(v, o,ma,f, rv) ((rv) = vfs_parseargs(VHEAD(v), o,ma,f)) | 147 | #define bhv_vfs_parseargs(v, o,ma,f) vfs_parseargs(VHEAD(v), o,ma,f) |
| 147 | #define VFS_SHOWARGS(v, m, rv) ((rv) = vfs_showargs(VHEAD(v), m)) | 148 | #define bhv_vfs_showargs(v, m) vfs_showargs(VHEAD(v), m) |
| 148 | #define VFS_UNMOUNT(v, f, cr, rv) ((rv) = vfs_unmount(VHEAD(v), f,cr)) | 149 | #define bhv_vfs_unmount(v, f,cr) vfs_unmount(VHEAD(v), f,cr) |
| 149 | #define VFS_MNTUPDATE(v, fl, args, rv) ((rv) = vfs_mntupdate(VHEAD(v), fl, args)) | 150 | #define bhv_vfs_mntupdate(v, fl,args) vfs_mntupdate(VHEAD(v), fl,args) |
| 150 | #define VFS_ROOT(v, vpp, rv) ((rv) = vfs_root(VHEAD(v), vpp)) | 151 | #define bhv_vfs_root(v, vpp) vfs_root(VHEAD(v), vpp) |
| 151 | #define VFS_STATVFS(v, sp,vp, rv) ((rv) = vfs_statvfs(VHEAD(v), sp,vp)) | 152 | #define bhv_vfs_statvfs(v, sp,vp) vfs_statvfs(VHEAD(v), sp,vp) |
| 152 | #define VFS_SYNC(v, flag,cr, rv) ((rv) = vfs_sync(VHEAD(v), flag,cr)) | 153 | #define bhv_vfs_sync(v, flag,cr) vfs_sync(VHEAD(v), flag,cr) |
| 153 | #define VFS_VGET(v, vpp,fidp, rv) ((rv) = vfs_vget(VHEAD(v), vpp,fidp)) | 154 | #define bhv_vfs_vget(v, vpp,fidp) vfs_vget(VHEAD(v), vpp,fidp) |
| 154 | #define VFS_DMAPIOPS(v, p, rv) ((rv) = vfs_dmapiops(VHEAD(v), p)) | 155 | #define bhv_vfs_dmapiops(v, p) vfs_dmapiops(VHEAD(v), p) |
| 155 | #define VFS_QUOTACTL(v, c,id,p, rv) ((rv) = vfs_quotactl(VHEAD(v), c,id,p)) | 156 | #define bhv_vfs_quotactl(v, c,id,p) vfs_quotactl(VHEAD(v), c,id,p) |
| 156 | #define VFS_INIT_VNODE(v, vp,b,ul) ( vfs_init_vnode(VHEAD(v), vp,b,ul) ) | 157 | #define bhv_vfs_init_vnode(v, vp,b,ul) vfs_init_vnode(VHEAD(v), vp,b,ul) |
| 157 | #define VFS_FORCE_SHUTDOWN(v, fl,f,l) ( vfs_force_shutdown(VHEAD(v), fl,f,l) ) | 158 | #define bhv_vfs_force_shutdown(v,u,f,l) vfs_force_shutdown(VHEAD(v), u,f,l) |
| 158 | #define VFS_FREEZE(v) ( vfs_freeze(VHEAD(v)) ) | 159 | #define bhv_vfs_freeze(v) vfs_freeze(VHEAD(v)) |
| 159 | 160 | ||
| 160 | /* | 161 | /* |
| 161 | * PVFS's. Operates on behavior descriptor pointers. | 162 | * PVFS's. Operates on behavior descriptor pointers. |
| 162 | */ | 163 | */ |
| 163 | #define PVFS_MOUNT(b, ma,cr, rv) ((rv) = vfs_mount(b, ma,cr)) | 164 | #define bhv_next_vfs_mount(b, ma,cr) vfs_mount(b, ma,cr) |
| 164 | #define PVFS_PARSEARGS(b, o,ma,f, rv) ((rv) = vfs_parseargs(b, o,ma,f)) | 165 | #define bhv_next_vfs_parseargs(b, o,ma,f) vfs_parseargs(b, o,ma,f) |
| 165 | #define PVFS_SHOWARGS(b, m, rv) ((rv) = vfs_showargs(b, m)) | 166 | #define bhv_next_vfs_showargs(b, m) vfs_showargs(b, m) |
| 166 | #define PVFS_UNMOUNT(b, f,cr, rv) ((rv) = vfs_unmount(b, f,cr)) | 167 | #define bhv_next_vfs_unmount(b, f,cr) vfs_unmount(b, f,cr) |
| 167 | #define PVFS_MNTUPDATE(b, fl, args, rv) ((rv) = vfs_mntupdate(b, fl, args)) | 168 | #define bhv_next_vfs_mntupdate(b, fl,args) vfs_mntupdate(b, fl, args) |
| 168 | #define PVFS_ROOT(b, vpp, rv) ((rv) = vfs_root(b, vpp)) | 169 | #define bhv_next_vfs_root(b, vpp) vfs_root(b, vpp) |
| 169 | #define PVFS_STATVFS(b, sp,vp, rv) ((rv) = vfs_statvfs(b, sp,vp)) | 170 | #define bhv_next_vfs_statvfs(b, sp,vp) vfs_statvfs(b, sp,vp) |
| 170 | #define PVFS_SYNC(b, flag,cr, rv) ((rv) = vfs_sync(b, flag,cr)) | 171 | #define bhv_next_vfs_sync(b, flag,cr) vfs_sync(b, flag,cr) |
| 171 | #define PVFS_VGET(b, vpp,fidp, rv) ((rv) = vfs_vget(b, vpp,fidp)) | 172 | #define bhv_next_vfs_vget(b, vpp,fidp) vfs_vget(b, vpp,fidp) |
| 172 | #define PVFS_DMAPIOPS(b, p, rv) ((rv) = vfs_dmapiops(b, p)) | 173 | #define bhv_next_vfs_dmapiops(b, p) vfs_dmapiops(b, p) |
| 173 | #define PVFS_QUOTACTL(b, c,id,p, rv) ((rv) = vfs_quotactl(b, c,id,p)) | 174 | #define bhv_next_vfs_quotactl(b, c,id,p) vfs_quotactl(b, c,id,p) |
| 174 | #define PVFS_INIT_VNODE(b, vp,b2,ul) ( vfs_init_vnode(b, vp,b2,ul) ) | 175 | #define bhv_next_vfs_init_vnode(b, vp,b2,ul) vfs_init_vnode(b, vp,b2,ul) |
| 175 | #define PVFS_FORCE_SHUTDOWN(b, fl,f,l) ( vfs_force_shutdown(b, fl,f,l) ) | 176 | #define bhv_next_force_shutdown(b, fl,f,l) vfs_force_shutdown(b, fl,f,l) |
| 176 | #define PVFS_FREEZE(b) ( vfs_freeze(b) ) | 177 | #define bhv_next_vfs_freeze(b) vfs_freeze(b) |
| 177 | 178 | ||
| 178 | extern int vfs_mount(bhv_desc_t *, struct xfs_mount_args *, struct cred *); | 179 | extern int vfs_mount(bhv_desc_t *, struct xfs_mount_args *, struct cred *); |
| 179 | extern int vfs_parseargs(bhv_desc_t *, char *, struct xfs_mount_args *, int); | 180 | extern int vfs_parseargs(bhv_desc_t *, char *, struct xfs_mount_args *, int); |
| @@ -190,25 +191,26 @@ extern void vfs_init_vnode(bhv_desc_t *, struct vnode *, bhv_desc_t *, int); | |||
| 190 | extern void vfs_force_shutdown(bhv_desc_t *, int, char *, int); | 191 | extern void vfs_force_shutdown(bhv_desc_t *, int, char *, int); |
| 191 | extern void vfs_freeze(bhv_desc_t *); | 192 | extern void vfs_freeze(bhv_desc_t *); |
| 192 | 193 | ||
| 193 | typedef struct bhv_vfsops { | 194 | typedef struct bhv_module_vfsops { |
| 194 | struct vfsops bhv_common; | 195 | struct bhv_vfsops bhv_common; |
| 195 | void * bhv_custom; | 196 | void * bhv_custom; |
| 196 | } bhv_vfsops_t; | 197 | } bhv_module_vfsops_t; |
| 198 | |||
| 199 | #define vfs_bhv_lookup(v, id) (bhv_lookup_range(&(v)->vfs_bh, (id), (id))) | ||
| 200 | #define vfs_bhv_custom(b) (((bhv_module_vfsops_t*)BHV_OPS(b))->bhv_custom) | ||
| 201 | #define vfs_bhv_set_custom(b,o) ((b)->bhv_custom = (void *)(o)) | ||
| 202 | #define vfs_bhv_clr_custom(b) ((b)->bhv_custom = NULL) | ||
| 197 | 203 | ||
| 198 | #define vfs_bhv_lookup(v, id) ( bhv_lookup_range(&(v)->vfs_bh, (id), (id)) ) | 204 | extern bhv_vfs_t *vfs_allocate(struct super_block *); |
| 199 | #define vfs_bhv_custom(b) ( ((bhv_vfsops_t *)BHV_OPS(b))->bhv_custom ) | 205 | extern bhv_vfs_t *vfs_from_sb(struct super_block *); |
| 200 | #define vfs_bhv_set_custom(b,o) ( (b)->bhv_custom = (void *)(o)) | 206 | extern void vfs_deallocate(bhv_vfs_t *); |
| 201 | #define vfs_bhv_clr_custom(b) ( (b)->bhv_custom = NULL ) | 207 | extern void vfs_insertbhv(bhv_vfs_t *, bhv_desc_t *, bhv_vfsops_t *, void *); |
| 202 | 208 | ||
| 203 | extern vfs_t *vfs_allocate(struct super_block *); | 209 | extern void vfs_insertops(bhv_vfs_t *, bhv_module_vfsops_t *); |
| 204 | extern vfs_t *vfs_from_sb(struct super_block *); | ||
| 205 | extern void vfs_deallocate(vfs_t *); | ||
| 206 | extern void vfs_insertops(vfs_t *, bhv_vfsops_t *); | ||
| 207 | extern void vfs_insertbhv(vfs_t *, bhv_desc_t *, vfsops_t *, void *); | ||
| 208 | 210 | ||
| 209 | extern void bhv_insert_all_vfsops(struct vfs *); | 211 | extern void bhv_insert_all_vfsops(struct bhv_vfs *); |
| 210 | extern void bhv_remove_all_vfsops(struct vfs *, int); | 212 | extern void bhv_remove_all_vfsops(struct bhv_vfs *, int); |
| 211 | extern void bhv_remove_vfsops(struct vfs *, int); | 213 | extern void bhv_remove_vfsops(struct bhv_vfs *, int); |
| 212 | 214 | ||
| 213 | #define fs_frozen(vfsp) ((vfsp)->vfs_super->s_frozen) | 215 | #define fs_frozen(vfsp) ((vfsp)->vfs_super->s_frozen) |
| 214 | #define fs_check_frozen(vfsp, level) \ | 216 | #define fs_check_frozen(vfsp, level) \ |
diff --git a/fs/xfs/linux-2.6/xfs_vnode.c b/fs/xfs/linux-2.6/xfs_vnode.c index f17e39cff230..82777f1a70a7 100644 --- a/fs/xfs/linux-2.6/xfs_vnode.c +++ b/fs/xfs/linux-2.6/xfs_vnode.c | |||
| @@ -67,7 +67,7 @@ vn_ioerror( | |||
| 67 | int l) | 67 | int l) |
| 68 | { | 68 | { |
| 69 | if (unlikely(error == -ENODEV)) | 69 | if (unlikely(error == -ENODEV)) |
| 70 | VFS_FORCE_SHUTDOWN(vp->v_vfsp, SHUTDOWN_DEVICE_REQ, f, l); | 70 | bhv_vfs_force_shutdown(vp->v_vfsp, SHUTDOWN_DEVICE_REQ, f, l); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | struct vnode * | 73 | struct vnode * |
diff --git a/fs/xfs/linux-2.6/xfs_vnode.h b/fs/xfs/linux-2.6/xfs_vnode.h index 569a4e7b5cc1..95343637ab66 100644 --- a/fs/xfs/linux-2.6/xfs_vnode.h +++ b/fs/xfs/linux-2.6/xfs_vnode.h | |||
| @@ -68,7 +68,7 @@ typedef enum vflags { | |||
| 68 | */ | 68 | */ |
| 69 | typedef struct vnode { | 69 | typedef struct vnode { |
| 70 | vflags_t v_flag; /* vnode flags (see above) */ | 70 | vflags_t v_flag; /* vnode flags (see above) */ |
| 71 | struct vfs *v_vfsp; /* ptr to containing VFS */ | 71 | struct bhv_vfs *v_vfsp; /* ptr to containing VFS */ |
| 72 | vnumber_t v_number; /* in-core vnode number */ | 72 | vnumber_t v_number; /* in-core vnode number */ |
| 73 | vn_bhv_head_t v_bh; /* behavior head */ | 73 | vn_bhv_head_t v_bh; /* behavior head */ |
| 74 | spinlock_t v_lock; /* VN_LOCK/VN_UNLOCK */ | 74 | spinlock_t v_lock; /* VN_LOCK/VN_UNLOCK */ |
| @@ -503,7 +503,7 @@ extern vnode_t *vn_initialize(struct inode *); | |||
| 503 | * vnode_map structures _must_ match vn_epoch and vnode structure sizes. | 503 | * vnode_map structures _must_ match vn_epoch and vnode structure sizes. |
| 504 | */ | 504 | */ |
| 505 | typedef struct vnode_map { | 505 | typedef struct vnode_map { |
| 506 | vfs_t *v_vfsp; | 506 | bhv_vfs_t *v_vfsp; |
| 507 | vnumber_t v_number; /* in-core vnode number */ | 507 | vnumber_t v_number; /* in-core vnode number */ |
| 508 | xfs_ino_t v_ino; /* inode # */ | 508 | xfs_ino_t v_ino; /* inode # */ |
| 509 | } vmap_t; | 509 | } vmap_t; |
diff --git a/fs/xfs/quota/xfs_qm_bhv.c b/fs/xfs/quota/xfs_qm_bhv.c index 181dd90b29ce..78f5962e5781 100644 --- a/fs/xfs/quota/xfs_qm_bhv.c +++ b/fs/xfs/quota/xfs_qm_bhv.c | |||
| @@ -129,7 +129,7 @@ xfs_qm_parseargs( | |||
| 129 | return XFS_ERROR(EINVAL); | 129 | return XFS_ERROR(EINVAL); |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | PVFS_PARSEARGS(BHV_NEXT(bhv), options, args, update, error); | 132 | error = bhv_next_vfs_parseargs(BHV_NEXT(bhv), options, args, update); |
| 133 | if (!error && !referenced) | 133 | if (!error && !referenced) |
| 134 | bhv_remove_vfsops(bhvtovfs(bhv), VFS_POSITION_QM); | 134 | bhv_remove_vfsops(bhvtovfs(bhv), VFS_POSITION_QM); |
| 135 | return error; | 135 | return error; |
| @@ -140,9 +140,8 @@ xfs_qm_showargs( | |||
| 140 | struct bhv_desc *bhv, | 140 | struct bhv_desc *bhv, |
| 141 | struct seq_file *m) | 141 | struct seq_file *m) |
| 142 | { | 142 | { |
| 143 | struct vfs *vfsp = bhvtovfs(bhv); | 143 | struct bhv_vfs *vfsp = bhvtovfs(bhv); |
| 144 | struct xfs_mount *mp = XFS_VFSTOM(vfsp); | 144 | struct xfs_mount *mp = XFS_VFSTOM(vfsp); |
| 145 | int error; | ||
| 146 | 145 | ||
| 147 | if (mp->m_qflags & XFS_UQUOTA_ACCT) { | 146 | if (mp->m_qflags & XFS_UQUOTA_ACCT) { |
| 148 | (mp->m_qflags & XFS_UQUOTA_ENFD) ? | 147 | (mp->m_qflags & XFS_UQUOTA_ENFD) ? |
| @@ -165,8 +164,7 @@ xfs_qm_showargs( | |||
| 165 | if (!(mp->m_qflags & XFS_ALL_QUOTA_ACCT)) | 164 | if (!(mp->m_qflags & XFS_ALL_QUOTA_ACCT)) |
| 166 | seq_puts(m, "," MNTOPT_NOQUOTA); | 165 | seq_puts(m, "," MNTOPT_NOQUOTA); |
| 167 | 166 | ||
| 168 | PVFS_SHOWARGS(BHV_NEXT(bhv), m, error); | 167 | return bhv_next_vfs_showargs(BHV_NEXT(bhv), m); |
| 169 | return error; | ||
| 170 | } | 168 | } |
| 171 | 169 | ||
| 172 | STATIC int | 170 | STATIC int |
| @@ -175,14 +173,12 @@ xfs_qm_mount( | |||
| 175 | struct xfs_mount_args *args, | 173 | struct xfs_mount_args *args, |
| 176 | struct cred *cr) | 174 | struct cred *cr) |
| 177 | { | 175 | { |
| 178 | struct vfs *vfsp = bhvtovfs(bhv); | 176 | struct bhv_vfs *vfsp = bhvtovfs(bhv); |
| 179 | struct xfs_mount *mp = XFS_VFSTOM(vfsp); | 177 | struct xfs_mount *mp = XFS_VFSTOM(vfsp); |
| 180 | int error; | ||
| 181 | 178 | ||
| 182 | if (args->flags & (XFSMNT_UQUOTA | XFSMNT_GQUOTA | XFSMNT_PQUOTA)) | 179 | if (args->flags & (XFSMNT_UQUOTA | XFSMNT_GQUOTA | XFSMNT_PQUOTA)) |
| 183 | xfs_qm_mount_quotainit(mp, args->flags); | 180 | xfs_qm_mount_quotainit(mp, args->flags); |
| 184 | PVFS_MOUNT(BHV_NEXT(bhv), args, cr, error); | 181 | return bhv_next_vfs_mount(BHV_NEXT(bhv), args, cr); |
| 185 | return error; | ||
| 186 | } | 182 | } |
| 187 | 183 | ||
| 188 | /* | 184 | /* |
| @@ -205,7 +201,7 @@ xfs_qm_statvfs( | |||
| 205 | __uint64_t limit; | 201 | __uint64_t limit; |
| 206 | int error; | 202 | int error; |
| 207 | 203 | ||
| 208 | error = PVFS_STATVFS(BHV_NEXT(bhv), statp, vnode); | 204 | error = bhv_next_vfs_statvfs(BHV_NEXT(bhv), statp, vnode); |
| 209 | if (error || !vnode) | 205 | if (error || !vnode) |
| 210 | return error; | 206 | return error; |
| 211 | 207 | ||
| @@ -246,7 +242,7 @@ xfs_qm_syncall( | |||
| 246 | int flags, | 242 | int flags, |
| 247 | cred_t *credp) | 243 | cred_t *credp) |
| 248 | { | 244 | { |
| 249 | struct vfs *vfsp = bhvtovfs(bhv); | 245 | struct bhv_vfs *vfsp = bhvtovfs(bhv); |
| 250 | struct xfs_mount *mp = XFS_VFSTOM(vfsp); | 246 | struct xfs_mount *mp = XFS_VFSTOM(vfsp); |
| 251 | int error; | 247 | int error; |
| 252 | 248 | ||
| @@ -265,8 +261,7 @@ xfs_qm_syncall( | |||
| 265 | } | 261 | } |
| 266 | } | 262 | } |
| 267 | } | 263 | } |
| 268 | PVFS_SYNC(BHV_NEXT(bhv), flags, credp, error); | 264 | return bhv_next_vfs_sync(BHV_NEXT(bhv), flags, credp); |
| 269 | return error; | ||
| 270 | } | 265 | } |
| 271 | 266 | ||
| 272 | STATIC int | 267 | STATIC int |
| @@ -401,7 +396,7 @@ STATIC struct xfs_qmops xfs_qmcore_xfs = { | |||
| 401 | .xfs_dqtrxops = &xfs_trans_dquot_ops, | 396 | .xfs_dqtrxops = &xfs_trans_dquot_ops, |
| 402 | }; | 397 | }; |
| 403 | 398 | ||
| 404 | struct bhv_vfsops xfs_qmops = { { | 399 | struct bhv_module_vfsops xfs_qmops = { { |
| 405 | BHV_IDENTITY_INIT(VFS_BHV_QM, VFS_POSITION_QM), | 400 | BHV_IDENTITY_INIT(VFS_BHV_QM, VFS_POSITION_QM), |
| 406 | .vfs_parseargs = xfs_qm_parseargs, | 401 | .vfs_parseargs = xfs_qm_parseargs, |
| 407 | .vfs_showargs = xfs_qm_showargs, | 402 | .vfs_showargs = xfs_qm_showargs, |
diff --git a/fs/xfs/quota/xfs_qm_syscalls.c b/fs/xfs/quota/xfs_qm_syscalls.c index c55db463bbf2..afc7c1c696b8 100644 --- a/fs/xfs/quota/xfs_qm_syscalls.c +++ b/fs/xfs/quota/xfs_qm_syscalls.c | |||
| @@ -91,8 +91,8 @@ xfs_qm_quotactl( | |||
| 91 | xfs_caddr_t addr) | 91 | xfs_caddr_t addr) |
| 92 | { | 92 | { |
| 93 | xfs_mount_t *mp; | 93 | xfs_mount_t *mp; |
| 94 | bhv_vfs_t *vfsp; | ||
| 94 | int error; | 95 | int error; |
| 95 | struct vfs *vfsp; | ||
| 96 | 96 | ||
| 97 | vfsp = bhvtovfs(bdp); | 97 | vfsp = bhvtovfs(bdp); |
| 98 | mp = XFS_VFSTOM(vfsp); | 98 | mp = XFS_VFSTOM(vfsp); |
diff --git a/fs/xfs/xfs_dmapi.h b/fs/xfs/xfs_dmapi.h index 00b1540f8108..4e7865ad6f0e 100644 --- a/fs/xfs/xfs_dmapi.h +++ b/fs/xfs/xfs_dmapi.h | |||
| @@ -189,6 +189,6 @@ typedef enum { | |||
| 189 | #define AT_DELAY_FLAG(f) ((f&ATTR_NONBLOCK) ? DM_FLAGS_NDELAY : 0) | 189 | #define AT_DELAY_FLAG(f) ((f&ATTR_NONBLOCK) ? DM_FLAGS_NDELAY : 0) |
| 190 | 190 | ||
| 191 | 191 | ||
| 192 | extern struct bhv_vfsops xfs_dmops; | 192 | extern struct bhv_module_vfsops xfs_dmops; |
| 193 | 193 | ||
| 194 | #endif /* __XFS_DMAPI_H__ */ | 194 | #endif /* __XFS_DMAPI_H__ */ |
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 96f4b3e8fa4a..502483c41f97 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c | |||
| @@ -574,7 +574,7 @@ xfs_fs_goingdown( | |||
| 574 | { | 574 | { |
| 575 | switch (inflags) { | 575 | switch (inflags) { |
| 576 | case XFS_FSOP_GOING_FLAGS_DEFAULT: { | 576 | case XFS_FSOP_GOING_FLAGS_DEFAULT: { |
| 577 | struct vfs *vfsp = XFS_MTOVFS(mp); | 577 | struct bhv_vfs *vfsp = XFS_MTOVFS(mp); |
| 578 | struct super_block *sb = freeze_bdev(vfsp->vfs_super->s_bdev); | 578 | struct super_block *sb = freeze_bdev(vfsp->vfs_super->s_bdev); |
| 579 | 579 | ||
| 580 | if (sb && !IS_ERR(sb)) { | 580 | if (sb && !IS_ERR(sb)) { |
diff --git a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c index b53854325266..41f38eb60ebc 100644 --- a/fs/xfs/xfs_iget.c +++ b/fs/xfs/xfs_iget.c | |||
| @@ -468,7 +468,7 @@ finish_inode: | |||
| 468 | * If we have a real type for an on-disk inode, we can set ops(&unlock) | 468 | * If we have a real type for an on-disk inode, we can set ops(&unlock) |
| 469 | * now. If it's a new inode being created, xfs_ialloc will handle it. | 469 | * now. If it's a new inode being created, xfs_ialloc will handle it. |
| 470 | */ | 470 | */ |
| 471 | VFS_INIT_VNODE(XFS_MTOVFS(mp), vp, XFS_ITOBHV(ip), 1); | 471 | bhv_vfs_init_vnode(XFS_MTOVFS(mp), vp, XFS_ITOBHV(ip), 1); |
| 472 | 472 | ||
| 473 | return 0; | 473 | return 0; |
| 474 | } | 474 | } |
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 50119a00885b..0ed707ed664b 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
| @@ -1250,8 +1250,8 @@ xfs_ialloc( | |||
| 1250 | */ | 1250 | */ |
| 1251 | xfs_trans_log_inode(tp, ip, flags); | 1251 | xfs_trans_log_inode(tp, ip, flags); |
| 1252 | 1252 | ||
| 1253 | /* now that we have an i_mode we can set Linux inode ops (& unlock) */ | 1253 | /* now that we have an i_mode we can setup inode ops and unlock */ |
| 1254 | VFS_INIT_VNODE(XFS_MTOVFS(tp->t_mountp), vp, XFS_ITOBHV(ip), 1); | 1254 | bhv_vfs_init_vnode(XFS_MTOVFS(tp->t_mountp), vp, XFS_ITOBHV(ip), 1); |
| 1255 | 1255 | ||
| 1256 | *ipp = ip; | 1256 | *ipp = ip; |
| 1257 | return 0; | 1257 | return 0; |
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 3b544db1790b..233668b748f7 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h | |||
| @@ -509,7 +509,6 @@ extern struct kmem_zone *xfs_chashlist_zone; | |||
| 509 | extern struct kmem_zone *xfs_ifork_zone; | 509 | extern struct kmem_zone *xfs_ifork_zone; |
| 510 | extern struct kmem_zone *xfs_inode_zone; | 510 | extern struct kmem_zone *xfs_inode_zone; |
| 511 | extern struct kmem_zone *xfs_ili_zone; | 511 | extern struct kmem_zone *xfs_ili_zone; |
| 512 | extern struct vnodeops xfs_vnodeops; | ||
| 513 | 512 | ||
| 514 | #endif /* __KERNEL__ */ | 513 | #endif /* __KERNEL__ */ |
| 515 | 514 | ||
diff --git a/fs/xfs/xfs_iocore.c b/fs/xfs/xfs_iocore.c index d3da194f8b7d..89441e69cdde 100644 --- a/fs/xfs/xfs_iocore.c +++ b/fs/xfs/xfs_iocore.c | |||
| @@ -59,7 +59,7 @@ xfs_size_fn( | |||
| 59 | 59 | ||
| 60 | STATIC int | 60 | STATIC int |
| 61 | xfs_ioinit( | 61 | xfs_ioinit( |
| 62 | struct vfs *vfsp, | 62 | struct bhv_vfs *vfsp, |
| 63 | struct xfs_mount_args *mntargs, | 63 | struct xfs_mount_args *mntargs, |
| 64 | int flags) | 64 | int flags) |
| 65 | { | 65 | { |
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 7d882d6c7d49..9f70ab3e0983 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c | |||
| @@ -498,9 +498,8 @@ xfs_log_mount(xfs_mount_t *mp, | |||
| 498 | * just worked. | 498 | * just worked. |
| 499 | */ | 499 | */ |
| 500 | if (!(mp->m_flags & XFS_MOUNT_NORECOVERY)) { | 500 | if (!(mp->m_flags & XFS_MOUNT_NORECOVERY)) { |
| 501 | int error; | 501 | bhv_vfs_t *vfsp = XFS_MTOVFS(mp); |
| 502 | vfs_t *vfsp = XFS_MTOVFS(mp); | 502 | int error, readonly = (vfsp->vfs_flag & VFS_RDONLY); |
| 503 | int readonly = (vfsp->vfs_flag & VFS_RDONLY); | ||
| 504 | 503 | ||
| 505 | if (readonly) | 504 | if (readonly) |
| 506 | vfsp->vfs_flag &= ~VFS_RDONLY; | 505 | vfsp->vfs_flag &= ~VFS_RDONLY; |
| @@ -816,7 +815,7 @@ xfs_log_need_covered(xfs_mount_t *mp) | |||
| 816 | SPLDECL(s); | 815 | SPLDECL(s); |
| 817 | int needed = 0, gen; | 816 | int needed = 0, gen; |
| 818 | xlog_t *log = mp->m_log; | 817 | xlog_t *log = mp->m_log; |
| 819 | vfs_t *vfsp = XFS_MTOVFS(mp); | 818 | bhv_vfs_t *vfsp = XFS_MTOVFS(mp); |
| 820 | 819 | ||
| 821 | if (fs_frozen(vfsp) || XFS_FORCED_SHUTDOWN(mp) || | 820 | if (fs_frozen(vfsp) || XFS_FORCED_SHUTDOWN(mp) || |
| 822 | (vfsp->vfs_flag & VFS_RDONLY)) | 821 | (vfsp->vfs_flag & VFS_RDONLY)) |
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 9378408a69d5..56c4b7e51f4d 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c | |||
| @@ -196,7 +196,7 @@ xfs_mount_free( | |||
| 196 | kmem_free(mp->m_logname, strlen(mp->m_logname) + 1); | 196 | kmem_free(mp->m_logname, strlen(mp->m_logname) + 1); |
| 197 | 197 | ||
| 198 | if (remove_bhv) { | 198 | if (remove_bhv) { |
| 199 | struct vfs *vfsp = XFS_MTOVFS(mp); | 199 | struct bhv_vfs *vfsp = XFS_MTOVFS(mp); |
| 200 | 200 | ||
| 201 | bhv_remove_all_vfsops(vfsp, 0); | 201 | bhv_remove_all_vfsops(vfsp, 0); |
| 202 | VFS_REMOVEBHV(vfsp, &mp->m_bhv); | 202 | VFS_REMOVEBHV(vfsp, &mp->m_bhv); |
| @@ -337,7 +337,7 @@ xfs_mount_validate_sb( | |||
| 337 | 337 | ||
| 338 | xfs_agnumber_t | 338 | xfs_agnumber_t |
| 339 | xfs_initialize_perag( | 339 | xfs_initialize_perag( |
| 340 | struct vfs *vfs, | 340 | bhv_vfs_t *vfs, |
| 341 | xfs_mount_t *mp, | 341 | xfs_mount_t *mp, |
| 342 | xfs_agnumber_t agcount) | 342 | xfs_agnumber_t agcount) |
| 343 | { | 343 | { |
| @@ -651,7 +651,7 @@ xfs_mount_common(xfs_mount_t *mp, xfs_sb_t *sbp) | |||
| 651 | */ | 651 | */ |
| 652 | int | 652 | int |
| 653 | xfs_mountfs( | 653 | xfs_mountfs( |
| 654 | vfs_t *vfsp, | 654 | bhv_vfs_t *vfsp, |
| 655 | xfs_mount_t *mp, | 655 | xfs_mount_t *mp, |
| 656 | int mfsi_flags) | 656 | int mfsi_flags) |
| 657 | { | 657 | { |
| @@ -1095,7 +1095,7 @@ xfs_mountfs( | |||
| 1095 | int | 1095 | int |
| 1096 | xfs_unmountfs(xfs_mount_t *mp, struct cred *cr) | 1096 | xfs_unmountfs(xfs_mount_t *mp, struct cred *cr) |
| 1097 | { | 1097 | { |
| 1098 | struct vfs *vfsp = XFS_MTOVFS(mp); | 1098 | struct bhv_vfs *vfsp = XFS_MTOVFS(mp); |
| 1099 | #if defined(DEBUG) || defined(INDUCE_IO_ERROR) | 1099 | #if defined(DEBUG) || defined(INDUCE_IO_ERROR) |
| 1100 | int64_t fsid; | 1100 | int64_t fsid; |
| 1101 | #endif | 1101 | #endif |
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 2ca211214a9c..7e612255f530 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h | |||
| @@ -53,7 +53,7 @@ typedef struct xfs_trans_reservations { | |||
| 53 | #else | 53 | #else |
| 54 | struct cred; | 54 | struct cred; |
| 55 | struct log; | 55 | struct log; |
| 56 | struct vfs; | 56 | struct bhv_vfs; |
| 57 | struct vnode; | 57 | struct vnode; |
| 58 | struct xfs_mount_args; | 58 | struct xfs_mount_args; |
| 59 | struct xfs_ihash; | 59 | struct xfs_ihash; |
| @@ -66,7 +66,7 @@ struct xfs_bmap_free; | |||
| 66 | struct xfs_extdelta; | 66 | struct xfs_extdelta; |
| 67 | struct xfs_swapext; | 67 | struct xfs_swapext; |
| 68 | 68 | ||
| 69 | extern struct vfsops xfs_vfsops; | 69 | extern struct bhv_vfsops xfs_vfsops; |
| 70 | extern struct vnodeops xfs_vnodeops; | 70 | extern struct vnodeops xfs_vnodeops; |
| 71 | 71 | ||
| 72 | #define AIL_LOCK_T lock_t | 72 | #define AIL_LOCK_T lock_t |
| @@ -84,11 +84,11 @@ typedef int (*xfs_send_data_t)(int, struct vnode *, | |||
| 84 | xfs_off_t, size_t, int, vrwlock_t *); | 84 | xfs_off_t, size_t, int, vrwlock_t *); |
| 85 | typedef int (*xfs_send_mmap_t)(struct vm_area_struct *, uint); | 85 | typedef int (*xfs_send_mmap_t)(struct vm_area_struct *, uint); |
| 86 | typedef int (*xfs_send_destroy_t)(struct vnode *, dm_right_t); | 86 | typedef int (*xfs_send_destroy_t)(struct vnode *, dm_right_t); |
| 87 | typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct vfs *, | 87 | typedef int (*xfs_send_namesp_t)(dm_eventtype_t, struct bhv_vfs *, |
| 88 | struct vnode *, | 88 | struct vnode *, |
| 89 | dm_right_t, struct vnode *, dm_right_t, | 89 | dm_right_t, struct vnode *, dm_right_t, |
| 90 | char *, char *, mode_t, int, int); | 90 | char *, char *, mode_t, int, int); |
| 91 | typedef void (*xfs_send_unmount_t)(struct vfs *, struct vnode *, | 91 | typedef void (*xfs_send_unmount_t)(struct bhv_vfs *, struct vnode *, |
| 92 | dm_right_t, mode_t, int, int); | 92 | dm_right_t, mode_t, int, int); |
| 93 | 93 | ||
| 94 | typedef struct xfs_dmops { | 94 | typedef struct xfs_dmops { |
| @@ -190,7 +190,7 @@ typedef struct xfs_qmops { | |||
| 190 | * Prototypes and functions for I/O core modularization. | 190 | * Prototypes and functions for I/O core modularization. |
| 191 | */ | 191 | */ |
| 192 | 192 | ||
| 193 | typedef int (*xfs_ioinit_t)(struct vfs *, | 193 | typedef int (*xfs_ioinit_t)(struct bhv_vfs *, |
| 194 | struct xfs_mount_args *, int); | 194 | struct xfs_mount_args *, int); |
| 195 | typedef int (*xfs_bmapi_t)(struct xfs_trans *, void *, | 195 | typedef int (*xfs_bmapi_t)(struct xfs_trans *, void *, |
| 196 | xfs_fileoff_t, xfs_filblks_t, int, | 196 | xfs_fileoff_t, xfs_filblks_t, int, |
| @@ -220,7 +220,7 @@ typedef void (*xfs_lock_demote_t)(void *, uint); | |||
| 220 | typedef int (*xfs_lock_nowait_t)(void *, uint); | 220 | typedef int (*xfs_lock_nowait_t)(void *, uint); |
| 221 | typedef void (*xfs_unlk_t)(void *, unsigned int); | 221 | typedef void (*xfs_unlk_t)(void *, unsigned int); |
| 222 | typedef xfs_fsize_t (*xfs_size_t)(void *); | 222 | typedef xfs_fsize_t (*xfs_size_t)(void *); |
| 223 | typedef xfs_fsize_t (*xfs_iodone_t)(struct vfs *); | 223 | typedef xfs_fsize_t (*xfs_iodone_t)(struct bhv_vfs *); |
| 224 | typedef int (*xfs_swap_extents_t)(void *, void *, | 224 | typedef int (*xfs_swap_extents_t)(void *, void *, |
| 225 | struct xfs_swapext*); | 225 | struct xfs_swapext*); |
| 226 | 226 | ||
| @@ -511,7 +511,7 @@ xfs_preferred_iosize(xfs_mount_t *mp) | |||
| 511 | 511 | ||
| 512 | #define XFS_FORCED_SHUTDOWN(mp) ((mp)->m_flags & XFS_MOUNT_FS_SHUTDOWN) | 512 | #define XFS_FORCED_SHUTDOWN(mp) ((mp)->m_flags & XFS_MOUNT_FS_SHUTDOWN) |
| 513 | #define xfs_force_shutdown(m,f) \ | 513 | #define xfs_force_shutdown(m,f) \ |
| 514 | VFS_FORCE_SHUTDOWN((XFS_MTOVFS(m)), f, __FILE__, __LINE__) | 514 | bhv_vfs_force_shutdown((XFS_MTOVFS(m)), f, __FILE__, __LINE__) |
| 515 | 515 | ||
| 516 | /* | 516 | /* |
| 517 | * Flags for xfs_mountfs | 517 | * Flags for xfs_mountfs |
| @@ -529,7 +529,7 @@ xfs_preferred_iosize(xfs_mount_t *mp) | |||
| 529 | * Macros for getting from mount to vfs and back. | 529 | * Macros for getting from mount to vfs and back. |
| 530 | */ | 530 | */ |
| 531 | #define XFS_MTOVFS(mp) xfs_mtovfs(mp) | 531 | #define XFS_MTOVFS(mp) xfs_mtovfs(mp) |
| 532 | static inline struct vfs *xfs_mtovfs(xfs_mount_t *mp) | 532 | static inline struct bhv_vfs *xfs_mtovfs(xfs_mount_t *mp) |
| 533 | { | 533 | { |
| 534 | return bhvtovfs(&mp->m_bhv); | 534 | return bhvtovfs(&mp->m_bhv); |
| 535 | } | 535 | } |
| @@ -541,7 +541,7 @@ static inline xfs_mount_t *xfs_bhvtom(bhv_desc_t *bdp) | |||
| 541 | } | 541 | } |
| 542 | 542 | ||
| 543 | #define XFS_VFSTOM(vfs) xfs_vfstom(vfs) | 543 | #define XFS_VFSTOM(vfs) xfs_vfstom(vfs) |
| 544 | static inline xfs_mount_t *xfs_vfstom(vfs_t *vfs) | 544 | static inline xfs_mount_t *xfs_vfstom(bhv_vfs_t *vfs) |
| 545 | { | 545 | { |
| 546 | return XFS_BHVTOM(bhv_lookup(VFS_BHVHEAD(vfs), &xfs_vfsops)); | 546 | return XFS_BHVTOM(bhv_lookup(VFS_BHVHEAD(vfs), &xfs_vfsops)); |
| 547 | } | 547 | } |
| @@ -579,7 +579,7 @@ typedef struct xfs_mod_sb { | |||
| 579 | extern xfs_mount_t *xfs_mount_init(void); | 579 | extern xfs_mount_t *xfs_mount_init(void); |
| 580 | extern void xfs_mod_sb(xfs_trans_t *, __int64_t); | 580 | extern void xfs_mod_sb(xfs_trans_t *, __int64_t); |
| 581 | extern void xfs_mount_free(xfs_mount_t *mp, int remove_bhv); | 581 | extern void xfs_mount_free(xfs_mount_t *mp, int remove_bhv); |
| 582 | extern int xfs_mountfs(struct vfs *, xfs_mount_t *mp, int); | 582 | extern int xfs_mountfs(struct bhv_vfs *, xfs_mount_t *mp, int); |
| 583 | extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); | 583 | extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); |
| 584 | 584 | ||
| 585 | extern int xfs_unmountfs(xfs_mount_t *, struct cred *); | 585 | extern int xfs_unmountfs(xfs_mount_t *, struct cred *); |
| @@ -597,7 +597,7 @@ extern void xfs_freesb(xfs_mount_t *); | |||
| 597 | extern void xfs_do_force_shutdown(bhv_desc_t *, int, char *, int); | 597 | extern void xfs_do_force_shutdown(bhv_desc_t *, int, char *, int); |
| 598 | extern int xfs_syncsub(xfs_mount_t *, int, int, int *); | 598 | extern int xfs_syncsub(xfs_mount_t *, int, int, int *); |
| 599 | extern int xfs_sync_inodes(xfs_mount_t *, int, int, int *); | 599 | extern int xfs_sync_inodes(xfs_mount_t *, int, int, int *); |
| 600 | extern xfs_agnumber_t xfs_initialize_perag(struct vfs *, xfs_mount_t *, | 600 | extern xfs_agnumber_t xfs_initialize_perag(struct bhv_vfs *, xfs_mount_t *, |
| 601 | xfs_agnumber_t); | 601 | xfs_agnumber_t); |
| 602 | extern void xfs_xlatesb(void *, struct xfs_sb *, int, __int64_t); | 602 | extern void xfs_xlatesb(void *, struct xfs_sb *, int, __int64_t); |
| 603 | 603 | ||
diff --git a/fs/xfs/xfs_quota.h b/fs/xfs/xfs_quota.h index 7fbef974bce6..acb853b33ebb 100644 --- a/fs/xfs/xfs_quota.h +++ b/fs/xfs/xfs_quota.h | |||
| @@ -365,7 +365,7 @@ typedef struct xfs_dqtrxops { | |||
| 365 | extern int xfs_qm_dqcheck(xfs_disk_dquot_t *, xfs_dqid_t, uint, uint, char *); | 365 | extern int xfs_qm_dqcheck(xfs_disk_dquot_t *, xfs_dqid_t, uint, uint, char *); |
| 366 | extern int xfs_mount_reset_sbqflags(struct xfs_mount *); | 366 | extern int xfs_mount_reset_sbqflags(struct xfs_mount *); |
| 367 | 367 | ||
| 368 | extern struct bhv_vfsops xfs_qmops; | 368 | extern struct bhv_module_vfsops xfs_qmops; |
| 369 | 369 | ||
| 370 | #endif /* __KERNEL__ */ | 370 | #endif /* __KERNEL__ */ |
| 371 | 371 | ||
diff --git a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c index ec85a2e24b52..57ee2bebd248 100644 --- a/fs/xfs/xfs_vfsops.c +++ b/fs/xfs/xfs_vfsops.c | |||
| @@ -212,7 +212,7 @@ xfs_cleanup(void) | |||
| 212 | */ | 212 | */ |
| 213 | STATIC int | 213 | STATIC int |
| 214 | xfs_start_flags( | 214 | xfs_start_flags( |
| 215 | struct vfs *vfs, | 215 | struct bhv_vfs *vfs, |
| 216 | struct xfs_mount_args *ap, | 216 | struct xfs_mount_args *ap, |
| 217 | struct xfs_mount *mp) | 217 | struct xfs_mount *mp) |
| 218 | { | 218 | { |
| @@ -337,7 +337,7 @@ xfs_start_flags( | |||
| 337 | */ | 337 | */ |
| 338 | STATIC int | 338 | STATIC int |
| 339 | xfs_finish_flags( | 339 | xfs_finish_flags( |
| 340 | struct vfs *vfs, | 340 | struct bhv_vfs *vfs, |
| 341 | struct xfs_mount_args *ap, | 341 | struct xfs_mount_args *ap, |
| 342 | struct xfs_mount *mp) | 342 | struct xfs_mount *mp) |
| 343 | { | 343 | { |
| @@ -423,7 +423,7 @@ xfs_mount( | |||
| 423 | struct xfs_mount_args *args, | 423 | struct xfs_mount_args *args, |
| 424 | cred_t *credp) | 424 | cred_t *credp) |
| 425 | { | 425 | { |
| 426 | struct vfs *vfsp = bhvtovfs(bhvp); | 426 | struct bhv_vfs *vfsp = bhvtovfs(bhvp); |
| 427 | struct bhv_desc *p; | 427 | struct bhv_desc *p; |
| 428 | struct xfs_mount *mp = XFS_BHVTOM(bhvp); | 428 | struct xfs_mount *mp = XFS_BHVTOM(bhvp); |
| 429 | struct block_device *ddev, *logdev, *rtdev; | 429 | struct block_device *ddev, *logdev, *rtdev; |
| @@ -552,7 +552,7 @@ xfs_unmount( | |||
| 552 | int flags, | 552 | int flags, |
| 553 | cred_t *credp) | 553 | cred_t *credp) |
| 554 | { | 554 | { |
| 555 | struct vfs *vfsp = bhvtovfs(bdp); | 555 | bhv_vfs_t *vfsp = bhvtovfs(bdp); |
| 556 | xfs_mount_t *mp = XFS_BHVTOM(bdp); | 556 | xfs_mount_t *mp = XFS_BHVTOM(bdp); |
| 557 | xfs_inode_t *rip; | 557 | xfs_inode_t *rip; |
| 558 | vnode_t *rvp; | 558 | vnode_t *rvp; |
| @@ -665,9 +665,8 @@ xfs_mntupdate( | |||
| 665 | int *flags, | 665 | int *flags, |
| 666 | struct xfs_mount_args *args) | 666 | struct xfs_mount_args *args) |
| 667 | { | 667 | { |
| 668 | struct vfs *vfsp = bhvtovfs(bdp); | 668 | bhv_vfs_t *vfsp = bhvtovfs(bdp); |
| 669 | xfs_mount_t *mp = XFS_BHVTOM(bdp); | 669 | xfs_mount_t *mp = XFS_BHVTOM(bdp); |
| 670 | int error; | ||
| 671 | 670 | ||
| 672 | if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */ | 671 | if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */ |
| 673 | if (vfsp->vfs_flag & VFS_RDONLY) | 672 | if (vfsp->vfs_flag & VFS_RDONLY) |
| @@ -679,7 +678,7 @@ xfs_mntupdate( | |||
| 679 | mp->m_flags &= ~XFS_MOUNT_BARRIER; | 678 | mp->m_flags &= ~XFS_MOUNT_BARRIER; |
| 680 | } | 679 | } |
| 681 | } else if (!(vfsp->vfs_flag & VFS_RDONLY)) { /* rw -> ro */ | 680 | } else if (!(vfsp->vfs_flag & VFS_RDONLY)) { /* rw -> ro */ |
| 682 | VFS_SYNC(vfsp, SYNC_FSDATA|SYNC_BDFLUSH|SYNC_ATTR, NULL, error); | 681 | bhv_vfs_sync(vfsp, SYNC_FSDATA|SYNC_BDFLUSH|SYNC_ATTR, NULL); |
| 683 | xfs_quiesce_fs(mp); | 682 | xfs_quiesce_fs(mp); |
| 684 | xfs_log_unmount_write(mp); | 683 | xfs_log_unmount_write(mp); |
| 685 | xfs_unmountfs_writesb(mp); | 684 | xfs_unmountfs_writesb(mp); |
| @@ -900,7 +899,7 @@ xfs_sync( | |||
| 900 | /* | 899 | /* |
| 901 | * xfs sync routine for internal use | 900 | * xfs sync routine for internal use |
| 902 | * | 901 | * |
| 903 | * This routine supports all of the flags defined for the generic VFS_SYNC | 902 | * This routine supports all of the flags defined for the generic vfs_sync |
| 904 | * interface as explained above under xfs_sync. In the interests of not | 903 | * interface as explained above under xfs_sync. In the interests of not |
| 905 | * changing interfaces within the 6.5 family, additional internally- | 904 | * changing interfaces within the 6.5 family, additional internally- |
| 906 | * required functions are specified within a separate xflags parameter, | 905 | * required functions are specified within a separate xflags parameter, |
| @@ -1421,7 +1420,7 @@ xfs_sync_inodes( | |||
| 1421 | /* | 1420 | /* |
| 1422 | * xfs sync routine for internal use | 1421 | * xfs sync routine for internal use |
| 1423 | * | 1422 | * |
| 1424 | * This routine supports all of the flags defined for the generic VFS_SYNC | 1423 | * This routine supports all of the flags defined for the generic vfs_sync |
| 1425 | * interface as explained above under xfs_sync. In the interests of not | 1424 | * interface as explained above under xfs_sync. In the interests of not |
| 1426 | * changing interfaces within the 6.5 family, additional internally- | 1425 | * changing interfaces within the 6.5 family, additional internally- |
| 1427 | * required functions are specified within a separate xflags parameter, | 1426 | * required functions are specified within a separate xflags parameter, |
| @@ -1686,7 +1685,7 @@ xfs_parseargs( | |||
| 1686 | struct xfs_mount_args *args, | 1685 | struct xfs_mount_args *args, |
| 1687 | int update) | 1686 | int update) |
| 1688 | { | 1687 | { |
| 1689 | struct vfs *vfsp = bhvtovfs(bhv); | 1688 | bhv_vfs_t *vfsp = bhvtovfs(bhv); |
| 1690 | char *this_char, *value, *eov; | 1689 | char *this_char, *value, *eov; |
| 1691 | int dsunit, dswidth, vol_dsunit, vol_dswidth; | 1690 | int dsunit, dswidth, vol_dsunit, vol_dswidth; |
| 1692 | int iosize; | 1691 | int iosize; |
| @@ -1924,7 +1923,7 @@ xfs_showargs( | |||
| 1924 | }; | 1923 | }; |
| 1925 | struct proc_xfs_info *xfs_infop; | 1924 | struct proc_xfs_info *xfs_infop; |
| 1926 | struct xfs_mount *mp = XFS_BHVTOM(bhv); | 1925 | struct xfs_mount *mp = XFS_BHVTOM(bhv); |
| 1927 | struct vfs *vfsp = XFS_MTOVFS(mp); | 1926 | struct bhv_vfs *vfsp = XFS_MTOVFS(mp); |
| 1928 | 1927 | ||
| 1929 | for (xfs_infop = xfs_info; xfs_infop->flag; xfs_infop++) { | 1928 | for (xfs_infop = xfs_info; xfs_infop->flag; xfs_infop++) { |
| 1930 | if (mp->m_flags & xfs_infop->flag) | 1929 | if (mp->m_flags & xfs_infop->flag) |
| @@ -1984,7 +1983,7 @@ xfs_freeze( | |||
| 1984 | } | 1983 | } |
| 1985 | 1984 | ||
| 1986 | 1985 | ||
| 1987 | vfsops_t xfs_vfsops = { | 1986 | bhv_vfsops_t xfs_vfsops = { |
| 1988 | BHV_IDENTITY_INIT(VFS_BHV_XFS,VFS_POSITION_XFS), | 1987 | BHV_IDENTITY_INIT(VFS_BHV_XFS,VFS_POSITION_XFS), |
| 1989 | .vfs_parseargs = xfs_parseargs, | 1988 | .vfs_parseargs = xfs_parseargs, |
| 1990 | .vfs_showargs = xfs_showargs, | 1989 | .vfs_showargs = xfs_showargs, |
