From 7581b7eb0298f5124c9f4df7f1a36d4ea9493d2e Mon Sep 17 00:00:00 2001 From: Fedor Date: Wed, 11 Mar 2009 00:33:38 -0400 Subject: [PATCH] Tune bdflush parameters for USB - write to disk within 2 seconds. --- release/src/router/nvram/defaults.c | 1 + release/src/router/rc/usb.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/release/src/router/nvram/defaults.c b/release/src/router/nvram/defaults.c index c50729f0dd..7ae6163697 100644 --- a/release/src/router/nvram/defaults.c +++ b/release/src/router/nvram/defaults.c @@ -469,6 +469,7 @@ const defaults_t defaults[] = { { "usb_fs_ext3", "0" }, { "usb_fs_fat", "0" }, { "usb_automount", "0" }, + { "usb_bdflush", "30 500 0 0 100 100 60 0 0" }, { "script_usbhotplug", "" }, { "script_usbmount", "" }, { "script_usbumount", "" }, diff --git a/release/src/router/rc/usb.c b/release/src/router/rc/usb.c index 875193276d..3eee2313a6 100644 --- a/release/src/router/rc/usb.c +++ b/release/src/router/rc/usb.c @@ -37,9 +37,40 @@ void usb_unlock(void) } +/* Adjust bdflush parameters. + * Do this here, because Tomato doesn't have the sysctl command. + * With these values, a disk block should be written to disk within 2 seconds. + */ +#if 0 +#define SET_PARM(n) (n * 2 | 1) + +void tune_bdflush() +{ + bdflush(SET_PARM(5), 100); + bdflush(SET_PARM(6), 100); + bdflush(SET_PARM(8), 0); +} +#else +/* Store values in nvram for customization */ +void tune_bdflush(void) +{ + unsigned int v[9]; + const char *p; + + p = nvram_safe_get("usb_bdflush"); + // nvram default: 30 500 0 0 100 100 60 0 0 + if (sscanf(p, "%u%u%u%u%u%u%u%u%u", + &v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7], &v[8]) == 9) { // lightly verify + f_write_string("/proc/sys/vm/bdflush", p, 0, 0); + } +} +#endif + + void start_usb(void) { _dprintf("%s\n", __FUNCTION__); + tune_bdflush(); if (nvram_match("usb_enable", "1")) { // led(LED_AOSS, LED_ON); -- 2.11.4.GIT