LINUX.ORG.RU

Сообщения ntldr

 

подводные камни в функции bio_map_kern

Форум — Development

Пишу target драйвер для device mapper. Столкнулся с падением при попытке освобождения bio контекста выделяемого bio_map_kern. В исходниках ядра примеров применения этой функции не обнаружил, в сети с подробной документацией туго. Пример кода:

static void dcrypt_endio(struct bio *clone, int status)
{
	dc_io  *io = clone->bi_private;
	dc_dev *dc = io->target->private;
	struct bio_vec *bv; 
	int             i;
	char           *buff, *data;
	unsigned long   flags;

	if (unlikely(!bio_flagged(clone, BIO_UPTODATE) && !status)) {
		DbgMsg("EIO\n");
		status = -EIO;
	}
	
	if (unlikely(status))
		goto out;
	
	if (bio_data_dir(io->base_io) == READ) 
	{
		buff = io->data;
		
		bio_for_each_segment(bv, io->base_io, i) {
			data = bvec_kmap_irq(bv, &flags);
			memcpy(data, buff, bv->bv_len); buff += bv->bv_len;
			flush_dcache_page(bv->bv_page);
			bvec_kunmap_irq(data, &flags);
		}
	}

out:
	DbgMsg("dcrypt_endio-1 : %d\n", status);
//	bio_put(clone);
	dcrypt_complete_io(io, status);
	
}

static void dcrypt_do_io(dc_io *io, char *buff, u32 size)
{
	dc_dev     *dc  = io->target->private;
	struct bio *bio = io->base_io;
	struct bio *clone;
	sector_t    sector = bio->bi_sector + io->target->begin;
	struct request_queue *q = bdev_get_queue(dc->orig_dev->bdev);
	
	clone = bio_map_kern(q, buff, size, GFP_NOIO);		
	if (IS_ERR(clone)) {
		DbgMsg("clone is not mapped\n");
		dcrypt_io_complete(io, -ENOMEM);
		return;
	}
	
	clone->bi_private = io;
	clone->bi_end_io  = dcrypt_endio;
	clone->bi_bdev    = dc->orig_dev->bdev;
	clone->bi_rw      = bio->bi_rw;

	clone->bi_sector = DC_AREA_SIZE + sector;

	DbgMsg("dcrypt_do_io %x\n", clone);
	generic_make_request(clone); 
}
Если раскомментировать bio_put(clone), то система падает. Кто-нибудь с этим сталкивался? Ядро 2.6.27, Ubuntu.

ntldr
()

DiskCryptor 0.2.5 beta

Форум — Talks

DiskCryptor - единственное полностью открытое решение, позволяющее шифровать все дисковые разделы, включая системный. Программа является заменой проприетарных DriveCrypt Plus pack и PGP WDE. Для шифрования используется алгоритм AES256 в LRW режиме, при этом формат тома полностью совместим с TrueCrypt, благодаря чему вы можете открыть зашифрованый раздел на Linux при помощи TrueCrypt.

Программа обладает следующими преимуществами перед TrueCrypt:
1 - Возможность шифрования системного раздела.
2 - В 1.5-2 раза большая скорость работы.
3 - Полная поддержка мультипроцессорных систем.
4 - Свободная лицензия GPL 3.

Подробности

Перемещено anonymous_incognito из OpenSource

>>> подробнее

ntldr
()

RSS подписка на новые темы