Lines Matching refs:mmb

481 void mmb_init(struct mapping_metadata_bhs *mmb, struct address_space *mapping)  in mmb_init()  argument
483 spin_lock_init(&mmb->lock); in mmb_init()
484 INIT_LIST_HEAD(&mmb->list); in mmb_init()
485 mmb->mapping = mapping; in mmb_init()
489 static void __remove_assoc_queue(struct mapping_metadata_bhs *mmb, in __remove_assoc_queue() argument
492 lockdep_assert_held(&mmb->lock); in __remove_assoc_queue()
500 struct mapping_metadata_bhs *mmb; in remove_assoc_queue() local
512 mmb = READ_ONCE(bh->b_mmb); in remove_assoc_queue()
513 if (mmb) { in remove_assoc_queue()
514 spin_lock(&mmb->lock); in remove_assoc_queue()
515 if (bh->b_mmb == mmb) in remove_assoc_queue()
516 __remove_assoc_queue(mmb, bh); in remove_assoc_queue()
517 spin_unlock(&mmb->lock); in remove_assoc_queue()
523 bool mmb_has_buffers(struct mapping_metadata_bhs *mmb) in mmb_has_buffers() argument
525 return !list_empty(&mmb->list); in mmb_has_buffers()
550 int mmb_sync(struct mapping_metadata_bhs *mmb) in mmb_sync() argument
557 if (!mmb_has_buffers(mmb)) in mmb_sync()
562 spin_lock(&mmb->lock); in mmb_sync()
563 while (!list_empty(&mmb->list)) { in mmb_sync()
564 bh = BH_ENTRY(mmb->list.next); in mmb_sync()
565 WARN_ON_ONCE(bh->b_mmb != mmb); in mmb_sync()
566 __remove_assoc_queue(mmb, bh); in mmb_sync()
572 bh->b_mmb = mmb; in mmb_sync()
575 spin_unlock(&mmb->lock); in mmb_sync()
592 spin_lock(&mmb->lock); in mmb_sync()
597 spin_unlock(&mmb->lock); in mmb_sync()
599 spin_lock(&mmb->lock); in mmb_sync()
604 __remove_assoc_queue(mmb, bh); in mmb_sync()
609 list_add(&bh->b_assoc_buffers, &mmb->list); in mmb_sync()
610 bh->b_mmb = mmb; in mmb_sync()
612 spin_unlock(&mmb->lock); in mmb_sync()
617 spin_lock(&mmb->lock); in mmb_sync()
619 spin_unlock(&mmb->lock); in mmb_sync()
638 int mmb_fsync_noflush(struct file *file, struct mapping_metadata_bhs *mmb, in mmb_fsync_noflush() argument
649 if (mmb) in mmb_fsync_noflush()
650 ret = mmb_sync(mmb); in mmb_fsync_noflush()
684 int mmb_fsync(struct file *file, struct mapping_metadata_bhs *mmb, in mmb_fsync() argument
690 ret = mmb_fsync_noflush(file, mmb, start, end, datasync); in mmb_fsync()
717 struct mapping_metadata_bhs *mmb) in mmb_mark_buffer_dirty() argument
721 spin_lock(&mmb->lock); in mmb_mark_buffer_dirty()
722 list_move_tail(&bh->b_assoc_buffers, &mmb->list); in mmb_mark_buffer_dirty()
723 bh->b_mmb = mmb; in mmb_mark_buffer_dirty()
724 spin_unlock(&mmb->lock); in mmb_mark_buffer_dirty()
798 void mmb_invalidate(struct mapping_metadata_bhs *mmb) in mmb_invalidate() argument
800 if (mmb_has_buffers(mmb)) { in mmb_invalidate()
801 spin_lock(&mmb->lock); in mmb_invalidate()
802 while (!list_empty(&mmb->list)) in mmb_invalidate()
803 __remove_assoc_queue(mmb, BH_ENTRY(mmb->list.next)); in mmb_invalidate()
804 spin_unlock(&mmb->lock); in mmb_invalidate()