Lines Matching refs:dev
69 int fd = dev_fd(where->dev); in _io()
75 dev_name(where->dev)); in _io()
92 dev_name(where->dev), (uint64_t) where->start, in _io()
106 " at %" PRIu64 ": %s", dev_name(where->dev), in _io()
132 static int _get_block_size(struct device *dev, unsigned int *size) in _get_block_size() argument
134 const char *name = dev_name(dev); in _get_block_size()
141 if ((dev->block_size == -1)) { in _get_block_size()
143 if (prop_dictionary_recv_ioctl(dev_fd(dev), DIOCGDISKINFO, &disk_dict)) { in _get_block_size()
144 if (ioctl(dev_fd(dev), DIOCGDINFO, &lab) < 0) { in _get_block_size()
145 dev->block_size = DEV_BSIZE; in _get_block_size()
147 dev->block_size = lab.d_secsize; in _get_block_size()
151 dev->block_size = secsize; in _get_block_size()
154 if (ioctl(dev_fd(dev), BLKBSZGET, &dev->block_size) < 0) { in _get_block_size()
159 log_debug("%s: block size is %u bytes", name, dev->block_size); in _get_block_size()
162 *size = (unsigned int) dev->block_size; in _get_block_size()
197 if (!(where->dev->flags & DEV_REGULAR) && in _aligned_io()
198 !_get_block_size(where->dev, &block_size)) in _aligned_io()
246 static int _dev_get_size_file(const struct device *dev, uint64_t *size) in _dev_get_size_file() argument
248 const char *name = dev_name(dev); in _dev_get_size_file()
264 static int _dev_get_size_dev(const struct device *dev, uint64_t *size) in _dev_get_size_dev() argument
267 const char *name = dev_name(dev); in _dev_get_size_dev()
315 static int _dev_read_ahead_dev(struct device *dev, uint32_t *read_ahead) in _dev_read_ahead_dev() argument
320 if (dev->read_ahead != -1) { in _dev_read_ahead_dev()
321 *read_ahead = (uint32_t) dev->read_ahead; in _dev_read_ahead_dev()
325 if (!dev_open(dev)) in _dev_read_ahead_dev()
328 if (ioctl(dev->fd, BLKRAGET, &read_ahead_long) < 0) { in _dev_read_ahead_dev()
329 log_sys_error("ioctl BLKRAGET", dev_name(dev)); in _dev_read_ahead_dev()
330 if (!dev_close(dev)) in _dev_read_ahead_dev()
335 if (!dev_close(dev)) in _dev_read_ahead_dev()
339 dev->read_ahead = read_ahead_long; in _dev_read_ahead_dev()
342 dev_name(dev), *read_ahead); in _dev_read_ahead_dev()
351 int dev_get_size(const struct device *dev, uint64_t *size) in dev_get_size() argument
353 if (!dev) in dev_get_size()
356 if ((dev->flags & DEV_REGULAR)) in dev_get_size()
357 return _dev_get_size_file(dev, size); in dev_get_size()
359 return _dev_get_size_dev(dev, size); in dev_get_size()
362 int dev_get_read_ahead(struct device *dev, uint32_t *read_ahead) in dev_get_read_ahead() argument
364 if (!dev) in dev_get_read_ahead()
367 if (dev->flags & DEV_REGULAR) { in dev_get_read_ahead()
372 return _dev_read_ahead_dev(dev, read_ahead); in dev_get_read_ahead()
405 void dev_flush(struct device *dev) in dev_flush() argument
408 if (!(dev->flags & DEV_REGULAR) && ioctl(dev->fd, BLKFLSBUF, 0) >= 0) in dev_flush()
412 if (fsync(dev->fd) >= 0) in dev_flush()
418 int dev_open_flags(struct device *dev, int flags, int direct, int quiet) in dev_open_flags() argument
430 if (dev->fd >= 0) { in dev_open_flags()
431 if (((dev->flags & DEV_OPENED_RW) || !need_rw) && in dev_open_flags()
432 ((dev->flags & DEV_OPENED_EXCL) || !need_excl)) { in dev_open_flags()
433 dev->open_count++; in dev_open_flags()
437 if (dev->open_count && !need_excl) { in dev_open_flags()
440 dev_name(dev)); in dev_open_flags()
441 dev->open_count++; in dev_open_flags()
444 dev_close_immediate(dev); in dev_open_flags()
449 dev_name(dev)); in dev_open_flags()
451 if (dev->flags & DEV_REGULAR) in dev_open_flags()
452 name = dev_name(dev); in dev_open_flags()
453 else if (!(name = dev_name_confirmed(dev, quiet))) in dev_open_flags()
456 if (!(dev->flags & DEV_REGULAR)) { in dev_open_flags()
461 if (buf.st_rdev != dev->dev) { in dev_open_flags()
469 if (!(dev->flags & DEV_O_DIRECT_TESTED)) in dev_open_flags()
470 dev->flags |= DEV_O_DIRECT; in dev_open_flags()
472 if ((dev->flags & DEV_O_DIRECT)) in dev_open_flags()
479 if (!(dev->flags & DEV_REGULAR)) in dev_open_flags()
483 if ((dev->fd = open(name, flags, 0777)) < 0) { in dev_open_flags()
485 if (direct && !(dev->flags & DEV_O_DIRECT_TESTED)) { in dev_open_flags()
487 if ((dev->fd = open(name, flags, 0777)) >= 0) { in dev_open_flags()
488 dev->flags &= ~DEV_O_DIRECT; in dev_open_flags()
505 dev->flags |= DEV_O_DIRECT_TESTED; in dev_open_flags()
507 dev->open_count++; in dev_open_flags()
508 dev->flags &= ~DEV_ACCESSED_W; in dev_open_flags()
511 dev->flags |= DEV_OPENED_RW; in dev_open_flags()
513 dev->flags &= ~DEV_OPENED_RW; in dev_open_flags()
516 dev->flags |= DEV_OPENED_EXCL; in dev_open_flags()
518 dev->flags &= ~DEV_OPENED_EXCL; in dev_open_flags()
520 if (!(dev->flags & DEV_REGULAR) && in dev_open_flags()
521 ((fstat(dev->fd, &buf) < 0) || (buf.st_rdev != dev->dev))) { in dev_open_flags()
523 dev_close_immediate(dev); in dev_open_flags()
528 if (!(dev->flags & DEV_REGULAR)) in dev_open_flags()
529 dev_flush(dev); in dev_open_flags()
533 dev->end = lseek(dev->fd, (off_t) 0, SEEK_END); in dev_open_flags()
535 dm_list_add(&_open_devices, &dev->open_list); in dev_open_flags()
537 log_debug("Opened %s %s%s%s", dev_name(dev), in dev_open_flags()
538 dev->flags & DEV_OPENED_RW ? "RW" : "RO", in dev_open_flags()
539 dev->flags & DEV_OPENED_EXCL ? " O_EXCL" : "", in dev_open_flags()
540 dev->flags & DEV_O_DIRECT ? " O_DIRECT" : ""); in dev_open_flags()
545 int dev_open_quiet(struct device *dev) in dev_open_quiet() argument
551 return dev_open_flags(dev, flags, 1, 1); in dev_open_quiet()
554 int dev_open(struct device *dev) in dev_open() argument
560 return dev_open_flags(dev, flags, 1, 0); in dev_open()
563 int dev_test_excl(struct device *dev) in dev_test_excl() argument
571 r = dev_open_flags(dev, flags, 1, 1); in dev_test_excl()
573 dev_close_immediate(dev); in dev_test_excl()
578 static void _close(struct device *dev) in _close() argument
580 if (close(dev->fd)) in _close()
581 log_sys_error("close", dev_name(dev)); in _close()
582 dev->fd = -1; in _close()
583 dev->block_size = -1; in _close()
584 dm_list_del(&dev->open_list); in _close()
586 log_debug("Closed %s", dev_name(dev)); in _close()
588 if (dev->flags & DEV_ALLOCED) { in _close()
589 dm_free((void *) dm_list_item(dev->aliases.n, struct str_list)-> in _close()
591 dm_free(dev->aliases.n); in _close()
592 dm_free(dev); in _close()
596 static int _dev_close(struct device *dev, int immediate) in _dev_close() argument
600 if (dev->fd < 0) { in _dev_close()
602 "which is not open.", dev_name(dev)); in _dev_close()
607 if (dev->flags & DEV_ACCESSED_W) in _dev_close()
608 dev_flush(dev); in _dev_close()
611 if (dev->open_count > 0) in _dev_close()
612 dev->open_count--; in _dev_close()
614 if (immediate && dev->open_count) in _dev_close()
616 dev_name(dev)); in _dev_close()
620 (dev->open_count < 1 && in _dev_close()
621 (!(info = info_from_pvid(dev->pvid, 0)) || in _dev_close()
624 _close(dev); in _dev_close()
629 int dev_close(struct device *dev) in dev_close() argument
631 return _dev_close(dev, 0); in dev_close()
634 int dev_close_immediate(struct device *dev) in dev_close_immediate() argument
636 return _dev_close(dev, 1); in dev_close_immediate()
642 struct device *dev; in dev_close_all() local
645 dev = dm_list_struct_base(doh, struct device, open_list); in dev_close_all()
646 if (dev->open_count < 1) in dev_close_all()
647 _close(dev); in dev_close_all()
651 int dev_read(struct device *dev, uint64_t offset, size_t len, void *buffer) in dev_read() argument
655 if (!dev->open_count) in dev_read()
658 where.dev = dev; in dev_read()
670 int dev_read_circular(struct device *dev, uint64_t offset, size_t len, in dev_read_circular() argument
673 if (!dev_read(dev, offset, len, buf)) { in dev_read_circular()
674 log_error("Read from %s failed", dev_name(dev)); in dev_read_circular()
685 if (!dev_read(dev, offset2, len2, buf + len)) { in dev_read_circular()
687 dev_name(dev)); in dev_read_circular()
699 int dev_append(struct device *dev, size_t len, void *buffer) in dev_append() argument
703 if (!dev->open_count) in dev_append()
706 r = dev_write(dev, dev->end, len, buffer); in dev_append()
707 dev->end += (uint64_t) len; in dev_append()
710 dev_flush(dev); in dev_append()
715 int dev_write(struct device *dev, uint64_t offset, size_t len, void *buffer) in dev_write() argument
719 if (!dev->open_count) in dev_write()
722 where.dev = dev; in dev_write()
726 dev->flags |= DEV_ACCESSED_W; in dev_write()
731 int dev_set(struct device *dev, uint64_t offset, size_t len, int value) in dev_set() argument
736 if (!dev_open(dev)) in dev_set()
741 dev_name(dev), offset, len); in dev_set()
744 " sectors", dev_name(dev), offset >> SECTOR_SHIFT, in dev_set()
750 if (!dev_write(dev, offset, s, buffer)) in dev_set()
760 dev->flags |= DEV_ACCESSED_W; in dev_set()
762 if (!dev_close(dev)) in dev_set()