Lines Matching defs:mmb
457 void mmb_init(struct mapping_metadata_bhs *mmb, struct address_space *mapping)
459 spin_lock_init(&mmb->lock);
460 INIT_LIST_HEAD(&mmb->list);
461 mmb->mapping = mapping;
465 static void __remove_assoc_queue(struct mapping_metadata_bhs *mmb,
468 lockdep_assert_held(&mmb->lock);
476 struct mapping_metadata_bhs *mmb;
488 mmb = READ_ONCE(bh->b_mmb);
489 if (mmb) {
490 spin_lock(&mmb->lock);
491 if (bh->b_mmb == mmb)
492 __remove_assoc_queue(mmb, bh);
493 spin_unlock(&mmb->lock);
499 bool mmb_has_buffers(struct mapping_metadata_bhs *mmb)
501 return !list_empty(&mmb->list);
507 * @mmb: the list of buffers to write
510 * that I/O. Basically, this is a convenience function for fsync(). @mmb is
526 int mmb_sync(struct mapping_metadata_bhs *mmb)
533 if (!mmb_has_buffers(mmb))
538 spin_lock(&mmb->lock);
539 while (!list_empty(&mmb->list)) {
540 bh = BH_ENTRY(mmb->list.next);
541 WARN_ON_ONCE(bh->b_mmb != mmb);
542 __remove_assoc_queue(mmb, bh);
548 bh->b_mmb = mmb;
551 spin_unlock(&mmb->lock);
568 spin_lock(&mmb->lock);
573 spin_unlock(&mmb->lock);
575 spin_lock(&mmb->lock);
580 __remove_assoc_queue(mmb, bh);
585 list_add(&bh->b_assoc_buffers, &mmb->list);
586 bh->b_mmb = mmb;
588 spin_unlock(&mmb->lock);
593 spin_lock(&mmb->lock);
595 spin_unlock(&mmb->lock);
622 * @mmb: The list of buffers to add the buffer to.
628 struct mapping_metadata_bhs *mmb)
632 spin_lock(&mmb->lock);
637 if (cmpxchg(&bh->b_mmb, NULL, mmb) != NULL) {
638 spin_unlock(&mmb->lock);
641 list_move_tail(&bh->b_assoc_buffers, &mmb->list);
642 spin_unlock(&mmb->lock);
716 void mmb_invalidate(struct mapping_metadata_bhs *mmb)
718 if (mmb_has_buffers(mmb)) {
719 spin_lock(&mmb->lock);
720 while (!list_empty(&mmb->list))
721 __remove_assoc_queue(mmb, BH_ENTRY(mmb->list.next));
722 spin_unlock(&mmb->lock);
1022 struct mapping_metadata_bhs *mmb;
1028 /* Protect us from mmb & inode getting freed while we work on it */
1030 mmb = READ_ONCE(bh->b_mmb);
1031 if (mmb)
1032 mapping_set_error(mmb->mapping, -EIO);