Lines Matching refs:bb
1366 static int md_set_badblocks(struct badblocks *bb, sector_t s, int sectors,
1485 u64 bb = le64_to_cpu(*bbp); in super_1_load() local
1486 int count = bb & (0x3ff); in super_1_load()
1487 u64 sector = bb >> 10; in super_1_load()
1490 if (bb + 1 == 0) in super_1_load()
1773 struct badblocks *bb = &rdev->badblocks; in super_1_sync() local
1775 u64 *p = bb->page; in super_1_sync()
1777 if (bb->changed) { in super_1_sync()
1781 seq = read_seqbegin(&bb->lock); in super_1_sync()
1785 for (i = 0 ; i < bb->count ; i++) { in super_1_sync()
1791 bb->changed = 0; in super_1_sync()
1792 if (read_seqretry(&bb->lock, seq)) in super_1_sync()
1795 bb->sector = (rdev->sb_start + in super_1_sync()
1797 bb->size = le16_to_cpu(sb->bblog_size); in super_1_sync()
3064 badblocks_show(struct badblocks *bb, char *page, int unack);
3066 badblocks_store(struct badblocks *bb, const char *page, size_t len, int unack);
8524 int md_is_badblock(struct badblocks *bb, sector_t s, int sectors, in md_is_badblock() argument
8529 u64 *p = bb->page; in md_is_badblock()
8534 if (bb->shift > 0) { in md_is_badblock()
8536 s >>= bb->shift; in md_is_badblock()
8537 target += (1<<bb->shift) - 1; in md_is_badblock()
8538 target >>= bb->shift; in md_is_badblock()
8544 seq = read_seqbegin(&bb->lock); in md_is_badblock()
8547 hi = bb->count; in md_is_badblock()
8590 if (read_seqretry(&bb->lock, seq)) in md_is_badblock()
8604 static int md_set_badblocks(struct badblocks *bb, sector_t s, int sectors, in md_set_badblocks() argument
8612 if (bb->shift < 0) in md_set_badblocks()
8616 if (bb->shift) { in md_set_badblocks()
8619 s >>= bb->shift; in md_set_badblocks()
8620 next += (1<<bb->shift) - 1; in md_set_badblocks()
8621 next >>= bb->shift; in md_set_badblocks()
8625 write_seqlock_irqsave(&bb->lock, flags); in md_set_badblocks()
8627 p = bb->page; in md_set_badblocks()
8629 hi = bb->count; in md_set_badblocks()
8673 if (sectors && hi < bb->count) { in md_set_badblocks()
8701 if (sectors == 0 && hi < bb->count) { in md_set_badblocks()
8713 (bb->count - hi - 1) * 8); in md_set_badblocks()
8714 bb->count--; in md_set_badblocks()
8720 if (bb->count >= MD_MAX_BADBLOCKS) { in md_set_badblocks()
8727 (bb->count - hi) * 8); in md_set_badblocks()
8728 bb->count++; in md_set_badblocks()
8738 bb->changed = 1; in md_set_badblocks()
8740 bb->unacked_exist = 1; in md_set_badblocks()
8741 write_sequnlock_irqrestore(&bb->lock, flags); in md_set_badblocks()
8773 static int md_clear_badblocks(struct badblocks *bb, sector_t s, int sectors) in md_clear_badblocks() argument
8780 if (bb->shift > 0) { in md_clear_badblocks()
8787 s += (1<<bb->shift) - 1; in md_clear_badblocks()
8788 s >>= bb->shift; in md_clear_badblocks()
8789 target >>= bb->shift; in md_clear_badblocks()
8793 write_seqlock_irq(&bb->lock); in md_clear_badblocks()
8795 p = bb->page; in md_clear_badblocks()
8797 hi = bb->count; in md_clear_badblocks()
8820 if (bb->count >= MD_MAX_BADBLOCKS) { in md_clear_badblocks()
8824 memmove(p+lo+1, p+lo, (bb->count - lo) * 8); in md_clear_badblocks()
8825 bb->count++; in md_clear_badblocks()
8851 memmove(p+lo+1, p+hi, (bb->count - hi) * 8); in md_clear_badblocks()
8852 bb->count -= (hi - lo - 1); in md_clear_badblocks()
8856 bb->changed = 1; in md_clear_badblocks()
8858 write_sequnlock_irq(&bb->lock); in md_clear_badblocks()
8879 void md_ack_all_badblocks(struct badblocks *bb) in md_ack_all_badblocks() argument
8881 if (bb->page == NULL || bb->changed) in md_ack_all_badblocks()
8884 write_seqlock_irq(&bb->lock); in md_ack_all_badblocks()
8886 if (bb->changed == 0 && bb->unacked_exist) { in md_ack_all_badblocks()
8887 u64 *p = bb->page; in md_ack_all_badblocks()
8889 for (i = 0; i < bb->count ; i++) { in md_ack_all_badblocks()
8896 bb->unacked_exist = 0; in md_ack_all_badblocks()
8898 write_sequnlock_irq(&bb->lock); in md_ack_all_badblocks()
8915 badblocks_show(struct badblocks *bb, char *page, int unack) in badblocks_show() argument
8919 u64 *p = bb->page; in badblocks_show()
8922 if (bb->shift < 0) in badblocks_show()
8926 seq = read_seqbegin(&bb->lock); in badblocks_show()
8931 while (len < PAGE_SIZE && i < bb->count) { in badblocks_show()
8941 (unsigned long long)s << bb->shift, in badblocks_show()
8942 length << bb->shift); in badblocks_show()
8945 bb->unacked_exist = 0; in badblocks_show()
8947 if (read_seqretry(&bb->lock, seq)) in badblocks_show()
8956 badblocks_store(struct badblocks *bb, const char *page, size_t len, int unack) in badblocks_store() argument
8986 md_clear_badblocks(bb, sector, length); in badblocks_store()
8990 if (md_set_badblocks(bb, sector, length, !unack)) in badblocks_store()