diff options
| author | Dave Chinner <dchinner@redhat.com> | 2014-05-14 19:23:24 -0400 |
|---|---|---|
| committer | Dave Chinner <david@fromorbit.com> | 2014-05-14 19:23:24 -0400 |
| commit | ee4eec478be4677b93775d17bc079efb5922b276 (patch) | |
| tree | 865161426c69996ee867044c560bcf4052aa2056 | |
| parent | bc147822d5ada188fff792691efffe89589e2e19 (diff) | |
xfs: list_lru_init returns a negative error
And we don't invert it properly when initialising the dquot lru
list.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Jie Liu <jeff.liu@oracle.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
| -rw-r--r-- | fs/xfs/xfs_qm.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c index 348e4d2ed6e6..dc977b6e6a36 100644 --- a/fs/xfs/xfs_qm.c +++ b/fs/xfs/xfs_qm.c | |||
| @@ -843,22 +843,17 @@ xfs_qm_init_quotainfo( | |||
| 843 | 843 | ||
| 844 | qinf = mp->m_quotainfo = kmem_zalloc(sizeof(xfs_quotainfo_t), KM_SLEEP); | 844 | qinf = mp->m_quotainfo = kmem_zalloc(sizeof(xfs_quotainfo_t), KM_SLEEP); |
| 845 | 845 | ||
| 846 | if ((error = list_lru_init(&qinf->qi_lru))) { | 846 | error = -list_lru_init(&qinf->qi_lru); |
| 847 | kmem_free(qinf); | 847 | if (error) |
| 848 | mp->m_quotainfo = NULL; | 848 | goto out_free_qinf; |
| 849 | return error; | ||
| 850 | } | ||
| 851 | 849 | ||
| 852 | /* | 850 | /* |
| 853 | * See if quotainodes are setup, and if not, allocate them, | 851 | * See if quotainodes are setup, and if not, allocate them, |
| 854 | * and change the superblock accordingly. | 852 | * and change the superblock accordingly. |
| 855 | */ | 853 | */ |
| 856 | if ((error = xfs_qm_init_quotainos(mp))) { | 854 | error = xfs_qm_init_quotainos(mp); |
| 857 | list_lru_destroy(&qinf->qi_lru); | 855 | if (error) |
| 858 | kmem_free(qinf); | 856 | goto out_free_lru; |
| 859 | mp->m_quotainfo = NULL; | ||
| 860 | return error; | ||
| 861 | } | ||
| 862 | 857 | ||
| 863 | INIT_RADIX_TREE(&qinf->qi_uquota_tree, GFP_NOFS); | 858 | INIT_RADIX_TREE(&qinf->qi_uquota_tree, GFP_NOFS); |
| 864 | INIT_RADIX_TREE(&qinf->qi_gquota_tree, GFP_NOFS); | 859 | INIT_RADIX_TREE(&qinf->qi_gquota_tree, GFP_NOFS); |
| @@ -918,7 +913,7 @@ xfs_qm_init_quotainfo( | |||
| 918 | qinf->qi_isoftlimit = be64_to_cpu(ddqp->d_ino_softlimit); | 913 | qinf->qi_isoftlimit = be64_to_cpu(ddqp->d_ino_softlimit); |
| 919 | qinf->qi_rtbhardlimit = be64_to_cpu(ddqp->d_rtb_hardlimit); | 914 | qinf->qi_rtbhardlimit = be64_to_cpu(ddqp->d_rtb_hardlimit); |
| 920 | qinf->qi_rtbsoftlimit = be64_to_cpu(ddqp->d_rtb_softlimit); | 915 | qinf->qi_rtbsoftlimit = be64_to_cpu(ddqp->d_rtb_softlimit); |
| 921 | 916 | ||
| 922 | xfs_qm_dqdestroy(dqp); | 917 | xfs_qm_dqdestroy(dqp); |
| 923 | } else { | 918 | } else { |
| 924 | qinf->qi_btimelimit = XFS_QM_BTIMELIMIT; | 919 | qinf->qi_btimelimit = XFS_QM_BTIMELIMIT; |
| @@ -935,6 +930,13 @@ xfs_qm_init_quotainfo( | |||
| 935 | qinf->qi_shrinker.flags = SHRINKER_NUMA_AWARE; | 930 | qinf->qi_shrinker.flags = SHRINKER_NUMA_AWARE; |
| 936 | register_shrinker(&qinf->qi_shrinker); | 931 | register_shrinker(&qinf->qi_shrinker); |
| 937 | return 0; | 932 | return 0; |
| 933 | |||
| 934 | out_free_lru: | ||
| 935 | list_lru_destroy(&qinf->qi_lru); | ||
| 936 | out_free_qinf: | ||
| 937 | kmem_free(qinf); | ||
| 938 | mp->m_quotainfo = NULL; | ||
| 939 | return error; | ||
| 938 | } | 940 | } |
| 939 | 941 | ||
| 940 | 942 | ||
