| 93 | } |
| 94 | |
| 95 | ssize_t rdev_writeat(const struct region_device *rd, const void *b, |
| 96 | size_t offset, size_t size) |
| 97 | { |
| 98 | const struct region_device *rdev; |
| 99 | struct region req = { |
| 100 | .offset = offset, |
| 101 | .size = size, |
| 102 | }; |
| 103 | |
| 104 | if (!normalize_and_ok(&rd->region, &req)) |
| 105 | return -1; |
| 106 | |
| 107 | rdev = rdev_root(rd); |
| 108 | |
| 109 | if (rdev->ops->writeat == NULL) |
| 110 | return -1; |
| 111 | |
| 112 | return rdev->ops->writeat(rdev, b, req.offset, req.size); |
| 113 | } |
| 114 | |
| 115 | ssize_t rdev_eraseat(const struct region_device *rd, size_t offset, |
| 116 | size_t size) |