<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>change log for rtems (2010-05-17)</title>
</head>
<body text='#000000' bgcolor='#ffffff'>
<a name='cs1'></a>
<table border='0' cellspacing='0' cellpadding='5' width='100%' bgcolor='#eeeeee'>
<tr><td colspan='3' bgcolor='#dddddd'>
 <font color='#bb2222'><strong>sh</strong></font>
</td></tr>
<tr><td colspan='3' bgcolor='#dddddd'><pre>2010-05-17 Oleg Kravtsov <Oleg.Kravtsov@oktetlabs.ru>

        PR 1449/cpukit
        * libblock/src/diskdevs.c: rtems_disk_next() will now implicitly
        obtain the returned disk.
        * libblock/include/rtems/diskdevs.h: Documentation.
</pre></td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/ChangeLog.diff?r1=text&tr1=1.2293&r2=text&tr2=1.2294&diff_format=h">M</a></td><td width='1%'>1.2294</td><td width='100%'>cpukit/ChangeLog</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/libblock/include/rtems/diskdevs.h.diff?r1=text&tr1=1.18&r2=text&tr2=1.19&diff_format=h">M</a></td><td width='1%'>1.19</td><td width='100%'>cpukit/libblock/include/rtems/diskdevs.h</td></tr>
<tr><td width='1%'><a href="http://www.rtems.com/cgi-bin/viewcvs.cgi//rtems/cpukit/libblock/src/diskdevs.c.diff?r1=text&tr1=1.24&r2=text&tr2=1.25&diff_format=h">M</a></td><td width='1%'>1.25</td><td width='100%'>cpukit/libblock/src/diskdevs.c</td></tr>
</table>
<pre>
<font color='#006600'>diff -u rtems/cpukit/ChangeLog:1.2293 rtems/cpukit/ChangeLog:1.2294
--- rtems/cpukit/ChangeLog:1.2293       Sat May 15 01:29:55 2010
+++ rtems/cpukit/ChangeLog      Mon May 17 03:08:30 2010
</font><font color='#997700'>@@ -1,3 +1,10 @@
</font><font color='#000088'>+2010-05-17    Oleg Kravtsov <Oleg.Kravtsov@oktetlabs.ru>
+
+       PR 1449/cpukit
+       * libblock/src/diskdevs.c: rtems_disk_next() will now implicitly
+       obtain the returned disk.
+       * libblock/include/rtems/diskdevs.h: Documentation.
+
</font> 2010-05-15        Chris Johns <chrisj@rtems.org>
 
        * libfs/src/imfs/imfs_initsupp.c, libfs/src/imfs/imfs.h,

<font color='#006600'>diff -u rtems/cpukit/libblock/include/rtems/diskdevs.h:1.18 rtems/cpukit/libblock/include/rtems/diskdevs.h:1.19
--- rtems/cpukit/libblock/include/rtems/diskdevs.h:1.18 Fri Dec 18 09:59:29 2009
+++ rtems/cpukit/libblock/include/rtems/diskdevs.h      Mon May 17 03:08:30 2010
</font><font color='#997700'>@@ -323,10 +323,12 @@
</font>  * one to start the search.
  *
  * @code
<font color='#880000'>- * rtems_disk_device *dd = rtems_disk_next((dev_t) -1);
</font><font color='#000088'>+ * rtems_status_code sc = RTEMS_SUCCESSFUL;
+ * rtems_disk_device *dd = (dev_t) -1;
</font>  *
<font color='#880000'>- * while (dd != NULL) {
- *   dd = rtems_disk_next(dd->dev);
</font><font color='#000088'>+ * while (sc == RTEMS_SUCCESSFUL && (dd = rtems_disk_next(dev)) != NULL) {
+ *   dev = rtems_disk_get_device_identifier(dd);
+ *   sc = rtems_disk_release(dd);
</font>  * }
  * @endcode
  */

<font color='#006600'>diff -u rtems/cpukit/libblock/src/diskdevs.c:1.24 rtems/cpukit/libblock/src/diskdevs.c:1.25
--- rtems/cpukit/libblock/src/diskdevs.c:1.24   Thu Apr 29 06:34:59 2010
+++ rtems/cpukit/libblock/src/diskdevs.c        Mon May 17 03:08:30 2010
</font><font color='#997700'>@@ -462,33 +462,58 @@
</font> rtems_disk_device *
 rtems_disk_next(dev_t dev)
 {
<font color='#880000'>-    rtems_device_major_number major;
-    rtems_device_minor_number minor;
-    rtems_disk_device_table *dtab;
</font><font color='#000088'>+  rtems_status_code sc = RTEMS_SUCCESSFUL;
+  rtems_disk_device_table *dtab = NULL;
+  rtems_device_major_number major = 0;
+  rtems_device_minor_number minor = 0;
</font> 
<font color='#880000'>-    dev++;
-    rtems_filesystem_split_dev_t (dev, major, minor);
</font><font color='#000088'>+  if (dev != (dev_t) -1) {
+    rtems_filesystem_split_dev_t(dev, major, minor);
</font> 
<font color='#880000'>-    if (major >= disktab_size)
</font><font color='#000088'>+    /* If minor wraps around */
+    if ((minor + 1) < minor) {
+      /* If major wraps around */
+      if ((major + 1) < major) {
</font>         return NULL;
<font color='#000088'>+      }
+      ++major;
+      minor = 0;
+    } else {
+      ++minor;
+    }
+  }
+
+  sc = disk_lock();
+  if (sc != RTEMS_SUCCESSFUL) {
+    return NULL;
+  }
</font> 
<font color='#880000'>-    dtab = disktab + major;
-    while (true)
-    {
-        if ((dtab == NULL) || (minor >= dtab->size))
-        {
-             major++; minor = 0;
-             if (major >= disktab_size)
-                 return NULL;
-             dtab = disktab + major;
-        }
-        else if (dtab->minor[minor] == NULL)
-        {
-            minor++;
-        }
-        else
-            return dtab->minor[minor];
</font><font color='#000088'>+  if (major >= disktab_size) {
+    disk_unlock();
+
+    return NULL;
+  }
+
+  dtab = disktab + major;
+  while (true) {
+    if (dtab->minor == NULL || minor >= dtab->size) {
+       minor = 0;
+       ++major;
+       if (major >= disktab_size) {
+         disk_unlock();
+
+         return NULL;
+       }
+       dtab = disktab + major;
+    } else if (dtab->minor [minor] == NULL) {
+      ++minor;
+    } else {
+      ++dtab->minor [minor]->uses;
+      disk_unlock();
+
+      return dtab->minor [minor];
</font>     }
<font color='#000088'>+  }
</font> }
 
 rtems_status_code
</pre>
<p> </p>

<p>--<br />
<small>Generated by <a href="http://www.codewiz.org/projects/index.html#loginfo">Deluxe Loginfo</a> 2.122 by Bernardo Innocenti <bernie@develer.com></small></p>
</body>
</html>