idr: Warn if old iterators see large IDs
Now that the IDR can be used to store large IDs, it is possible somebody might only partially convert their old code and use the iterators which can only handle IDs up to INT_MAX. It's probably unwise to show them a truncated ID, so settle for spewing warnings to dmesg, and terminating the iteration. Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
This commit is contained in:
parent
7a4575778f
commit
72fd6c7be7
@ -159,7 +159,11 @@ int idr_for_each(const struct idr *idr,
|
||||
void __rcu **slot;
|
||||
|
||||
radix_tree_for_each_slot(slot, &idr->idr_rt, &iter, 0) {
|
||||
int ret = fn(iter.index, rcu_dereference_raw(*slot), data);
|
||||
int ret;
|
||||
|
||||
if (WARN_ON_ONCE(iter.index > INT_MAX))
|
||||
break;
|
||||
ret = fn(iter.index, rcu_dereference_raw(*slot), data);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
@ -187,6 +191,9 @@ void *idr_get_next(struct idr *idr, int *nextid)
|
||||
if (!slot)
|
||||
return NULL;
|
||||
|
||||
if (WARN_ON_ONCE(iter.index > INT_MAX))
|
||||
return NULL;
|
||||
|
||||
*nextid = iter.index;
|
||||
return rcu_dereference_raw(*slot);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user