Пример #1
0
static int __init imgrement_init(void)
{
    char* err;
    struct imgrement_device *dev;

    imgrement_device = kzalloc(sizeof(struct imgrement_device), GFP_KERNEL);
    _astgo(imgrement_device != NULL, "Error allocating", err, init_error);
    dev = imgrement_device;

    dev->major = register_blkdev(0, DRIVER_NAME);
    _astgo(dev->major > 0, "Error register block device", err, init_error);

    dev->base_dev = blkdev_get_by_path("/dev/sdb", FMODE_READ, NULL);
    _astgo(dev->base_dev != NULL, "Error getting base block device", err, init_error);

    dev->base_queue = bdev_get_queue(dev->base_dev);
    _astgo(dev->base_queue != NULL, "Error getting queue", err, init_error);
    dev->orig_req_fn = dev->base_queue->make_request_fn;
    dev->base_queue->make_request_fn = trace_request_fn;

    LOG("%s trace initialization succeeded", dev->base_dev->bd_disk->disk_name);
    return 0;

init_error:
    LOG_VAR(err);
    imgrement_exit();
    return -1;
}
Пример #2
0
struct io_activity *extract_ioa(struct bio *bio)
{
    int next_sector;
    bvec_iter iter;
    bio_vec bvec;
    char *err;
    struct block_delta *delta;

    struct io_activity *ioa = create_ioa(bio);
    _astgo(ioa != NULL, "Error creating io_activity", err, extract_error);
    next_sector = bio_sector(bio);
    delta = ioa->deltas;

    bio_for_each_segment(bvec, bio, iter) {
        next_sector = fill_delta(delta, bio, iter, next_sector);
        _astgo(next_sector >= 0, "Error filling delta->data", err, extract_error);
        delta++;
    }
Пример #3
0
struct io_activity *create_ioa(struct bio *bio)
{
    char *err;
    struct io_activity *ioa = vmalloc(sizeof(struct io_activity));
    _astgo(ioa != NULL, "Error allocating io_activity", err, create_ioa_error);

    ioa->rw = bio_data_dir(bio);
    ioa->data_size = bio_size(bio);
    ioa->delta_count = bio_cnt(bio);

    if (ioa->delta_count != 0) {
        ioa->deltas = vmalloc(ioa->delta_count * sizeof(struct block_delta));
        _astgo(ioa->deltas != NULL, "Error allocating deltas", err, create_ioa_error);
    } else ioa->deltas = NULL;

    return ioa;

create_ioa_error:
    LOG_VAR(err);
    LOG("Error creating ioa from bio with: %lu sector, %d size", bio_sector(bio), bio_size(bio));
    ast_vfree(ioa->deltas);
    ast_vfree(ioa);
    return NULL;
}