|
@@ -61,6 +61,8 @@
|
|
|
#include <linux/nsproxy.h>
|
|
#include <linux/nsproxy.h>
|
|
|
#include <linux/ptrace.h>
|
|
#include <linux/ptrace.h>
|
|
|
#include <linux/sched/rt.h>
|
|
#include <linux/sched/rt.h>
|
|
|
|
|
+#include <linux/hugetlb.h>
|
|
|
|
|
+#include <linux/freezer.h>
|
|
|
|
|
|
|
|
#include <asm/futex.h>
|
|
#include <asm/futex.h>
|
|
|
|
|
|
|
@@ -365,7 +367,7 @@ again:
|
|
|
} else {
|
|
} else {
|
|
|
key->both.offset |= FUT_OFF_INODE; /* inode-based key */
|
|
key->both.offset |= FUT_OFF_INODE; /* inode-based key */
|
|
|
key->shared.inode = page_head->mapping->host;
|
|
key->shared.inode = page_head->mapping->host;
|
|
|
- key->shared.pgoff = page_head->index;
|
|
|
|
|
|
|
+ key->shared.pgoff = basepage_index(page);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
get_futex_key_refs(key);
|
|
get_futex_key_refs(key);
|
|
@@ -1807,7 +1809,7 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
|
|
|
* is no timeout, or if it has yet to expire.
|
|
* is no timeout, or if it has yet to expire.
|
|
|
*/
|
|
*/
|
|
|
if (!timeout || timeout->task)
|
|
if (!timeout || timeout->task)
|
|
|
- schedule();
|
|
|
|
|
|
|
+ freezable_schedule();
|
|
|
}
|
|
}
|
|
|
__set_current_state(TASK_RUNNING);
|
|
__set_current_state(TASK_RUNNING);
|
|
|
}
|
|
}
|