]> Zhao Yanbai Git Server - minix.git/commitdiff
libbdev: be less noisy about clean driver restarts 83/983/2
authorDavid van Moolenbroek <david@minix3.org>
Sun, 15 Sep 2013 11:09:00 +0000 (13:09 +0200)
committerLionel Sambuc <lionel@minix3.org>
Sat, 1 Mar 2014 08:04:53 +0000 (09:04 +0100)
Change-Id: Ie02a459c9b544d361ab00bac431ef99de53b0c5f

lib/libbdev/ipc.c
lib/libbdev/minor.c
lib/libbdev/proto.h

index ce6403e37471cf08ab120c93701133550f1e2cd7..2c4ce2701f246269c4172aa3487d2fa680aaa8eb 100644 (file)
@@ -36,9 +36,17 @@ static int bdev_recover(dev_t dev, int update_endpt)
  */
   bdev_call_t *call, *next;
   endpoint_t endpt;
-  int r, nr_tries;
+  int r, active, nr_tries;
 
-  printf("bdev: recovering from a driver restart on major %d\n", major(dev));
+  /* Only print output if there is something to recover. Some drivers may be
+   * shut down and later restarted legitimately, and if they were not in use
+   * while that happened, there is no need to flood the console with messages.
+   */
+  active = bdev_minor_is_open(dev) || bdev_call_iter_maj(dev, NULL, &next);
+
+  if (active)
+       printf("bdev: recovering from a driver restart on major %d\n",
+               major(dev));
 
   for (nr_tries = 0; nr_tries < RECOVER_TRIES; nr_tries++) {
        /* First update the endpoint, if necessary. */
@@ -79,7 +87,8 @@ static int bdev_recover(dev_t dev, int update_endpt)
        /* Recovery seems successful. We can now reissue the current
         * synchronous request (if any), and continue normal operation.
         */
-       printf("bdev: recovery successful, new driver is at %d\n", endpt);
+       if (active)
+               printf("bdev: recovery successful, new driver at %d\n", endpt);
 
        return TRUE;
   }
index 519da33eb75d33eefc201a6a2e4017ed087b70c3..205f16c895c39321c720c3f0a974e68accc22746 100644 (file)
@@ -118,3 +118,19 @@ void bdev_minor_del(dev_t dev)
        }
   }
 }
+
+int bdev_minor_is_open(dev_t dev)
+{
+/* Return whether any minor is open for the major of the given device.
+ */
+  int i, major;
+
+  major = major(dev);
+
+  for (i = 0; i < NR_OPEN_DEVS; i++) {
+       if (major(open_dev[i].dev) == major)
+               return TRUE;
+  }
+
+  return FALSE;
+}
index 24f11d089240262be772a6e3ead2ba52672d0e49..51963a8e7daff8fccc422a383104af7342c5c20b 100644 (file)
@@ -29,5 +29,6 @@ extern int bdev_sendrec(dev_t dev, const message *m_orig);
 extern int bdev_minor_reopen(dev_t dev);
 extern void bdev_minor_add(dev_t dev, int access);
 extern void bdev_minor_del(dev_t dev);
+extern int bdev_minor_is_open(dev_t dev);
 
 #endif /* _BDEV_PROTO_H */