Lines Matching refs:holder

532  * @holder: holder trying to claim @bdev
533 * @hops: holder ops
535 * Test whether @bdev can be claimed by @holder.
540 static bool bd_may_claim(struct block_device *bdev, void *holder,
549 * The same holder can always re-claim.
551 if (bdev->bd_holder == holder) {
560 * If the whole devices holder is set to bd_may_claim, a partition on
572 * @holder: holder trying to claim @bdev
573 * @hops: holder ops.
576 * holder and waits if another claiming is in progress. return, the caller
582 int bd_prepare_to_claim(struct block_device *bdev, void *holder,
587 if (WARN_ON_ONCE(!holder))
592 if (!bd_may_claim(bdev, holder, hops)) {
610 whole->bd_claiming = holder;
616 static void bd_clear_claiming(struct block_device *whole, void *holder)
620 BUG_ON(whole->bd_claiming != holder);
628 * @holder: holder that has claimed @bdev
629 * @hops: block device holder operations
632 * open by the holder and wake up all waiters for exclusive open to finish.
634 static void bd_finish_claiming(struct block_device *bdev, void *holder,
640 BUG_ON(!bd_may_claim(bdev, holder, hops));
643 * and bd_holder will be set to bd_may_claim before being set to holder
649 bdev->bd_holder = holder;
652 bd_clear_claiming(whole, holder);
659 * @holder: holder that has claimed @bdev
665 void bd_abort_claiming(struct block_device *bdev, void *holder)
668 bd_clear_claiming(bdev_whole(bdev), holder);
673 static void bd_end_claim(struct block_device *bdev, void *holder)
679 * Release a claim on the device. The holder fields are protected with
683 WARN_ON_ONCE(bdev->bd_holder != holder);
699 * If this was the last claim, remove holder link and unblock evpoll if
700 * it was a write holder.
782 int bdev_permission(dev_t dev, blk_mode_t mode, void *holder)
794 if (mode & BLK_OPEN_RESTRICT_WRITES && !holder)
801 if (WARN_ON_ONCE(IS_ERR(holder)))
913 * @holder: exclusive holder identifier
914 * @hops: holder operations
917 * Open the block device. If @holder is not %NULL, the block device is opened
918 * with exclusive access. Exclusive opens may nest for the same @holder.
926 int bdev_open(struct block_device *bdev, blk_mode_t mode, void *holder,
933 if (holder) {
935 ret = bd_prepare_to_claim(bdev, holder, hops);
961 if (holder) {
962 bd_finish_claiming(bdev, holder, hops);
966 * holder makes the write_holder state stick until all are
991 bdev_file->private_data = holder;
997 if (holder)
998 bd_abort_claiming(bdev, holder);
1034 struct file *bdev_file_open_by_dev(dev_t dev, blk_mode_t mode, void *holder,
1042 ret = bdev_permission(dev, mode, holder);
1059 ret = bdev_open(bdev, mode, holder, hops, bdev_file);
1071 void *holder,
1082 file = bdev_file_open_by_dev(dev, mode, holder, hops);
1097 void *holder = bdev_file->private_data;
1101 if (WARN_ON_ONCE(IS_ERR_OR_NULL(holder)))
1105 bd_end_claim(bdev, holder);
1111 void *holder = bdev_file->private_data;
1115 if (IS_ERR(holder))
1131 if (holder)