diff options
| author | Christoph Hellwig <hch@infradead.org> | 2012-02-19 21:28:16 -0500 |
|---|---|---|
| committer | Ben Myers <bpm@sgi.com> | 2012-02-29 12:57:36 -0500 |
| commit | 18535a7e019e6fb9cdcefd43007bc72a67bf99ee (patch) | |
| tree | 4ba178dbe89f1af932f1b447981490216448d08f | |
| parent | ad637a10f444fc66b1f6d4a28fe30d4c61ed0161 (diff) | |
xfs: merge xfs_qm_export_dquot into xfs_qm_scall_getquota
The is no good reason to have these two separate, and for the next change
we would need the full struct xfs_dquot in xfs_qm_export_dquot, so better
just fold the code now instead of changing it spuriously.
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Ben Myers <bpm@sgi.com>
| -rw-r--r-- | fs/xfs/xfs_qm_syscalls.c | 118 |
1 files changed, 49 insertions, 69 deletions
diff --git a/fs/xfs/xfs_qm_syscalls.c b/fs/xfs/xfs_qm_syscalls.c index 711a86e39ff..2b85641f33c 100644 --- a/fs/xfs/xfs_qm_syscalls.c +++ b/fs/xfs/xfs_qm_syscalls.c | |||
| @@ -47,9 +47,6 @@ STATIC int xfs_qm_log_quotaoff_end(xfs_mount_t *, xfs_qoff_logitem_t *, | |||
| 47 | uint); | 47 | uint); |
| 48 | STATIC uint xfs_qm_export_flags(uint); | 48 | STATIC uint xfs_qm_export_flags(uint); |
| 49 | STATIC uint xfs_qm_export_qtype_flags(uint); | 49 | STATIC uint xfs_qm_export_qtype_flags(uint); |
| 50 | STATIC void xfs_qm_export_dquot(xfs_mount_t *, xfs_disk_dquot_t *, | ||
| 51 | fs_disk_quota_t *); | ||
| 52 | |||
| 53 | 50 | ||
| 54 | /* | 51 | /* |
| 55 | * Turn off quota accounting and/or enforcement for all udquots and/or | 52 | * Turn off quota accounting and/or enforcement for all udquots and/or |
| @@ -635,42 +632,6 @@ xfs_qm_scall_setqlim( | |||
| 635 | return error; | 632 | return error; |
| 636 | } | 633 | } |
| 637 | 634 | ||
| 638 | int | ||
| 639 | xfs_qm_scall_getquota( | ||
| 640 | xfs_mount_t *mp, | ||
| 641 | xfs_dqid_t id, | ||
| 642 | uint type, | ||
| 643 | fs_disk_quota_t *out) | ||
| 644 | { | ||
| 645 | xfs_dquot_t *dqp; | ||
| 646 | int error; | ||
| 647 | |||
| 648 | /* | ||
| 649 | * Try to get the dquot. We don't want it allocated on disk, so | ||
| 650 | * we aren't passing the XFS_QMOPT_DOALLOC flag. If it doesn't | ||
| 651 | * exist, we'll get ENOENT back. | ||
| 652 | */ | ||
| 653 | if ((error = xfs_qm_dqget(mp, NULL, id, type, 0, &dqp))) { | ||
| 654 | return (error); | ||
| 655 | } | ||
| 656 | |||
| 657 | /* | ||
| 658 | * If everything's NULL, this dquot doesn't quite exist as far as | ||
| 659 | * our utility programs are concerned. | ||
| 660 | */ | ||
| 661 | if (XFS_IS_DQUOT_UNINITIALIZED(dqp)) { | ||
| 662 | xfs_qm_dqput(dqp); | ||
| 663 | return XFS_ERROR(ENOENT); | ||
| 664 | } | ||
| 665 | /* | ||
| 666 | * Convert the disk dquot to the exportable format | ||
| 667 | */ | ||
| 668 | xfs_qm_export_dquot(mp, &dqp->q_core, out); | ||
| 669 | xfs_qm_dqput(dqp); | ||
| 670 | return (error ? XFS_ERROR(EFAULT) : 0); | ||
| 671 | } | ||
| 672 | |||
| 673 | |||
| 674 | STATIC int | 635 | STATIC int |
| 675 | xfs_qm_log_quotaoff_end( | 636 | xfs_qm_log_quotaoff_end( |
| 676 | xfs_mount_t *mp, | 637 | xfs_mount_t *mp, |
| @@ -759,50 +720,66 @@ error0: | |||
| 759 | } | 720 | } |
| 760 | 721 | ||
| 761 | 722 | ||
| 762 | /* | 723 | int |
| 763 | * Translate an internal style on-disk-dquot to the exportable format. | 724 | xfs_qm_scall_getquota( |
| 764 | * The main differences are that the counters/limits are all in Basic | 725 | struct xfs_mount *mp, |
| 765 | * Blocks (BBs) instead of the internal FSBs, and all on-disk data has | 726 | xfs_dqid_t id, |
| 766 | * to be converted to the native endianness. | 727 | uint type, |
| 767 | */ | ||
| 768 | STATIC void | ||
| 769 | xfs_qm_export_dquot( | ||
| 770 | xfs_mount_t *mp, | ||
| 771 | xfs_disk_dquot_t *src, | ||
| 772 | struct fs_disk_quota *dst) | 728 | struct fs_disk_quota *dst) |
| 773 | { | 729 | { |
| 730 | struct xfs_dquot *dqp; | ||
| 731 | int error; | ||
| 732 | |||
| 733 | /* | ||
| 734 | * Try to get the dquot. We don't want it allocated on disk, so | ||
| 735 | * we aren't passing the XFS_QMOPT_DOALLOC flag. If it doesn't | ||
| 736 | * exist, we'll get ENOENT back. | ||
| 737 | */ | ||
| 738 | error = xfs_qm_dqget(mp, NULL, id, type, 0, &dqp); | ||
| 739 | if (error) | ||
| 740 | return error; | ||
| 741 | |||
| 742 | /* | ||
| 743 | * If everything's NULL, this dquot doesn't quite exist as far as | ||
| 744 | * our utility programs are concerned. | ||
| 745 | */ | ||
| 746 | if (XFS_IS_DQUOT_UNINITIALIZED(dqp)) { | ||
| 747 | error = XFS_ERROR(ENOENT); | ||
| 748 | goto out_put; | ||
| 749 | } | ||
| 750 | |||
| 774 | memset(dst, 0, sizeof(*dst)); | 751 | memset(dst, 0, sizeof(*dst)); |
| 775 | dst->d_version = FS_DQUOT_VERSION; /* different from src->d_version */ | 752 | dst->d_version = FS_DQUOT_VERSION; |
| 776 | dst->d_flags = xfs_qm_export_qtype_flags(src->d_flags); | 753 | dst->d_flags = xfs_qm_export_qtype_flags(dqp->q_core.d_flags); |
| 777 | dst->d_id = be32_to_cpu(src->d_id); | 754 | dst->d_id = be32_to_cpu(dqp->q_core.d_id); |
| 778 | dst->d_blk_hardlimit = | 755 | dst->d_blk_hardlimit = |
| 779 | XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_blk_hardlimit)); | 756 | XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_blk_hardlimit)); |
| 780 | dst->d_blk_softlimit = | 757 | dst->d_blk_softlimit = |
| 781 | XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_blk_softlimit)); | 758 | XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_blk_softlimit)); |
| 782 | dst->d_ino_hardlimit = be64_to_cpu(src->d_ino_hardlimit); | 759 | dst->d_ino_hardlimit = be64_to_cpu(dqp->q_core.d_ino_hardlimit); |
| 783 | dst->d_ino_softlimit = be64_to_cpu(src->d_ino_softlimit); | 760 | dst->d_ino_softlimit = be64_to_cpu(dqp->q_core.d_ino_softlimit); |
| 784 | dst->d_bcount = XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_bcount)); | 761 | dst->d_bcount = XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_bcount)); |
| 785 | dst->d_icount = be64_to_cpu(src->d_icount); | 762 | dst->d_icount = be64_to_cpu(dqp->q_core.d_icount); |
| 786 | dst->d_btimer = be32_to_cpu(src->d_btimer); | 763 | dst->d_btimer = be32_to_cpu(dqp->q_core.d_btimer); |
| 787 | dst->d_itimer = be32_to_cpu(src->d_itimer); | 764 | dst->d_itimer = be32_to_cpu(dqp->q_core.d_itimer); |
| 788 | dst->d_iwarns = be16_to_cpu(src->d_iwarns); | 765 | dst->d_iwarns = be16_to_cpu(dqp->q_core.d_iwarns); |
| 789 | dst->d_bwarns = be16_to_cpu(src->d_bwarns); | 766 | dst->d_bwarns = be16_to_cpu(dqp->q_core.d_bwarns); |
| 790 | dst->d_rtb_hardlimit = | 767 | dst->d_rtb_hardlimit = |
| 791 | XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_rtb_hardlimit)); | 768 | XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtb_hardlimit)); |
| 792 | dst->d_rtb_softlimit = | 769 | dst->d_rtb_softlimit = |
| 793 | XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_rtb_softlimit)); | 770 | XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtb_softlimit)); |
| 794 | dst->d_rtbcount = XFS_FSB_TO_BB(mp, be64_to_cpu(src->d_rtbcount)); | 771 | dst->d_rtbcount = XFS_FSB_TO_BB(mp, be64_to_cpu(dqp->q_core.d_rtbcount)); |
| 795 | dst->d_rtbtimer = be32_to_cpu(src->d_rtbtimer); | 772 | dst->d_rtbtimer = be32_to_cpu(dqp->q_core.d_rtbtimer); |
| 796 | dst->d_rtbwarns = be16_to_cpu(src->d_rtbwarns); | 773 | dst->d_rtbwarns = be16_to_cpu(dqp->q_core.d_rtbwarns); |
| 797 | 774 | ||
| 798 | /* | 775 | /* |
| 799 | * Internally, we don't reset all the timers when quota enforcement | 776 | * Internally, we don't reset all the timers when quota enforcement |
| 800 | * gets turned off. No need to confuse the user level code, | 777 | * gets turned off. No need to confuse the user level code, |
| 801 | * so return zeroes in that case. | 778 | * so return zeroes in that case. |
| 802 | */ | 779 | */ |
| 803 | if ((!XFS_IS_UQUOTA_ENFORCED(mp) && src->d_flags == XFS_DQ_USER) || | 780 | if ((!XFS_IS_UQUOTA_ENFORCED(mp) && dqp->q_core.d_flags == XFS_DQ_USER) || |
| 804 | (!XFS_IS_OQUOTA_ENFORCED(mp) && | 781 | (!XFS_IS_OQUOTA_ENFORCED(mp) && |
| 805 | (src->d_flags & (XFS_DQ_PROJ | XFS_DQ_GROUP)))) { | 782 | (dqp->q_core.d_flags & (XFS_DQ_PROJ | XFS_DQ_GROUP)))) { |
| 806 | dst->d_btimer = 0; | 783 | dst->d_btimer = 0; |
| 807 | dst->d_itimer = 0; | 784 | dst->d_itimer = 0; |
| 808 | dst->d_rtbtimer = 0; | 785 | dst->d_rtbtimer = 0; |
| @@ -823,6 +800,9 @@ xfs_qm_export_dquot( | |||
| 823 | } | 800 | } |
| 824 | } | 801 | } |
| 825 | #endif | 802 | #endif |
| 803 | out_put: | ||
| 804 | xfs_qm_dqput(dqp); | ||
| 805 | return error; | ||
| 826 | } | 806 | } |
| 827 | 807 | ||
| 828 | STATIC uint | 808 | STATIC uint |
