diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h index 9080fab1426d09246eb6972347d0708c656d0ae1..017def89e568e0d74c6980462ec94cda3350f405 100644 --- a/include/linux/mempolicy.h +++ b/include/linux/mempolicy.h @@ -44,6 +44,13 @@ enum { #define MPOL_MF_MOVE_ALL (1<<2) /* Move every page to conform to mapping */ #define MPOL_MF_INTERNAL (1<<3) /* Internal flags start here */ +/* + * Internal flags that share the struct mempolicy flags word with + * "mode flags". These flags are allocated from bit 0 up, as they + * are never OR'ed into the mode in mempolicy API arguments. + */ +#define MPOL_F_SHARED (1 << 0) /* identify shared policies */ + #ifdef __KERNEL__ #include diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 5e7eea2dc8b4d38cac179f1200aa69dcf9f13479..78b18a60b9b22aa44dc2e39504e1cf544080e0ee 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -1750,6 +1750,7 @@ static struct sp_node *sp_alloc(unsigned long start, unsigned long end, n->start = start; n->end = end; mpol_get(pol); + pol->flags |= MPOL_F_SHARED; /* for unref */ n->policy = pol; return n; }