| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #30 : 23-05-2008 07:12 »  |  | 
 
 по формуле - вроде нет. |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #31 : 26-05-2008 06:49 »  |  | 
 
 А не проще ли использовать табличный метод? Нужно всего 256 байт... char bits[256] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, // первая строка
 .... // каждая след. строка будет из значений bits[номер строки] + bits[номер элемента в строке]
 };
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #32 : 26-05-2008 07:09 »  |  | 
 
 RXL, мне пока место экономить не нужно   а вот узнать текущий bitmap не мешало бы   s_bmap_nr; /* Количество bitmap-блоков, необходимых для отслеживания каждого блока в файловой системе */ вот не пойму как отследить? |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #33 : 26-05-2008 07:15 »  |  | 
 
 256 байт - не большой расход, а сокращает и ускоряет код значительно. Можно минимизировать: использовать только одну строку в 16 байт и конвертировать по ниблам. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #34 : 26-05-2008 07:26 »  |  | 
 
 Ром, там и так табличный поиск, просто таблица заполняется компом, а не вручную |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #35 : 26-05-2008 08:28 »  |  | 
 
 хм, по идеи текущий битмап должен выглядеть вот так: buff2 = (super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * 1 + ((unsigned char*)(super->s_block_count / (super->s_blocksize * 8))));
но функция byte_c->GetZeroBitInBuf(buff2,len2); все равно валится по SIGSEG. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #36 : 26-05-2008 08:57 »  |  | 
 
 ну не знаю, я в формуле не увидел часть +((unsigned char*)(super->s_block_count / (super->s_blocksize * 8)))
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #37 : 26-05-2008 09:00 »  |  | 
 
 Алексей1153++,   ну вообще (........+(unsigned char*)super);
это ты меня подтолкнул, для передачи указателя   а  super->s_block_count / (super->s_blocksize * 8)
это (мне кажется) текущий Bitmap который нужно передать, а не всю структуру. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #38 : 26-05-2008 09:09 »  |  | 
 
 McZim, ммм, что то я не понял перехода :
 (unsigned char*)super   - это я говорил, это указатель на начало блока памяти, куда указывает super
 
 а это
 ((unsigned char*)(super->s_block_count / (super->s_blocksize * 8 )))
 это указатель на начало блока памяти, с адресом "super->s_block_count / (super->s_blocksize * 8 )" - понятия не имею, куда ты попадёшь )
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #39 : 26-05-2008 09:14 »  |  | 
 
 Алексей1153++, ок, я немного запутался, вот по этой формуле ((super->s_blocksize * 8 ) / super->s_block_count), можно получить текущий Bitmap именно мне его нужно передавать в цикле, вместо простого (unsigned char*)super или в месте с ним   З.Ы.: формула ((unsigned char*)(super->s_block_count / (super->s_blocksize * 8 ))) поменялась на ((unsigned char*)((super->s_blocksize * 8 ) / super->s_block_count)) был не прав   вот и вопрос как мне передать текущий Bitmap зная его по формуле ((super->s_blocksize * 8 ) / super->s_block_count) |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #40 : 26-05-2008 09:19 »  |  | 
 
 можно конечно оформить это в качестве функции структуры, но мне кажется это не кашерно. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #41 : 26-05-2008 09:28 »  |  | 
 
 вот и вопрос как мне передать текущий Bitmap зная его по формуле ((super->s_blocksize * 8 ) / super->s_block_count) 
я не совсем понимаю, что ты имеешь в виду под "зная его по формуле"...     Смысл формулы тоже чёта понять не могу . Вот если бы знать смещение каждого битмапа от начала super, тогда в цикле: {    DWORD dwdCurrentOffset= ... ;    buf2 = ((BYTE*)super) + dwdCurrentOffset;    ... } |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #42 : 26-05-2008 11:02 »  |  | 
 
 ага разобрались    если цикл то нужно передавать по одному блоку, а мы передавали все сразу, если все сразу то нужно убрать цикл! |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #43 : 26-05-2008 11:14 »  |  | 
 
 короче, вот так for(int k=0; k < super->s_bmap_nr; k++){
 if(k == 0)
 {
 buff1 = (REISERFS_DISK_OFFSET_IN_BYTES + super->s_blocksize + (unsigned char* )super) ;
 }
 else
 {
 buff1 = (super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * k + (unsigned char* )super) ;
 }
 
 len1 = super->s_blocksize;
 totalcount += byte_c->GetZeroBitInBuf(buff1,len1);
 }
 
или так  buff1 = (REISERFS_DISK_OFFSET_IN_BYTES + super->s_blocksize + (unsigned char* )super) ;len1 = super->s_blocksize;
 totalcount += byte_c->GetZeroBitInBuf(buff1,len1);
 
 if(super->s_bmap_n>=1)
 {
 buff2 = (super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * 1 + (unsigned char* )super) ;
 len2 = super->s_blocksize * (super->s_bmap_nr-1);
 totalcount += byte_c->GetZeroBitInBuf(buff2,len2);
 }
 
)) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #44 : 26-05-2008 11:37 »  |  | 
 
 не большая поправочка. Вот тут buff2 = (super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * 1 + (unsigned char* )super) ;
1 -- это говорится что передается первый Bitmap, для второго битмапа будет цифра 2 и т.д. максимально битмапов может быть 8. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #45 : 26-05-2008 11:43 »  |  | 
 
 Макс, опять меня запутал ? )))(super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * 1
 - это же смещение к БЛОКУ ( 1,2,3... (zb)) , а не к битмапу
 Я так понял, по крайней мере )
 |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #46 : 26-05-2008 11:51 »  |  | 
 
 вот смотри: http://p-nand-q.com/download/rfstool/reiserfs_docs.html тут: Finding the first bitmap block: REISERFS_DISK_OFFSET_IN_BYTES + REISERFS_BLOCKSIZE
 Finding the next bitmap blocks: REISERFS_BLOCKSIZE * REISERFS_BLOCKSIZE * REISERFS_BLOCKSIZE * 8 * n
 
ключевая фраза: bitmap |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #47 : 26-05-2008 11:54 »  |  | 
 
 вообще то bitmap blocks  |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #48 : 26-05-2008 11:54 »  |  | 
 
 и потом, когда ты делаешь цикл вида for(int k=0; k < super->s_bmap_nr; k++)
и потом используешь К вот так buff1 = (super->s_blocksize * super->s_blocksize * super->s_blocksize * 8 * k + (unsigned char* )super);
то это и говорит что ты перебираешь БитМапы. З.Ы.: а вот сама структура супер блока: struct reiserfs_super_block{
 uint32_t s_block_count;
 uint32_t s_free_blocks;                  /* free blocks count    */
 uint32_t s_root_block;                   /* root block number    */
 uint32_t s_journal_block;                /* journal block number    */
 uint32_t s_journal_dev;                  /* journal device number  */
 
 /* Since journal size is currently a #define in a header file, if
 ** someone creates a disk with a 16MB journal and moves it to a
 ** system with 32MB journal default, they will overflow their journal
 ** when they mount the disk.  s_orig_journal_size, plus some checks
 ** while mounting (inside journal_init) prevent that from happening
 */
 
 /* great comment Chris. Thanks.  -Hans */
 
 uint32_t s_orig_journal_size;
 uint32_t s_journal_trans_max;           /* max number of blocks in a transaction.  */
 uint32_t s_journal_block_count;         /* total size of the journal. can change over time  */
 uint32_t s_journal_max_batch;           /* max number of blocks to batch into a trans */
 uint32_t s_journal_max_commit_age;      /* in seconds, how old can an async commit be */
 uint32_t s_journal_max_trans_age;       /* in seconds, how old can a transaction be */
 uint16_t s_blocksize;                    /* block size           */
 uint16_t s_oid_maxsize;                  /* max size of object id array, see get_objectid() commentary  */
 uint16_t s_oid_cursize;                  /* current size of object id array */
 uint16_t s_state;                        /* valid or error       */
 char s_magic[12];                     /* reiserfs magic string indicates that file system is reiserfs */
 uint32_t s_hash_function_code;           /* indicate, what hash function is being use to sort names in a directory*/
 uint16_t s_tree_height;                  /* height of disk tree */
 uint16_t s_bmap_nr;                      /* amount of bitmap blocks needed to address each block of file system */
 uint16_t s_version;                      /* I'd prefer it if this was a string,
 something like "3.6.4", and maybe
 16 bytes long mostly unused. We
 don't need to save bytes in the
 superblock. -Hans */
 uint16_t s_reserved;
 uint32_t s_inode_generation;
 char s_unused[124] ;                  /* zero filled by mkreiserfs */
 } __attribute__ ((__packed__));
 
интересующая строка uint16_t s_bmap_nr;                      /* amount of bitmap blocks needed to address each block of file system */
 |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #49 : 26-05-2008 11:55 »  |  | 
 
 Алексей1153++, я к тому что не просто Блокс а именно БитМап Блокс   |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #50 : 26-05-2008 14:01 »  |  | 
 
 McZim, я и говорю - блоки ) Что ты мне бабушку лохматишь   |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #51 : 26-05-2008 14:07 »  |  | 
 
 Алексей1153++, это БитМап блоки их может быть от 1 до 8 в них входят простые блоки размером по 4096 их в каждом битмап блоке может быть 4096*8 максимум!!! |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Алексей++ 
								глобальный и пушистыйГлобальный модератор    Offline 
								Сообщений: 13
								
								
								
								
								
							 | 
								|  | « Ответ #52 : 26-05-2008 14:33 »  |  | 
 
 фсё, понял. Термины юниксовые незнакомые, плаваю ) . Главное - решили ))) |  
						| 
								|  |  
								|  |  Записан | 
 
 |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #53 :  26-05-2008 19:43 »   |  | 
 
 Алексей1153++, ага, спасибо. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	|  |