BUG-fix for ftape (1.3.74)

Hans Lermen (lermen@elserv.ffm.fgan.de)
Fri, 15 Mar 1996 00:54:27 +0100 (MET)


Hi,

It turns out that ftape under 1.3.74 won't compile, NR_MEM_LISTS is
no longer available. The below fix uses the changes that were in
1.3.74 for linux/drivers/block/floppy.c. They also work for ftape,
however, __get_order() can't return an error condition (-1).

So long,
Hans
<lermen@elserv.ffm.fgan.de>

-----------------------------------------------------------------------
--- linux-1.3.74-clean/drivers/char/ftape/kernel-interface.c Thu Mar 14 21:09:49 1996
+++ linux/drivers/char/ftape/kernel-interface.c Thu Mar 14 22:50:33 1996
@@ -98,11 +98,14 @@
int __get_order(int size)
{
int order;
-
- for (order = 0; order < NR_MEM_LISTS; ++order)
- if (size <= (PAGE_SIZE << order))
- return order;
- return -1;
+ /* stolen from linux/drivers/block/floppy.c */
+ size >>= (PAGE_SHIFT-1);
+ order = -1;
+ do {
+ size >>= 1;
+ order++;
+ } while (size);
+ return order; /* note: doesn't return -1 any more */
}

static inline
@@ -156,13 +159,6 @@
* Allocate the DMA buffers. They are deallocated at cleanup() time.
*/
order = __get_order(BUFF_SIZE);
- if (order < 0) {
- TRACE(1, "__get_order failed (no memory?)");
- if (unregister_chrdev(QIC117_TAPE_MAJOR, "ftape") != 0) {
- TRACE(3, "unregister_chrdev failed");
- }
- return -ENOMEM;
- }
for (n = 0; n < NR_BUFFERS; n++) {
tape_buffer[n] = (byte *) dmaalloc(order);
if (!tape_buffer[n]) {
-----------------------------------------------------------------------