]> err.no Git - linux-2.6/commitdiff
[XFS] fix nasty quota hashtable allocation bug
authorEric Sandeen <sandeen@sandeen.net>
Thu, 16 Aug 2007 06:49:11 +0000 (16:49 +1000)
committerTim Shimmin <tes@chook.melbourne.sgi.com>
Wed, 5 Sep 2007 04:51:04 +0000 (14:51 +1000)
This git mod: 77e4635ae191774526ed695482a151ac986f3806
converted to a "greedy" allocation interface, but for the quota hashtables
it switched from allocating XFS_QM_HASHSIZE (nr of elements)
xfs_dqhash_t's to allocating only XFS_QM_HASHSIZE *bytes* - quite a lot
smaller! Then when we converted hsize "back" to nr of elements (the
division line) hsize went to 0. This was leading to oopses when running
any quota tests on the Fedora 8 test kernel, but the problem has been
there for almost a year.

SGI-PV: 968837
SGI-Modid: xfs-linux-melb:xfs-kern:29354a

Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Signed-off-by: David Chinner <dgc@sgi.com>
Signed-off-by: Tim Shimmin <tes@sgi.com>
fs/xfs/quota/xfs_qm.c

index 2d274b23ade51aeebf552cc0f17c81f38b9700ba..6ff0f4de1630cb40665950393fb264e483636cc5 100644 (file)
@@ -120,7 +120,8 @@ xfs_Gqm_init(void)
         * Initialize the dquot hash tables.
         */
        udqhash = kmem_zalloc_greedy(&hsize,
-                                    XFS_QM_HASHSIZE_LOW, XFS_QM_HASHSIZE_HIGH,
+                                    XFS_QM_HASHSIZE_LOW * sizeof(xfs_dqhash_t),
+                                    XFS_QM_HASHSIZE_HIGH * sizeof(xfs_dqhash_t),
                                     KM_SLEEP | KM_MAYFAIL | KM_LARGE);
        gdqhash = kmem_zalloc(hsize, KM_SLEEP | KM_LARGE);
        hsize /= sizeof(xfs_dqhash_t);