|
@@ -685,25 +685,21 @@ ino_t iunique(struct super_block *sb, ino_t max_reserved)
|
|
|
{
|
|
|
static ino_t counter;
|
|
|
struct inode *inode;
|
|
|
- struct hlist_head * head;
|
|
|
+ struct hlist_head *head;
|
|
|
ino_t res;
|
|
|
+
|
|
|
spin_lock(&inode_lock);
|
|
|
-retry:
|
|
|
- if (counter > max_reserved) {
|
|
|
- head = inode_hashtable + hash(sb,counter);
|
|
|
+ do {
|
|
|
+ if (counter <= max_reserved)
|
|
|
+ counter = max_reserved + 1;
|
|
|
res = counter++;
|
|
|
+ head = inode_hashtable + hash(sb, res);
|
|
|
inode = find_inode_fast(sb, head, res);
|
|
|
- if (!inode) {
|
|
|
- spin_unlock(&inode_lock);
|
|
|
- return res;
|
|
|
- }
|
|
|
- } else {
|
|
|
- counter = max_reserved + 1;
|
|
|
- }
|
|
|
- goto retry;
|
|
|
-
|
|
|
-}
|
|
|
+ } while (inode != NULL);
|
|
|
+ spin_unlock(&inode_lock);
|
|
|
|
|
|
+ return res;
|
|
|
+}
|
|
|
EXPORT_SYMBOL(iunique);
|
|
|
|
|
|
struct inode *igrab(struct inode *inode)
|