Lines Matching refs:bb
1381 static int md_set_badblocks(struct badblocks *bb, sector_t s, int sectors,
1500 u64 bb = le64_to_cpu(*bbp); in super_1_load() local
1501 int count = bb & (0x3ff); in super_1_load()
1502 u64 sector = bb >> 10; in super_1_load()
1505 if (bb + 1 == 0) in super_1_load()
1764 struct badblocks *bb = &rdev->badblocks; in super_1_sync() local
1766 u64 *p = bb->page; in super_1_sync()
1768 if (bb->changed) { in super_1_sync()
1772 seq = read_seqbegin(&bb->lock); in super_1_sync()
1776 for (i = 0 ; i < bb->count ; i++) { in super_1_sync()
1782 bb->changed = 0; in super_1_sync()
1783 if (read_seqretry(&bb->lock, seq)) in super_1_sync()
1786 bb->sector = (rdev->sb_start + in super_1_sync()
1788 bb->size = le16_to_cpu(sb->bblog_size); in super_1_sync()
2966 badblocks_show(struct badblocks *bb, char *page, int unack);
2968 badblocks_store(struct badblocks *bb, const char *page, size_t len, int unack);
8340 int md_is_badblock(struct badblocks *bb, sector_t s, int sectors, in md_is_badblock() argument
8345 u64 *p = bb->page; in md_is_badblock()
8350 if (bb->shift > 0) { in md_is_badblock()
8352 s >>= bb->shift; in md_is_badblock()
8353 target += (1<<bb->shift) - 1; in md_is_badblock()
8354 target >>= bb->shift; in md_is_badblock()
8360 seq = read_seqbegin(&bb->lock); in md_is_badblock()
8363 hi = bb->count; in md_is_badblock()
8406 if (read_seqretry(&bb->lock, seq)) in md_is_badblock()
8420 static int md_set_badblocks(struct badblocks *bb, sector_t s, int sectors, in md_set_badblocks() argument
8428 if (bb->shift < 0) in md_set_badblocks()
8432 if (bb->shift) { in md_set_badblocks()
8435 s >>= bb->shift; in md_set_badblocks()
8436 next += (1<<bb->shift) - 1; in md_set_badblocks()
8437 next >>= bb->shift; in md_set_badblocks()
8441 write_seqlock_irqsave(&bb->lock, flags); in md_set_badblocks()
8443 p = bb->page; in md_set_badblocks()
8445 hi = bb->count; in md_set_badblocks()
8489 if (sectors && hi < bb->count) { in md_set_badblocks()
8517 if (sectors == 0 && hi < bb->count) { in md_set_badblocks()
8529 (bb->count - hi - 1) * 8); in md_set_badblocks()
8530 bb->count--; in md_set_badblocks()
8536 if (bb->count >= MD_MAX_BADBLOCKS) { in md_set_badblocks()
8543 (bb->count - hi) * 8); in md_set_badblocks()
8544 bb->count++; in md_set_badblocks()
8554 bb->changed = 1; in md_set_badblocks()
8556 bb->unacked_exist = 1; in md_set_badblocks()
8557 write_sequnlock_irqrestore(&bb->lock, flags); in md_set_badblocks()
8588 static int md_clear_badblocks(struct badblocks *bb, sector_t s, int sectors) in md_clear_badblocks() argument
8595 if (bb->shift > 0) { in md_clear_badblocks()
8602 s += (1<<bb->shift) - 1; in md_clear_badblocks()
8603 s >>= bb->shift; in md_clear_badblocks()
8604 target >>= bb->shift; in md_clear_badblocks()
8608 write_seqlock_irq(&bb->lock); in md_clear_badblocks()
8610 p = bb->page; in md_clear_badblocks()
8612 hi = bb->count; in md_clear_badblocks()
8635 if (bb->count >= MD_MAX_BADBLOCKS) { in md_clear_badblocks()
8639 memmove(p+lo+1, p+lo, (bb->count - lo) * 8); in md_clear_badblocks()
8640 bb->count++; in md_clear_badblocks()
8666 memmove(p+lo+1, p+hi, (bb->count - hi) * 8); in md_clear_badblocks()
8667 bb->count -= (hi - lo - 1); in md_clear_badblocks()
8671 bb->changed = 1; in md_clear_badblocks()
8673 write_sequnlock_irq(&bb->lock); in md_clear_badblocks()
8694 void md_ack_all_badblocks(struct badblocks *bb) in md_ack_all_badblocks() argument
8696 if (bb->page == NULL || bb->changed) in md_ack_all_badblocks()
8699 write_seqlock_irq(&bb->lock); in md_ack_all_badblocks()
8701 if (bb->changed == 0 && bb->unacked_exist) { in md_ack_all_badblocks()
8702 u64 *p = bb->page; in md_ack_all_badblocks()
8704 for (i = 0; i < bb->count ; i++) { in md_ack_all_badblocks()
8711 bb->unacked_exist = 0; in md_ack_all_badblocks()
8713 write_sequnlock_irq(&bb->lock); in md_ack_all_badblocks()
8730 badblocks_show(struct badblocks *bb, char *page, int unack) in badblocks_show() argument
8734 u64 *p = bb->page; in badblocks_show()
8737 if (bb->shift < 0) in badblocks_show()
8741 seq = read_seqbegin(&bb->lock); in badblocks_show()
8746 while (len < PAGE_SIZE && i < bb->count) { in badblocks_show()
8756 (unsigned long long)s << bb->shift, in badblocks_show()
8757 length << bb->shift); in badblocks_show()
8760 bb->unacked_exist = 0; in badblocks_show()
8762 if (read_seqretry(&bb->lock, seq)) in badblocks_show()
8771 badblocks_store(struct badblocks *bb, const char *page, size_t len, int unack) in badblocks_store() argument
8801 md_clear_badblocks(bb, sector, length); in badblocks_store()
8805 if (md_set_badblocks(bb, sector, length, !unack)) in badblocks_store()