Loading drivers/md/bcache/bcache.h +6 −0 Original line number Diff line number Diff line Loading @@ -843,8 +843,14 @@ struct cache_set { atomic_long_t cache_read_races; atomic_long_t writeback_keys_done; atomic_long_t writeback_keys_failed; enum { ON_ERROR_UNREGISTER, ON_ERROR_PANIC, } on_error; unsigned error_limit; unsigned error_decay; unsigned short journal_delay_ms; unsigned verify:1; unsigned key_merging_disabled:1; Loading drivers/md/bcache/journal.c +3 −4 Original line number Diff line number Diff line Loading @@ -305,9 +305,8 @@ int bch_journal_replay(struct cache_set *s, struct list_head *list, list_for_each_entry(i, list, list) { BUG_ON(i->pin && atomic_read(i->pin) != 1); if (n != i->j.seq) pr_err( "journal entries %llu-%llu missing! (replaying %llu-%llu)\n", cache_set_err_on(n != i->j.seq, s, "bcache: journal entries %llu-%llu missing! (replaying %llu-%llu)", n, i->j.seq - 1, start, end); for (k = i->j.start; Loading drivers/md/bcache/super.c +5 −1 Original line number Diff line number Diff line Loading @@ -1260,7 +1260,8 @@ bool bch_cache_set_error(struct cache_set *c, const char *fmt, ...) { va_list args; if (test_bit(CACHE_SET_STOPPING, &c->flags)) if (c->on_error != ON_ERROR_PANIC && test_bit(CACHE_SET_STOPPING, &c->flags)) return false; /* XXX: we can be called from atomic context Loading @@ -1275,6 +1276,9 @@ bool bch_cache_set_error(struct cache_set *c, const char *fmt, ...) printk(", disabling caching\n"); if (c->on_error == ON_ERROR_PANIC) panic("panic forced after error\n"); bch_cache_set_unregister(c); return true; } Loading drivers/md/bcache/sysfs.c +21 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,12 @@ static const char * const cache_replacement_policies[] = { NULL }; static const char * const error_actions[] = { "unregister", "panic", NULL }; write_attribute(attach); write_attribute(detach); write_attribute(unregister); Loading Loading @@ -90,6 +96,7 @@ rw_attribute(discard); rw_attribute(running); rw_attribute(label); rw_attribute(readahead); rw_attribute(errors); rw_attribute(io_error_limit); rw_attribute(io_error_halflife); rw_attribute(verify); Loading Loading @@ -492,6 +499,10 @@ SHOW(__bch_cache_set) sysfs_print(writeback_keys_failed, atomic_long_read(&c->writeback_keys_failed)); if (attr == &sysfs_errors) return bch_snprint_string_list(buf, PAGE_SIZE, error_actions, c->on_error); /* See count_io_errors for why 88 */ sysfs_print(io_error_halflife, c->error_decay * 88); sysfs_print(io_error_limit, c->error_limit >> IO_ERROR_SHIFT); Loading Loading @@ -569,6 +580,15 @@ STORE(__bch_cache_set) sysfs_strtoul(congested_write_threshold_us, c->congested_write_threshold_us); if (attr == &sysfs_errors) { ssize_t v = bch_read_string_list(buf, error_actions); if (v < 0) return v; c->on_error = v; } if (attr == &sysfs_io_error_limit) c->error_limit = strtoul_or_return(buf) << IO_ERROR_SHIFT; Loading Loading @@ -620,6 +640,7 @@ static struct attribute *bch_cache_set_files[] = { &sysfs_average_key_size, &sysfs_dirty_data, &sysfs_errors, &sysfs_io_error_limit, &sysfs_io_error_halflife, &sysfs_congested, Loading Loading
drivers/md/bcache/bcache.h +6 −0 Original line number Diff line number Diff line Loading @@ -843,8 +843,14 @@ struct cache_set { atomic_long_t cache_read_races; atomic_long_t writeback_keys_done; atomic_long_t writeback_keys_failed; enum { ON_ERROR_UNREGISTER, ON_ERROR_PANIC, } on_error; unsigned error_limit; unsigned error_decay; unsigned short journal_delay_ms; unsigned verify:1; unsigned key_merging_disabled:1; Loading
drivers/md/bcache/journal.c +3 −4 Original line number Diff line number Diff line Loading @@ -305,9 +305,8 @@ int bch_journal_replay(struct cache_set *s, struct list_head *list, list_for_each_entry(i, list, list) { BUG_ON(i->pin && atomic_read(i->pin) != 1); if (n != i->j.seq) pr_err( "journal entries %llu-%llu missing! (replaying %llu-%llu)\n", cache_set_err_on(n != i->j.seq, s, "bcache: journal entries %llu-%llu missing! (replaying %llu-%llu)", n, i->j.seq - 1, start, end); for (k = i->j.start; Loading
drivers/md/bcache/super.c +5 −1 Original line number Diff line number Diff line Loading @@ -1260,7 +1260,8 @@ bool bch_cache_set_error(struct cache_set *c, const char *fmt, ...) { va_list args; if (test_bit(CACHE_SET_STOPPING, &c->flags)) if (c->on_error != ON_ERROR_PANIC && test_bit(CACHE_SET_STOPPING, &c->flags)) return false; /* XXX: we can be called from atomic context Loading @@ -1275,6 +1276,9 @@ bool bch_cache_set_error(struct cache_set *c, const char *fmt, ...) printk(", disabling caching\n"); if (c->on_error == ON_ERROR_PANIC) panic("panic forced after error\n"); bch_cache_set_unregister(c); return true; } Loading
drivers/md/bcache/sysfs.c +21 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,12 @@ static const char * const cache_replacement_policies[] = { NULL }; static const char * const error_actions[] = { "unregister", "panic", NULL }; write_attribute(attach); write_attribute(detach); write_attribute(unregister); Loading Loading @@ -90,6 +96,7 @@ rw_attribute(discard); rw_attribute(running); rw_attribute(label); rw_attribute(readahead); rw_attribute(errors); rw_attribute(io_error_limit); rw_attribute(io_error_halflife); rw_attribute(verify); Loading Loading @@ -492,6 +499,10 @@ SHOW(__bch_cache_set) sysfs_print(writeback_keys_failed, atomic_long_read(&c->writeback_keys_failed)); if (attr == &sysfs_errors) return bch_snprint_string_list(buf, PAGE_SIZE, error_actions, c->on_error); /* See count_io_errors for why 88 */ sysfs_print(io_error_halflife, c->error_decay * 88); sysfs_print(io_error_limit, c->error_limit >> IO_ERROR_SHIFT); Loading Loading @@ -569,6 +580,15 @@ STORE(__bch_cache_set) sysfs_strtoul(congested_write_threshold_us, c->congested_write_threshold_us); if (attr == &sysfs_errors) { ssize_t v = bch_read_string_list(buf, error_actions); if (v < 0) return v; c->on_error = v; } if (attr == &sysfs_io_error_limit) c->error_limit = strtoul_or_return(buf) << IO_ERROR_SHIFT; Loading Loading @@ -620,6 +640,7 @@ static struct attribute *bch_cache_set_files[] = { &sysfs_average_key_size, &sysfs_dirty_data, &sysfs_errors, &sysfs_io_error_limit, &sysfs_io_error_halflife, &sysfs_congested, Loading