diff options
author | Jeffrey Layton <jlayton@redhat.com> | 2007-05-08 03:29:48 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-08 14:15:10 -0400 |
commit | 3361c7bebbf207f57f3dd1282cd87e1e37c082ac (patch) | |
tree | 53c5ee74c70ed9727964996f3cf2fa4a0ff368ea | |
parent | 9d0633cfedde484d30eef869f749c04709ab3e42 (diff) |
make iunique use a do/while loop rather than its obscure goto loop
A while back, Christoph mentioned that he thought that iunique ought to be
cleaned up to use a more conventional loop construct. This patch does that,
turning the strange goto loop into a do/while.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | fs/inode.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/fs/inode.c b/fs/inode.c index c03089421b6f..81508b0a3a70 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
@@ -685,25 +685,21 @@ ino_t iunique(struct super_block *sb, ino_t max_reserved) | |||
685 | { | 685 | { |
686 | static ino_t counter; | 686 | static ino_t counter; |
687 | struct inode *inode; | 687 | struct inode *inode; |
688 | struct hlist_head * head; | 688 | struct hlist_head *head; |
689 | ino_t res; | 689 | ino_t res; |
690 | |||
690 | spin_lock(&inode_lock); | 691 | spin_lock(&inode_lock); |
691 | retry: | 692 | do { |
692 | if (counter > max_reserved) { | 693 | if (counter <= max_reserved) |
693 | head = inode_hashtable + hash(sb,counter); | 694 | counter = max_reserved + 1; |
694 | res = counter++; | 695 | res = counter++; |
696 | head = inode_hashtable + hash(sb, res); | ||
695 | inode = find_inode_fast(sb, head, res); | 697 | inode = find_inode_fast(sb, head, res); |
696 | if (!inode) { | 698 | } while (inode != NULL); |
697 | spin_unlock(&inode_lock); | 699 | spin_unlock(&inode_lock); |
698 | return res; | ||
699 | } | ||
700 | } else { | ||
701 | counter = max_reserved + 1; | ||
702 | } | ||
703 | goto retry; | ||
704 | |||
705 | } | ||
706 | 700 | ||
701 | return res; | ||
702 | } | ||
707 | EXPORT_SYMBOL(iunique); | 703 | EXPORT_SYMBOL(iunique); |
708 | 704 | ||
709 | struct inode *igrab(struct inode *inode) | 705 | struct inode *igrab(struct inode *inode) |