Lines Matching defs:bb
21 * @bb: the badblocks structure that holds all badblock information
53 int badblocks_check(struct badblocks *bb, sector_t s, int sectors,
58 u64 *p = bb->page;
63 if (bb->shift > 0) {
65 s >>= bb->shift;
66 target += (1<<bb->shift) - 1;
67 target >>= bb->shift;
72 seq = read_seqbegin(&bb->lock);
75 hi = bb->count;
120 if (read_seqretry(&bb->lock, seq))
127 static void badblocks_update_acked(struct badblocks *bb)
129 u64 *p = bb->page;
133 if (!bb->unacked_exist)
136 for (i = 0; i < bb->count ; i++) {
144 bb->unacked_exist = 0;
149 * @bb: the badblocks structure that holds all badblock information
162 int badblocks_set(struct badblocks *bb, sector_t s, int sectors,
170 if (bb->shift < 0)
174 if (bb->shift) {
178 s >>= bb->shift;
179 next += (1<<bb->shift) - 1;
180 next >>= bb->shift;
184 write_seqlock_irqsave(&bb->lock, flags);
186 p = bb->page;
188 hi = bb->count;
234 if (sectors && hi < bb->count) {
264 if (sectors == 0 && hi < bb->count) {
278 (bb->count - hi - 1) * 8);
279 bb->count--;
286 if (bb->count >= MAX_BADBLOCKS) {
294 (bb->count - hi) * 8);
295 bb->count++;
305 bb->changed = 1;
307 bb->unacked_exist = 1;
309 badblocks_update_acked(bb);
310 write_sequnlock_irqrestore(&bb->lock, flags);
318 * @bb: the badblocks structure that holds all badblock information
330 int badblocks_clear(struct badblocks *bb, sector_t s, int sectors)
337 if (bb->shift > 0) {
344 s += (1<<bb->shift) - 1;
345 s >>= bb->shift;
346 target >>= bb->shift;
349 write_seqlock_irq(&bb->lock);
351 p = bb->page;
353 hi = bb->count;
378 if (bb->count >= MAX_BADBLOCKS) {
382 memmove(p+lo+1, p+lo, (bb->count - lo) * 8);
383 bb->count++;
411 memmove(p+lo+1, p+hi, (bb->count - hi) * 8);
412 bb->count -= (hi - lo - 1);
416 badblocks_update_acked(bb);
417 bb->changed = 1;
419 write_sequnlock_irq(&bb->lock);
426 * @bb: the badblocks structure that holds all badblock information
431 void ack_all_badblocks(struct badblocks *bb)
433 if (bb->page == NULL || bb->changed)
436 write_seqlock_irq(&bb->lock);
438 if (bb->changed == 0 && bb->unacked_exist) {
439 u64 *p = bb->page;
442 for (i = 0; i < bb->count ; i++) {
450 bb->unacked_exist = 0;
452 write_sequnlock_irq(&bb->lock);
458 * @bb: the badblocks structure that holds all badblock information
465 ssize_t badblocks_show(struct badblocks *bb, char *page, int unack)
469 u64 *p = bb->page;
472 if (bb->shift < 0)
476 seq = read_seqbegin(&bb->lock);
481 while (len < PAGE_SIZE && i < bb->count) {
492 (unsigned long long)s << bb->shift,
493 length << bb->shift);
496 bb->unacked_exist = 0;
498 if (read_seqretry(&bb->lock, seq))
507 * @bb: the badblocks structure that holds all badblock information
515 ssize_t badblocks_store(struct badblocks *bb, const char *page, size_t len,
535 if (badblocks_set(bb, sector, length, !unack))
542 static int __badblocks_init(struct device *dev, struct badblocks *bb,
545 bb->dev = dev;
546 bb->count = 0;
548 bb->shift = 0;
550 bb->shift = -1;
552 bb->page = devm_kzalloc(dev, PAGE_SIZE, GFP_KERNEL);
554 bb->page = kzalloc(PAGE_SIZE, GFP_KERNEL);
555 if (!bb->page) {
556 bb->shift = -1;
559 seqlock_init(&bb->lock);
566 * @bb: the badblocks structure that holds all badblock information
573 int badblocks_init(struct badblocks *bb, int enable)
575 return __badblocks_init(NULL, bb, enable);
579 int devm_init_badblocks(struct device *dev, struct badblocks *bb)
581 if (!bb)
583 return __badblocks_init(dev, bb, 1);
589 * @bb: the badblocks structure that holds all badblock information
591 void badblocks_exit(struct badblocks *bb)
593 if (!bb)
595 if (bb->dev)
596 devm_kfree(bb->dev, bb->page);
598 kfree(bb->page);
599 bb->page = NULL;