Recently (Subversion revision 633) code was added to scst_vdisk.c that
authorvlnb <vlnb@d57e44dd-8a1f-0410-8b47-8ef2f437770f>
Mon, 26 Jan 2009 17:23:46 +0000 (17:23 +0000)
committervlnb <vlnb@d57e44dd-8a1f-0410-8b47-8ef2f437770f>
Mon, 26 Jan 2009 17:23:46 +0000 (17:23 +0000)
commitb9d5f9f7752d43dc6adda7061c2fa7027531cf77
tree8aaad4e25b299ea5d0777af9130bb8c5d908a2c7
parentb68a8554275c1020e3e1b6741f28a127e7583485
Recently (Subversion revision 633) code was added to scst_vdisk.c that
performs a.o. 64-bit division. While gcc supports 64-bit divisions on 32-bit
CPU's, gcc generates a function call for these 64-bit divisions (see also
http://gcc.gnu.org/onlinedocs/gccint/Integer-library-routines.html for the
entire list). Unfortunately there is no implementation available for these
functions in the Linux kernel. Which means that loading kernel modules
that contain 64-bit divisions on a 32-bit system will fail and that insmod/
modprobe will complain about undefined references to e.g. __umoddi3. AFAIK the
proper approach in the Linux kernel is to use the do_div() macro for
performing 64-bit divisions. This macro is defined in <asm/div64.h>. The patch
below converts the call to div_s64_rem() by a call to do_div().

The patch below has been verified as follows:
- Reran scripts/run-regression-tests -k 2.6.24.7 -k 2.6.25.20 -k 2.6.26.8 -k 2.6.27.12 -k 2.6.28.1
  on a 64-bit system and verified that the output of the re*/sparse* files did
  not contain any compilation errors.
- Verified that the patched SCST source compiles fine on CentOS 5.2, 32-bit.
- Verified that the scst_vdisk module loads correctly on CentOS 5.2, 32-bit.

Signed-off-by: Bart Van Assche <bart.vanassche@gmail.com>
git-svn-id: https://scst.svn.sourceforge.net/svnroot/scst/trunk@640 d57e44dd-8a1f-0410-8b47-8ef2f437770f
scst/src/dev_handlers/scst_vdisk.c