Lines Matching refs:bd

33 #define bsg_dbg(bd, fmt, ...) \  argument
34 pr_debug("%s: " fmt, (bd)->name, ##__VA_ARGS__)
237 struct bsg_device *bd; in bsg_alloc_device() local
239 bd = kzalloc(sizeof(struct bsg_device), GFP_KERNEL); in bsg_alloc_device()
240 if (unlikely(!bd)) in bsg_alloc_device()
243 spin_lock_init(&bd->lock); in bsg_alloc_device()
244 bd->max_queue = BSG_DEFAULT_CMDS; in bsg_alloc_device()
245 INIT_HLIST_NODE(&bd->dev_list); in bsg_alloc_device()
246 return bd; in bsg_alloc_device()
249 static int bsg_put_device(struct bsg_device *bd) in bsg_put_device() argument
251 struct request_queue *q = bd->queue; in bsg_put_device()
255 if (!refcount_dec_and_test(&bd->ref_count)) { in bsg_put_device()
260 hlist_del(&bd->dev_list); in bsg_put_device()
263 bsg_dbg(bd, "tearing down\n"); in bsg_put_device()
268 kfree(bd); in bsg_put_device()
277 struct bsg_device *bd; in bsg_add_device() local
285 bd = bsg_alloc_device(); in bsg_add_device()
286 if (!bd) { in bsg_add_device()
291 bd->queue = rq; in bsg_add_device()
293 refcount_set(&bd->ref_count, 1); in bsg_add_device()
294 hlist_add_head(&bd->dev_list, bsg_dev_idx_hash(iminor(inode))); in bsg_add_device()
296 strncpy(bd->name, dev_name(rq->bsg_dev.class_dev), sizeof(bd->name) - 1); in bsg_add_device()
297 bsg_dbg(bd, "bound to <%s>, max queue %d\n", in bsg_add_device()
298 format_dev_t(buf, inode->i_rdev), bd->max_queue); in bsg_add_device()
300 return bd; in bsg_add_device()
305 struct bsg_device *bd; in __bsg_get_device() local
309 hlist_for_each_entry(bd, bsg_dev_idx_hash(minor), dev_list) { in __bsg_get_device()
310 if (bd->queue == q) { in __bsg_get_device()
311 refcount_inc(&bd->ref_count); in __bsg_get_device()
315 bd = NULL; in __bsg_get_device()
317 return bd; in __bsg_get_device()
322 struct bsg_device *bd; in bsg_get_device() local
332 bd = ERR_PTR(-ENODEV); in bsg_get_device()
336 bd = __bsg_get_device(iminor(inode), bcd->queue); in bsg_get_device()
337 if (!bd) in bsg_get_device()
338 bd = bsg_add_device(inode, bcd->queue, file); in bsg_get_device()
342 return bd; in bsg_get_device()
347 struct bsg_device *bd; in bsg_open() local
349 bd = bsg_get_device(inode, file); in bsg_open()
351 if (IS_ERR(bd)) in bsg_open()
352 return PTR_ERR(bd); in bsg_open()
354 file->private_data = bd; in bsg_open()
360 struct bsg_device *bd = file->private_data; in bsg_release() local
363 return bsg_put_device(bd); in bsg_release()
368 struct bsg_device *bd = file->private_data; in bsg_ioctl() local
377 return put_user(bd->max_queue, uarg); in bsg_ioctl()
386 spin_lock_irq(&bd->lock); in bsg_ioctl()
387 bd->max_queue = queue; in bsg_ioctl()
388 spin_unlock_irq(&bd->lock); in bsg_ioctl()
405 return scsi_cmd_ioctl(bd->queue, NULL, file->f_mode, cmd, uarg); in bsg_ioctl()
416 rq = bsg_map_hdr(bd->queue, &hdr, file->f_mode); in bsg_ioctl()
425 blk_execute_rq(bd->queue, NULL, rq, at_head); in bsg_ioctl()