 Подробности
 Подробности
        
                          [В начало]
Проблема в реализации № F0005
Краткое описание
ext4: зависание системы ввиду некорректной обработки нехватки памяти в ext4_mb_new_preallocation()
Подробное описание
В случае нехватки памяти в ext4_mb_new_group_pa(), эта функция возвращает соответствующий код ошибки, ext4_mb_new_preallocation() прокидывает его дальше,но ext4_mb_new_blocks() игнорирует его. В результате в нашем тесте события развивались следующим образом:
- сбой приводит к тому, что ext4_mb_new_group_pa() не обновляет ext4_allocation_context;
- ext4_mb_new_blocks() устанавливает ext4_allocation_request->len (ar->len = ac->ac_b_ex.fe_len;)
  в число выделенных блоков (512) вместо числа запрошенных блокоы (1);
- это приводит к циклу обновления в ext4_splice_branch():
    for (i = 1; i < blks; i++) <-- blks здесь равно 512 вместо 1
      *(where->p + i) = cpu_to_le32(current_block++);
- этот цикл отрабатывает 511 раз и портит кусок памяти, в который попадает структура inode;
- случается page fault в EXT4_SB(inode->i_sb) в ext4_mark_inode_dirty();
- система зависает с сообщением "scheduling while atomic" BUG.
                    Компонент
linux-kernel 3.9
Принято
https://lkml.org/lkml/2013/5/5/64
commit
Статус
Исправлено в kernel 3.10-rc3
[В начало]
» 
  