Linux 2.1.0 Compilation problem

Erik B. Andersen (andersee@et.byu.edu)
Mon, 30 Sep 1996 16:36:55 -0600 (MDT)


I just picked up the brand new patch-2.0.21-2.1.0.gz and patched a clean
version of 2.0.21 (I cheated, and renamed patch-2.0.21-2.1.0.gz to
patch-2.0.22.gz and just used the patch-kernel script). Anyway, I compiled it
the exact way I always compile a new kernel, everything that can be made into
modules (at least stuff that I use) I make as modules, except for the ext2
filesystem (I wouldn't want that as a module right now...) . The kernel built
just fine. However, I got the following error compiling the umsdos module:

make[2]: Entering directory `/usr/src/linux/fs/umsdos'
gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce -pipe -m486 -DCPU=486 -DMODULE -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h -c -o emd.o emd.c
emd.c:31: conflicting types for `umsdos_file_read_kmem'
/usr/src/linux/include/linux/umsdos_fs.p:26: previous declaration of `umsdos_file_read_kmem'
emd.c:47: conflicting types for `umsdos_file_write_kmem'
/usr/src/linux/include/linux/umsdos_fs.p:30: previous declaration of `umsdos_file_write_kmem'
emd.c:68: conflicting types for `umsdos_emd_dir_write'
/usr/src/linux/include/linux/umsdos_fs.p:34: previous declaration of `umsdos_emd_dir_write'
emd.c:84: conflicting types for `umsdos_emd_dir_read'
/usr/src/linux/include/linux/umsdos_fs.p:38: previous declaration of `umsdos_emd_dir_read'
make[2]: *** [emd.o] Error 1

A quick glance at the source code shows real differences between the type
declarations in /usr/src/linux/fs/umsdos/emd.c and the declarations in
/usr/src/linux/include/linux/umsdos_fs.p

Assuming that the declarations introduced into umsdos_fs.p from the new patch
are those that are intended to be in effect, a few changes to emd.c are then in
order. The following patch allows it to compile with no warnings. I havn't yet
tested if umsdos works with these changes...
-Erik

-- 
Erik B. Andersen         Web:    http://www.et.byu.edu/~andersee/ 
2485 South State St.     email:  andersee@et.byu.edu
Springville, Ut 84663    phone:  (801) 489-1231
--This message was written using 73% post-consumer electrons--

[Patch Follows] --- /usr/src/linux/fs/umsdos/emd.c.orig Mon Sep 30 15:53:26 1996 +++ /usr/src/linux/fs/umsdos/emd.c Mon Sep 30 16:30:00 1996 @@ -23,11 +23,10 @@ /* Read a file into kernel space memory */ -int umsdos_file_read_kmem( - struct inode *inode, +long umsdos_file_read_kmem (struct inode *inode, struct file *filp, char *buf, - int count) + unsigned long count) { int ret; int old_fs = get_fs(); @@ -39,11 +38,10 @@ /* Write to a file from kernel space */ -int umsdos_file_write_kmem( - struct inode *inode, +long umsdos_file_write_kmem (struct inode *inode, struct file *filp, const char *buf, - int count) + unsigned long count) { int ret; int old_fs = get_fs(); @@ -60,11 +58,10 @@ Return 0 if ok, a negative error code if not. */ -int umsdos_emd_dir_write ( - struct inode *emd_dir, +long umsdos_emd_dir_write (struct inode *emd_dir, struct file *filp, char *buf, /* buffer in kernel memory, not in user space */ - int count) + unsigned long count) { int written; filp->f_flags = 0; @@ -76,18 +73,17 @@ The block of data is NOT in user space. Return 0 if ok, -EIO if any error. */ -int umsdos_emd_dir_read ( - struct inode *emd_dir, +long umsdos_emd_dir_read (struct inode *emd_dir, struct file *filp, char *buf, /* buffer in kernel memory, not in user space */ - int count) + unsigned long count) { - int ret = 0; + long int ret = 0; int sizeread; filp->f_flags = 0; sizeread = umsdos_file_read_kmem (emd_dir,filp,buf,count); if (sizeread != count){ - printk ("UMSDOS: problem with EMD file. Can't read pos = %Ld (%d != %d)\n" + printk ("UMSDOS: problem with EMD file. Can't read pos = %Ld (%d != %ld)\n" ,filp->f_pos,sizeread,count); ret = -EIO; }