linux ядро ​​3.10, изменение данных страницы - PullRequest
0 голосов
/ 28 мая 2020

В ядре 3.10 у меня есть намерение изменять данные на лету: содержимое запросов на чтение / запись. Поскольку я работаю с RBD, я сосредоточился на части функции rbd_img_request_fill:

if (type == OBJ_REQUEST_BIO) {
        bio_list = data_desc;
        rbd_assert(img_offset == bio_list->bi_sector << SECTOR_SHIFT);
    } else {
        rbd_assert(type == OBJ_REQUEST_PAGES);
        pages = data_desc;
    }

Я решил выполнять здесь операции редактирования данных, а не bio_list и pages. Поскольку bio_list просто bio *bio_list, все в порядке.

Для доступа к страницам через BIO я использую что-то вроде:

struct bio_vec *bvec;

bio_for_each_segment(bvec, bio, iter) {

    u8 *dst = page_address(bvec.bv_page) + bvec.bv_offset;
    int len = bvec.bv_len;   

    // later rewriting len bytes of dst

Я знаю слой BIO и способ его итерации, однако:

  1. Есть ли рекомендуемый способ прохождения struct page **pages, позволяющий изменять данные буфера, как указано выше?
  2. Я предполагаю, что если я перезапишу данные в этих структурах, операция чтения / записи впоследствии будет выполняться с этими точными данные, это правильно?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...