diff options
Diffstat (limited to 'fs/inode.c')
-rw-r--r-- | fs/inode.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/fs/inode.c b/fs/inode.c index 410f235c337b..df2ef15d03d2 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -524,7 +524,12 @@ repeat: */ struct inode *new_inode(struct super_block *sb) { - static unsigned long last_ino; + /* + * On a 32bit, non LFS stat() call, glibc will generate an EOVERFLOW + * error if st_ino won't fit in target struct field. Use 32bit counter + * here to attempt to avoid that. + */ + static unsigned int last_ino; struct inode * inode; spin_lock_prefetch(&inode_lock); @@ -683,7 +688,12 @@ static unsigned long hash(struct super_block *sb, unsigned long hashval) */ ino_t iunique(struct super_block *sb, ino_t max_reserved) { - static ino_t counter; + /* + * On a 32bit, non LFS stat() call, glibc will generate an EOVERFLOW + * error if st_ino won't fit in target struct field. Use 32bit counter + * here to attempt to avoid that. + */ + static unsigned int counter; struct inode *inode; struct hlist_head *head; ino_t res; |