The unified diff between revisions [bb59f6ce..] and [07a39d13..] is displayed below. It can also be downloaded as a raw diff.

#
#
# patch "src/fs/coss/store_coss.h"
#  from [f54c5c80a387b623ee3abf42ac565585a41df44f]
#    to [f844eb6984673084b6f79b7dcb39b7203c7eb7b4]
#
# patch "src/fs/coss/store_dir_coss.c"
#  from [bd31c1d0a49adf2f5f2d07cee7ff86633f9cac86]
#    to [42be6a729e2f18a6e8f8318a5349826148afbd30]
#
============================================================
--- src/fs/coss/store_coss.h	f54c5c80a387b623ee3abf42ac565585a41df44f
+++ src/fs/coss/store_coss.h	f844eb6984673084b6f79b7dcb39b7203c7eb7b4
@@ -5,6 +5,8 @@
 #define	COSS_MEMBUF_SZ	1048576
 #endif

+#define	COSS_REPORT_INTERVAL		10
+
 /* Note that swap_filen in sio/e are actually disk block offsets too! */

 typedef struct _cossmembuf CossMemBuf;
============================================================
--- src/fs/coss/store_dir_coss.c	bd31c1d0a49adf2f5f2d07cee7ff86633f9cac86
+++ src/fs/coss/store_dir_coss.c	42be6a729e2f18a6e8f8318a5349826148afbd30
@@ -54,7 +54,8 @@ struct _RebuildState {
     SwapDir *sd;
     int n_read;
     FILE *log;
-    int speed;
+    int report_interval;
+    int report_current;
     struct {
 	unsigned int clean:1;
     } flags;
@@ -244,7 +245,6 @@ storeCossDirRebuild(SwapDir * sd)
     CBDATA_INIT_TYPE(RebuildState);
     rb = cbdataAlloc(RebuildState);
     rb->sd = sd;
-    rb->speed = opt_foreground_rebuild ? 1 << 30 : 50;
     rb->flags.clean = (unsigned int) clean;
     fp = storeCossDirOpenTmpSwapLog(sd, &clean, &zero);
     fclose(fp);
@@ -559,9 +559,10 @@ storeCossDirCheckLoadAv(SwapDir *SD, sto
 {
 #if !USE_AUFSOPS
     CossInfo *cs = (CossInfo *) SD->fsdata;
+#else
+    int ql = 0;
 #endif
     int loadav;
-    int ql = 0;

     /* Return load, cs->aq.aq_numpending out of MAX_ASYNCOP */
 #if USE_AUFSOPS
@@ -935,6 +936,11 @@ storeDirCoss_ReadStripe(RebuildState *rb
 	cs->rebuild.reading = 1;
 	/* Use POSIX AIO for now */
 	debug(47, 2) ("COSS: %s: reading stripe %d\n", SD->path, cs->rebuild.curstripe);
+	if (cs->rebuild.curstripe > rb->report_current) {
+		debug(47, 1) ("COSS: %s: Rebuilding (%d %% completed - %d/%d stripes)\n", SD->path,
+		    cs->rebuild.curstripe * 100 / cs->numstripes, cs->rebuild.curstripe, cs->numstripes);
+		rb->report_current += rb->report_interval;
+	}
 	a_file_read(&cs->aq, cs->fd, cs->rebuild.buf, COSS_MEMBUF_SZ, cs->rebuild.curstripe * COSS_MEMBUF_SZ, storeDirCoss_ReadStripeComplete, rb);
 }

@@ -950,7 +956,8 @@ storeDirCoss_StartDiskRebuild(RebuildSta
 	cs->rebuild.rebuilding = 1;
 	cs->rebuild.curstripe = 0;
 	cs->rebuild.buf = xmalloc(COSS_MEMBUF_SZ);
-
+	rb->report_interval = cs->numstripes / COSS_REPORT_INTERVAL;
+	rb->report_current = 0;
 	debug(47, 2) ("COSS: %s: Beginning disk rebuild.\n", SD->path);
 	storeDirCoss_ReadStripe(rb);
 }