diff --git a/ipc/util.c b/ipc/util.c index 6e0fe3410423..5dafe4bc78a1 100644 --- a/ipc/util.c +++ b/ipc/util.c @@ -309,6 +309,7 @@ int ipc_addid(struct ipc_ids *ids, struct kern_ipc_perm *new, int limit) } } if (idx < 0) { +pr_info("failed allocation.\n"); new->deleted = true; spin_unlock(&new->lock); rcu_read_unlock(); diff --git a/lib/idr.c b/lib/idr.c index cb1db9b8d3f6..ba274baa87e3 100644 --- a/lib/idr.c +++ b/lib/idr.c @@ -83,6 +83,17 @@ int idr_alloc(struct idr *idr, void *ptr, int start, int end, gfp_t gfp) if (WARN_ON_ONCE(start < 0)) return -EINVAL; + { + u64 a = get_jiffies_64(); + + if (time_after64(a, (u64)INITIAL_JIFFIES+40*HZ)) { + if (a%5 < 2) { + pr_info("idr_alloc:Failing.\n"); + return -ENOSPC; + } + } + } + ret = idr_alloc_u32(idr, ptr, &id, end > 0 ? end - 1 : INT_MAX, gfp); if (ret) return ret;