Lines Matching defs:holder
1042 * @holder: holder trying to claim @bdev
1044 * Test whether @bdev can be claimed by @holder.
1053 void *holder)
1055 if (bdev->bd_holder == holder)
1056 return true; /* already a holder */
1074 * @holder: holder trying to claim @bdev
1077 * holder and waits if another claiming is in progress. return, the caller
1084 void *holder)
1089 if (!bd_may_claim(bdev, whole, holder)) {
1107 whole->bd_claiming = holder;
1134 static void bd_clear_claiming(struct block_device *whole, void *holder)
1138 BUG_ON(whole->bd_claiming != holder);
1147 * @holder: holder that has claimed @bdev
1150 * open by the holder and wake up all waiters for exclusive open to finish.
1153 struct block_device *whole, void *holder)
1156 BUG_ON(!bd_may_claim(bdev, whole, holder));
1159 * and bd_holder will be set to bd_may_claim before being set to holder
1164 bdev->bd_holder = holder;
1165 bd_clear_claiming(whole, holder);
1173 * @holder: holder that has claimed @bdev
1180 void *holder)
1183 bd_clear_claiming(whole, holder);
1198 struct bd_holder_disk *holder;
1200 list_for_each_entry(holder, &bdev->bd_holder_disks, list)
1201 if (holder->disk == disk)
1202 return holder;
1225 * - from "slaves" directory of the holder @disk to the claimed @bdev
1226 * - from "holders" directory of the @bdev to the holder @disk
1246 struct bd_holder_disk *holder;
1257 holder = bd_find_holder_disk(bdev, disk);
1258 if (holder) {
1259 holder->refcnt++;
1263 holder = kzalloc(sizeof(*holder), GFP_KERNEL);
1264 if (!holder) {
1269 INIT_LIST_HEAD(&holder->list);
1270 holder->disk = disk;
1271 holder->refcnt = 1;
1282 * the holder directory. Hold on to it.
1286 list_add(&holder->list, &bdev->bd_holder_disks);
1292 kfree(holder);
1311 struct bd_holder_disk *holder;
1315 holder = bd_find_holder_disk(bdev, disk);
1317 if (!WARN_ON_ONCE(holder == NULL) && !--holder->refcnt) {
1322 list_del_init(&holder->list);
1323 kfree(holder);
1467 static int __blkdev_get(struct block_device *bdev, fmode_t mode, void *holder,
1492 WARN_ON_ONCE(!holder);
1497 ret = bd_prepare_to_claim(bdev, claiming, holder);
1579 bd_finish_claiming(bdev, claiming, holder);
1582 * Block event polling for write claims if requested. Any write holder
1613 bd_abort_claiming(bdev, claiming, holder);
1631 * @holder: exclusive holder identifier
1635 * @holder is invalid. Exclusive opens may nest for the same @holder.
1646 static int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder)
1658 ret =__blkdev_get(bdev, mode, holder, 0);
1672 * @holder: exclusive holder identifier
1675 * and @holder are identical to blkdev_get().
1686 void *holder)
1695 err = blkdev_get(bdev, mode, holder);
1712 * @holder: exclusive holder identifier
1715 * @holder are identical to blkdev_get().
1730 struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder)
1739 err = blkdev_get(bdev, mode, holder);
1832 * Release a claim on the device. The holder fields
1850 * If this was the last claim, remove holder link and
1851 * unblock evpoll if it was a write holder.