Also sprach Juan J. Quintela: } >>>>> "bill" == Bill Wendling <[EMAIL PROTECTED]> writes: } } Hi } } Linus, please don't apply. } } bill> - The `head = &mapping->pages;' statement is useless inside the } bill> repeat, since head isn't modified inside the loop. } } No, but we sleep inside the loop, and while we sleep, we don't have } locked the page cache :(((( } As David pointed out, it's only necessary if mapping->pages changes. But, then, shouldn't the head = &mapping->pages statement be within the spinlock? } If you think that the for is nicer (I think that the while is easier } to read, but that is question of taste). } It's not really a question of taste. The for loop does the increment after the block of code. Doing it beforehand is a waste if the repeat is taken. Attached is a new patch which just addresses this issue and leaves the head = &mapping->pages thingy alone... -- || Bill Wendling [EMAIL PROTECTED]
--- linux-2.4.0-test8/mm/filemap.c Sat Sep 9 02:35:09 2000 +++ linux-2.4.0-test8-new/mm/filemap.c Thu Sep 14 12:09:21 2000 @@ -193,12 +193,10 @@ repeat: head = &mapping->pages; spin_lock(&pagecache_lock); - curr = head->next; - while (curr != head) { + list_for_each(curr, head) { unsigned long offset; page = list_entry(curr, struct page, list); - curr = curr->next; offset = page->index; /* Is one of the pages to truncate? */