CA-254690: Add a flag to control logging based on call context

From: Mark Syms <mark.syms@citrix.com>

diff --git a/drivers/tapdisk-control.c b/drivers/tapdisk-control.c
index b0c82a3..329a7ed 100644
--- a/drivers/tapdisk-control.c
+++ b/drivers/tapdisk-control.c
@@ -845,7 +845,7 @@ tapdisk_control_close_image(struct tapdisk_ctl_conn *conn,
 		EPRINTF("closing VBD %d with failed requests\n", request->cookie);
 
 	if (vbd->nbdserver) {
-	  tapdisk_nbdserver_pause(vbd->nbdserver);
+		tapdisk_nbdserver_pause(vbd->nbdserver, true);
 	}
 
     err = 0;
@@ -954,6 +954,7 @@ tapdisk_control_pause_vbd(struct tapdisk_ctl_conn *conn,
 		goto out;
 	}
 
+	INFO("pause requested\n");
 	do {
 		gettimeofday(&now, NULL);
 		if (TV_AFTER(now, next)) {
@@ -962,12 +963,18 @@ tapdisk_control_pause_vbd(struct tapdisk_ctl_conn *conn,
 			if (!err || err != -EAGAIN)
 				break;
 
+			/*
+			 * Squash the logging so that we don't fill the logs
+			 * partition
+			 */
+			tapdisk_vbd_squash_pause_logging(true);
 			TV_ADD(now, interval, next);
 		}
 
 		tapdisk_server_iterate();
 
 	} while (conn->fd >= 0);
+	tapdisk_vbd_squash_pause_logging(false);
 
 out:
 	response->cookie = request->cookie;
diff --git a/drivers/tapdisk-nbdserver.c b/drivers/tapdisk-nbdserver.c
index b7cf94d..6e6f58c 100644
--- a/drivers/tapdisk-nbdserver.c
+++ b/drivers/tapdisk-nbdserver.c
@@ -666,11 +666,13 @@ fail:
 }
 
 void
-tapdisk_nbdserver_pause(td_nbdserver_t *server)
+tapdisk_nbdserver_pause(td_nbdserver_t *server, bool log)
 {
 	struct td_nbdserver_client *pos, *q;
 
-	INFO("NBD server pause(%p)", server);
+	if (log) {
+		INFO("NBD server pause(%p)", server);
+	}
 
 	list_for_each_entry_safe(pos, q, &server->clients, clientlist){
 		if (pos->paused != 1 && pos->client_event_id >= 0) {
diff --git a/drivers/tapdisk-nbdserver.h b/drivers/tapdisk-nbdserver.h
index 1a96748..14fa0c5 100644
--- a/drivers/tapdisk-nbdserver.h
+++ b/drivers/tapdisk-nbdserver.h
@@ -143,7 +143,7 @@ int tapdisk_nbdserver_listen_inet(td_nbdserver_t *server, const int port);
 int tapdisk_nbdserver_listen_unix(td_nbdserver_t *server);
 
 void tapdisk_nbdserver_free(td_nbdserver_t *);
-void tapdisk_nbdserver_pause(td_nbdserver_t *);
+void tapdisk_nbdserver_pause(td_nbdserver_t *, bool log);
 int tapdisk_nbdserver_unpause(td_nbdserver_t *);
 
 /**
diff --git a/drivers/tapdisk-vbd.c b/drivers/tapdisk-vbd.c
index a791d14..fc07d91 100644
--- a/drivers/tapdisk-vbd.c
+++ b/drivers/tapdisk-vbd.c
@@ -75,6 +75,8 @@ static void tapdisk_vbd_complete_vbd_request(td_vbd_t *, td_vbd_request_t *);
 static int  tapdisk_vbd_queue_ready(td_vbd_t *);
 static void tapdisk_vbd_check_queue_state(td_vbd_t *);
 
+static bool log=true;
+
 /*
  * initialization
  */
@@ -915,18 +917,30 @@ tapdisk_vbd_open_image(td_vbd_t *vbd, td_image_t *image)
 }
 #endif
 
+/*
+ * Pausing a tapdisk can produce a lot of logging if the storage is not available
+ * and there are inflight data requests. All the caller to squash the logging 
+ * when entering a retry process.
+ */
+void tapdisk_vbd_squash_pause_logging(bool squash)
+{
+	log = !squash;
+}
+
 int
 tapdisk_vbd_pause(td_vbd_t *vbd)
 {
 	int err;
 	struct td_xenblkif *blkif;
 
-	INFO("pause requested\n");
+	if (log) {
+		INFO("pause requested\n");
+	}
 
 	td_flag_set(vbd->state, TD_VBD_PAUSE_REQUESTED);
 
 	if (vbd->nbdserver)
-		tapdisk_nbdserver_pause(vbd->nbdserver);
+		tapdisk_nbdserver_pause(vbd->nbdserver, log);
 
 	err = tapdisk_vbd_quiesce_queue(vbd);
 	if (err)
@@ -937,6 +951,7 @@ tapdisk_vbd_pause(td_vbd_t *vbd)
 
 	tapdisk_vbd_close_vdi(vbd);
 
+	/* Don't guard this one as at this point the pause operation is complete */
 	INFO("pause completed\n");
 
 	if (!list_empty(&vbd->failed_requests))
diff --git a/drivers/tapdisk-vbd.h b/drivers/tapdisk-vbd.h
index 82e7b24..4f0ac68 100644
--- a/drivers/tapdisk-vbd.h
+++ b/drivers/tapdisk-vbd.h
@@ -218,6 +218,7 @@ int tapdisk_vbd_start_queue(td_vbd_t *);
 int tapdisk_vbd_issue_requests(td_vbd_t *);
 int tapdisk_vbd_kill_queue(td_vbd_t *);
 int tapdisk_vbd_pause(td_vbd_t *);
+void tapdisk_vbd_squash_pause_logging(bool squash);
 int tapdisk_vbd_resume(td_vbd_t *, const char *);
 void tapdisk_vbd_kick(td_vbd_t *);
 void tapdisk_vbd_check_state(td_vbd_t *);
