LINUX.ORG.RU

l - это индекс. Пусть тебя не смущает частое переиспользование переменных для нужд другого рода (типа)

mv ★★★★★
()
Ответ на: комментарий от yantux

Вы лучше рассматривайте весь фрагмент, а то вопрост, 
что означают 2 строчки, он выглядит странно.

        vma = NULL;                                                             
        if ((unsigned long)l < mm->map_count) {                                 
                vma = mm->mmap;                                                 
                while (l-- && vma)                                              
                        vma = vma->vm_next;                                     
                goto out;                                                       
        }                                                                       
                                                                                
        if (l != mm->map_count)                                                 
                tail_vma = NULL; /* After gate vma */                           
                                                                                
out:                                                                            
        if (vma)                                                                
                return vma;                                                     
                                                                                
        /* End of vmas has been reached */                                      
        m->version = (tail_vma != NULL)? 0: -1UL;

В начале цикл, идем по списку, каждый элемент содержит указатель
на следующий, нам нужно найти элемент с индексом l. При этом 
проверяем, что случаем vma не будет указателем на NULL.
При этом получается, что на строчку 339 мы попадам только при
не выполнении условия ((unsigned long)l < mm->map_count), то
(l != mm->map_count) эквивалентно (l > mm->map_count).
На строчку 347 мы попадаем в случае, если (l > mm->map_count)
или если при движении по списку встретился ( vma->vm_next == NULL ).

Можно, конечно, сказать, что коль уж мы пишем "tail_vma != NULL",
то и строчку "while (l-- && vma)" следовало писать как 
"while (l-- && vma != NULL)" и так далее, но ИМХО, это мелочи...


P.S. Когда постите код программы, лучше выбирать вместо "Tex paragraphs"
"Preformatted text" и ручками добавлять переносы строк. Читать легче.

mky ★★★★★
()
Ответ на: комментарий от mky

Спасибо за подробный ответ.

Но ваш ответ не отвечает на вопрос, почему в строке 339 сравнивается

offset и количество страниц vma:

if (l != mm->map_count)

tail_vma = NULL; /* After gate vma */

Мне совсем не очевиден смысл это опрерации

yantux
() автор топика
Ответ на: комментарий от mky

По моему offset и количество страниц vma сравнивать нельзя по определению, т.к. это всё равно что сравнивать красное и квадратное.

yantux
() автор топика
Ответ на: комментарий от yantux

> По моему offset и количество страниц vma сравнивать нельзя по определению, т.к. это всё равно что сравнивать красное и квадратное.

loff_t *pos это ИНДЕКС, поэтому нет ничего удивитльеного в проверке индекса на корректность. В 2.6.22 к этому коду есть комментарий:

/* * Check the vma index is within the range and do * sequential scan until m_index. */ vma = NULL; if ((unsigned long)l < mm->map_count) { vma = mm->mmap; while (l-- && vma) vma = vma->vm_next; goto out; }

if (l != mm->map_count) tail_vma = NULL; /* After gate vma */

anonymous
()
Ответ на: комментарий от yantux

> По моему offset и количество страниц vma сравнивать нельзя по определению, т.к. это всё равно что сравнивать красное и квадратное.

loff_t *pos это ИНДЕКС, поэтому нет ничего удивитльеного в проверке индекса на корректность. В 2.6.22 к этому коду есть комментарий:

/* * Check the vma index is within the range and do * sequential scan until m_index. */ vma = NULL; if ((unsigned long)l < mm->map_count) { vma = mm->mmap; while (l-- && vma) vma = vma->vm_next; goto out; }

if (l != mm->map_count) tail_vma = NULL; /* After gate vma */

anonymous
()
Ответ на: комментарий от anonymous

есть чило страниц vma, есть offset/индекс

почему число страниц vma можно с сравнивать с offset/индексом?

yantux
() автор топика
Ответ на: комментарий от yantux

Потому что "l" это wma index в спике, а число wma в списке - map_count штук...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.