On Thu, 4 Mar 2010, Huang Shijie wrote: > > > > swap_duplicate()'s loop appears to miss out on returning the error code > > from __swap_duplicate(), except when that's -ENOMEM. In fact this is > > intentional: prior to -ENOMEM for swap_count_continuation, swap_duplicate() > > was void (and the case only occurs when copy_one_pte() hits a corrupt pte). > > > only? > > There are several paths calling the try_to_unmap(), Could you sure that > the swap entries are valid in all the paths ? Yes. Well, we are debating the likelihoods of corruption in different memory areas here. I answer "Yes" because the swap entry involved in try_to_unmap_one() comes from page->private when PageSwapCache is set (and the page is locked): it requires either an mm bug, or corruption of struct page, for that swap entry to be invalid for duplication. Memory corruption of entries in a user page table seems to have been a more common case, whether because of single-bit memory errors, or use-after-free bugs: that's the case which copy_one_pte() might meet. > > For the sake of the stability of the system, I perfer to export all the error > value, and check it carefully. But we were happy with void swap_duplicate() for many years. If I wanted to make a further change, it would rather be to remove those error returns from __swap_duplicate() which are not actually made use of. Hugh -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>