|
@@ -1440,16 +1440,12 @@ int soft_offline_page(struct page *page, int flags)
|
|
|
*/
|
|
|
ret = invalidate_inode_page(page);
|
|
|
unlock_page(page);
|
|
|
-
|
|
|
/*
|
|
|
- * Drop count because page migration doesn't like raised
|
|
|
- * counts. The page could get re-allocated, but if it becomes
|
|
|
- * LRU the isolation will just fail.
|
|
|
* RED-PEN would be better to keep it isolated here, but we
|
|
|
* would need to fix isolation locking first.
|
|
|
*/
|
|
|
- put_page(page);
|
|
|
if (ret == 1) {
|
|
|
+ put_page(page);
|
|
|
ret = 0;
|
|
|
pr_info("soft_offline: %#lx: invalidated\n", pfn);
|
|
|
goto done;
|
|
@@ -1461,6 +1457,11 @@ int soft_offline_page(struct page *page, int flags)
|
|
|
* handles a large number of cases for us.
|
|
|
*/
|
|
|
ret = isolate_lru_page(page);
|
|
|
+ /*
|
|
|
+ * Drop page reference which is came from get_any_page()
|
|
|
+ * successful isolate_lru_page() already took another one.
|
|
|
+ */
|
|
|
+ put_page(page);
|
|
|
if (!ret) {
|
|
|
LIST_HEAD(pagelist);
|
|
|
|