24 lines
589 B
Diff
24 lines
589 B
Diff
|
SPDX-License-Identifier: GPL-2.0
|
||
|
diff --git a/fs/inode.c b/fs/inode.c
|
||
|
index 03102d6..a0b03c7 100644
|
||
|
--- a/fs/inode.c
|
||
|
+++ b/fs/inode.c
|
||
|
@@ -856,6 +856,8 @@ unsigned int get_next_ino(void)
|
||
|
unsigned int *p = &get_cpu_var(last_ino);
|
||
|
unsigned int res = *p;
|
||
|
|
||
|
+start:
|
||
|
+
|
||
|
#ifdef CONFIG_SMP
|
||
|
if (unlikely((res & (LAST_INO_BATCH-1)) == 0)) {
|
||
|
static atomic_t shared_last_ino;
|
||
|
@@ -868,7 +870,7 @@ unsigned int get_next_ino(void)
|
||
|
res++;
|
||
|
/* get_next_ino should not provide a 0 inode number */
|
||
|
if (unlikely(!res))
|
||
|
- res++;
|
||
|
+ goto start;
|
||
|
*p = res;
|
||
|
put_cpu_var(last_ino);
|
||
|
return res;
|