swap: __swap_duplicate check bad swap entry
Subsystems (2)
PATCH v3 2/4 swap: __swap_duplicate check bad swap entry
Sorry if you receive this one twice, last mail get mail address messed.
In swapin_readahead(), read_swap_cache_async() can read a bad swap entry, because we don't check if readahead swap entry is bad. This doesn't break anything but such swapin page is wasteful and can only be freed at page reclaim. We avoid read such swap entry.
And next patch will mark a swap entry bad temporarily for discard. Without this patch, swap entry count will be messed.
Thanks Hugh to inspire swapin_readahead could use bad swap entry.
--- mm/swapfile.c | 5 +++++ 1 file changed, 5 insertions(+)
mm/swapfile.c +5 -0
@@ -2374,6 +2374,11 @@ static int __swap_duplicate(swp_entry_t goto unlock_out; count = p->swap_map[offset]; +if (unlikely (swap_count (count) ==SWAP_MAP_BAD )) { + err = -ENOENT ; + goto unlock_out; + } + has_cache = count &SWAP_HAS_CACHE ; count &= ~SWAP_HAS_CACHE ; err =0 ;
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Quoted 7 lines · Shaohua Li
Sorry if you receive this one twice, last mail get mail address messed.
In
swapin_readahead(),read_swap_cache_async()can read a bad swap entry, because we don't check if readahead swap entry is bad. This doesn't break anything but such swapin page is wasteful and can only be freed at page reclaim. We avoid read such swap entry.
Quoted 28 lines
And next patch will mark a swap entry bad temporarily for discard. Without this patch, swap entry count will be messed.
Thanks Hugh to inspire
swapin_readaheadcould use bad swap entry.Signed-off-by Shaohua Li <[email protected]>--- mm/swapfile.c | 5 +++++ 1 file changed, 5 insertions(+)Index:
linux/mm/swapfile.c
===================================================================mm/swapfile.c +5
-1@@ -2374,6 +2374,11 @@ static int __swap_duplicate(swp_entry_t goto unlock_out; count = p->swap_map[offset]; +if (unlikely (swap_count (count) ==SWAP_MAP_BAD )) { + err = -ENOENT ; + goto unlock_out; + } + has_cache = count &SWAP_HAS_CACHE ; count &= ~SWAP_HAS_CACHE ; err =0 ; --
Quoted 4 lines
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>