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;
73 seq = read_seqbegin(&bb->lock);
76 hi = bb->count;
121 if (read_seqretry(&bb->lock, seq))
128 static void badblocks_update_acked(struct badblocks *bb)
130 u64 *p = bb->page;
134 if (!bb->unacked_exist)
137 for (i = 0; i < bb->count ; i++) {
145 bb->unacked_exist = 0;
150 * @bb: the badblocks structure that holds all badblock information
163 int badblocks_set(struct badblocks *bb, sector_t s, int sectors,
171 if (bb->shift < 0)
175 if (bb->shift) {
179 s >>= bb->shift;
180 next += (1<<bb->shift) - 1;
181 next >>= bb->shift;
185 write_seqlock_irqsave(&bb->lock, flags);
187 p = bb->page;
189 hi = bb->count;
235 if (sectors && hi < bb->count) {
265 if (sectors == 0 && hi < bb->count) {
279 (bb->count - hi - 1) * 8);
280 bb->count--;
287 if (bb->count >= MAX_BADBLOCKS) {
295 (bb->count - hi) * 8);
296 bb->count++;
306 bb->changed = 1;
308 bb->unacked_exist = 1;
310 badblocks_update_acked(bb);
311 write_sequnlock_irqrestore(&bb->lock, flags);
319 * @bb: the badblocks structure that holds all badblock information
331 int badblocks_clear(struct badblocks *bb, sector_t s, int sectors)
338 if (bb->shift > 0) {
345 s += (1<<bb->shift) - 1;
346 s >>= bb->shift;
347 target >>= bb->shift;
351 write_seqlock_irq(&bb->lock);
353 p = bb->page;
355 hi = bb->count;
380 if (bb->count >= MAX_BADBLOCKS) {
384 memmove(p+lo+1, p+lo, (bb->count - lo) * 8);
385 bb->count++;
413 memmove(p+lo+1, p+hi, (bb->count - hi) * 8);
414 bb->count -= (hi - lo - 1);
418 badblocks_update_acked(bb);
419 bb->changed = 1;
421 write_sequnlock_irq(&bb->lock);
428 * @bb: the badblocks structure that holds all badblock information
433 void ack_all_badblocks(struct badblocks *bb)
435 if (bb->page == NULL || bb->changed)
438 write_seqlock_irq(&bb->lock);
440 if (bb->changed == 0 && bb->unacked_exist) {
441 u64 *p = bb->page;
444 for (i = 0; i < bb->count ; i++) {
452 bb->unacked_exist = 0;
454 write_sequnlock_irq(&bb->lock);
460 * @bb: the badblocks structure that holds all badblock information
467 ssize_t badblocks_show(struct badblocks *bb, char *page, int unack)
471 u64 *p = bb->page;
474 if (bb->shift < 0)
478 seq = read_seqbegin(&bb->lock);
483 while (len < PAGE_SIZE && i < bb->count) {
494 (unsigned long long)s << bb->shift,
495 length << bb->shift);
498 bb->unacked_exist = 0;
500 if (read_seqretry(&bb->lock, seq))
509 * @bb: the badblocks structure that holds all badblock information
517 ssize_t badblocks_store(struct badblocks *bb, const char *page, size_t len,
537 if (badblocks_set(bb, sector, length, !unack))
544 static int __badblocks_init(struct device *dev, struct badblocks *bb,
547 bb->dev = dev;
548 bb->count = 0;
550 bb->shift = 0;
552 bb->shift = -1;
554 bb->page = devm_kzalloc(dev, PAGE_SIZE, GFP_KERNEL);
556 bb->page = kzalloc(PAGE_SIZE, GFP_KERNEL);
557 if (!bb->page) {
558 bb->shift = -1;
561 seqlock_init(&bb->lock);
568 * @bb: the badblocks structure that holds all badblock information
575 int badblocks_init(struct badblocks *bb, int enable)
577 return __badblocks_init(NULL, bb, enable);
581 int devm_init_badblocks(struct device *dev, struct badblocks *bb)
583 if (!bb)
585 return __badblocks_init(dev, bb, 1);
591 * @bb: the badblocks structure that holds all badblock information
593 void badblocks_exit(struct badblocks *bb)
595 if (!bb)
597 if (bb->dev)
598 devm_kfree(bb->dev, bb->page);
600 kfree(bb->page);
601 bb->page = NULL;