| 113 | } |
| 114 | |
| 115 | ssize_t rdev_eraseat(const struct region_device *rd, size_t offset, |
| 116 | size_t size) |
| 117 | { |
| 118 | const struct region_device *rdev; |
| 119 | struct region req = { |
| 120 | .offset = offset, |
| 121 | .size = size, |
| 122 | }; |
| 123 | |
| 124 | if (!normalize_and_ok(&rd->region, &req)) |
| 125 | return -1; |
| 126 | |
| 127 | rdev = rdev_root(rd); |
| 128 | |
| 129 | /* If the eraseat ptr is NULL we assume that the erase |
| 130 | * function was completed successfully. */ |
| 131 | if (rdev->ops->eraseat == NULL) |
| 132 | return size; |
| 133 | |
| 134 | return rdev->ops->eraseat(rdev, req.offset, req.size); |
| 135 | } |
| 136 | |
| 137 | int rdev_chain(struct region_device *child, const struct region_device *parent, |
| 138 | size_t offset, size_t size) |