]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
libxfs: work around do_div() not handling 32 bit numerators
authorDave Chinner <dchinner@redhat.com>
Wed, 13 Nov 2013 06:40:54 +0000 (06:40 +0000)
committerRich Johnston <rjohnston@sgi.com>
Wed, 13 Nov 2013 17:17:05 +0000 (11:17 -0600)
The libxfs dquot buffer code uses do_div() with a 32 bit numerator.
This gives incorrect results as do_div() passes the numerator by
reference as a pointer to a 64 bit value. Hence it does the division
using 32 bits of garbage gives the wrong result.

As per Christoph's suggestion, we can kill the usage of do_div()
here completely and just do the division directly, both in userspace
and kernel space.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Rich Johnston <rjohnston@sgi.com>
libxfs/xfs_dquot_buf.c

index 620d9d3feedad323edd84caa5c5cfbf036699398..6bbb0ff7398c8a3641af0f1f7f31f537b6732fcd 100644 (file)
@@ -23,13 +23,8 @@ xfs_calc_dquots_per_chunk(
        struct xfs_mount        *mp,
        unsigned int            nbblks) /* basic block units */
 {
-       unsigned int    ndquots;
-
        ASSERT(nbblks > 0);
-       ndquots = BBTOB(nbblks);
-       do_div(ndquots, sizeof(xfs_dqblk_t));
-
-       return ndquots;
+       return BBTOB(nbblks) / sizeof(xfs_dqblk_t);
 }
 
 /*