]> Zhao Yanbai Git Server - minix.git/commitdiff
Minor partition() efficiency improvements (don't do regular partitioning
authorBen Gras <ben@minix3.org>
Mon, 8 Aug 2005 12:16:59 +0000 (12:16 +0000)
committerBen Gras <ben@minix3.org>
Mon, 8 Aug 2005 12:16:59 +0000 (12:16 +0000)
i/o on cd drives)

drivers/at_wini/at_wini.c
drivers/bios_wini/bios_wini.c
drivers/floppy/floppy.c
drivers/libdriver/drvlib.c
drivers/libdriver/drvlib.h

index 797c6e74d8fab55b684efd69e0e9760da3e02e82..0de6f7c3998108323fabc057b801cb943a8c5388 100644 (file)
@@ -337,7 +337,9 @@ message *m_ptr;
   if (!(wn->state & IDENTIFIED) || (wn->state & DEAF)) {
        /* Try to identify the device. */
        if (w_identify() != OK) {
+#if VERBOSE
                printf("%s: probe failed\n", w_name());
+#endif
                if (wn->state & DEAF) w_reset();
                wn->state = IGNORING;
                return(ENXIO);
@@ -378,7 +380,7 @@ message *m_ptr;
        if (!(wn->state & ATAPI) && (m_ptr->COUNT & RO_BIT)) return EACCES;
 
        /* Partition the disk. */
-       partition(&w_dtab, w_drive * DEV_PER_DRIVE, P_PRIMARY);
+       partition(&w_dtab, w_drive * DEV_PER_DRIVE, P_PRIMARY, wn->state & ATAPI);
        wn->open_ct++;
   }
   return(OK);
index 87bd691922617b7549996dde2d7224cf4b2b0e21..eb3da2e319dec25450585dc2e776a738faef3836 100644 (file)
@@ -317,7 +317,7 @@ message *m_ptr;
 
   if (w_wn->open_ct++ == 0) {
        /* Partition the disk. */
-       partition(&w_dtab, w_drive * DEV_PER_DRIVE, P_PRIMARY);
+       partition(&w_dtab, w_drive * DEV_PER_DRIVE, P_PRIMARY, 0);
   }
   return(OK);
 }
index 6745258f7d4d12edf00d3b1c94ee0f4c694bb4dc..d57fdd08f486939180b5ebe7f32c41a139b594ad 100644 (file)
@@ -1277,7 +1277,7 @@ int density;
 
   if (iovec1.iov_size != 0) return(EIO);
 
-  partition(&f_dtab, f_drive, P_FLOPPY);
+  partition(&f_dtab, f_drive, P_FLOPPY, 0);
   return(OK);
 }
 
index f87396c8e17870e024a210bfb8b2e114ee7f7209..4b98e136fd4f790685686c9989585608d19c4ff5 100644 (file)
@@ -24,10 +24,11 @@ FORWARD _PROTOTYPE( void sort, (struct part_entry *table) );
 /*============================================================================*
  *                             partition                                     *
  *============================================================================*/
-PUBLIC void partition(dp, device, style)
+PUBLIC void partition(dp, device, style, atapi)
 struct driver *dp;     /* device dependent entry points */
 int device;            /* device to partition */
 int style;             /* partitioning style: floppy, primary, sub. */
+int atapi;             /* atapi device */
 {
 /* This routine is called on first open to initialize the partition tables
  * of a device.  It makes sure that each partition falls safely within the
@@ -48,9 +49,12 @@ int style;           /* partitioning style: floppy, primary, sub. */
   limit = base + div64u(dv->dv_size, SECTOR_SIZE);
 
   /* Read the partition table for the device. */
-  if (!get_part_table(dp, device, 0L, table, &io))
-         if(!io || !get_iso_fake_part_table(dp, device, 0L, table))
-               return;
+  if(atapi) {
+       if(!get_iso_fake_part_table(dp, device, 0L, table))
+               return;
+  } else if(!get_part_table(dp, device, 0L, table, &io)) {
+         return;
+  }
 
   /* Compute the device number of the first partition. */
   switch (style) {
@@ -86,7 +90,7 @@ int style;            /* partitioning style: floppy, primary, sub. */
        if (style == P_PRIMARY) {
                /* Each Minix primary partition can be subpartitioned. */
                if (pe->sysind == MINIX_PART)
-                       partition(dp, device + par, P_SUB);
+                       partition(dp, device + par, P_SUB, atapi);
 
                /* An extended partition has logical partitions. */
                if (ext_part(pe->sysind))
index cd234a9758aa9fd14ea8e0de46c6bda1adfc4ed1..1986cab0534b86c05cfaabd054bf277987bccd0e 100644 (file)
@@ -4,7 +4,7 @@
 
 #include <ibm/partition.h>
 
-_PROTOTYPE( void partition, (struct driver *dr, int device, int style) );
+_PROTOTYPE( void partition, (struct driver *dr, int device, int style, int atapi) );
 
 /* BIOS parameter table layout. */
 #define bp_cylinders(t)                (* (u16_t *) (&(t)[0]))