projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
and changed files
[powerpc.git]
/
fs
/
inode.c
diff --git
a/fs/inode.c
b/fs/inode.c
index
5abb097
..
df2ef15
100644
(file)
--- a/
fs/inode.c
+++ b/
fs/inode.c
@@
-213,8
+213,7
@@
static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flag
{
struct inode * inode = (struct inode *) foo;
{
struct inode * inode = (struct inode *) foo;
- if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
- SLAB_CTOR_CONSTRUCTOR)
+ if (flags & SLAB_CTOR_CONSTRUCTOR)
inode_init_once(inode);
}
inode_init_once(inode);
}
@@
-251,7
+250,7
@@
void clear_inode(struct inode *inode)
BUG_ON(inode->i_state & I_CLEAR);
wait_on_inode(inode);
DQUOT_DROP(inode);
BUG_ON(inode->i_state & I_CLEAR);
wait_on_inode(inode);
DQUOT_DROP(inode);
- if (inode->i_sb
&& inode->i_sb
->s_op->clear_inode)
+ if (inode->i_sb->s_op->clear_inode)
inode->i_sb->s_op->clear_inode(inode);
if (S_ISBLK(inode->i_mode) && inode->i_bdev)
bd_forget(inode);
inode->i_sb->s_op->clear_inode(inode);
if (S_ISBLK(inode->i_mode) && inode->i_bdev)
bd_forget(inode);
@@
-276,7
+275,7
@@
static void dispose_list(struct list_head *head)
while (!list_empty(head)) {
struct inode *inode;
while (!list_empty(head)) {
struct inode *inode;
- inode = list_
entry(head->next
, struct inode, i_list);
+ inode = list_
first_entry(head
, struct inode, i_list);
list_del(&inode->i_list);
if (inode->i_data.nrpages)
list_del(&inode->i_list);
if (inode->i_data.nrpages)
@@
-525,7
+524,12
@@
repeat:
*/
struct inode *new_inode(struct super_block *sb)
{
*/
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);
struct inode * inode;
spin_lock_prefetch(&inode_lock);
@@
-684,27
+688,28
@@
static unsigned long hash(struct super_block *sb, unsigned long hashval)
*/
ino_t iunique(struct super_block *sb, ino_t max_reserved)
{
*/
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 inode *inode;
- struct hlist_head *
head;
+ struct hlist_head *head;
ino_t res;
ino_t res;
+
spin_lock(&inode_lock);
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++;
res = counter++;
+ head = inode_hashtable + hash(sb, res);
inode = find_inode_fast(sb, head, 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)
EXPORT_SYMBOL(iunique);
struct inode *igrab(struct inode *inode)
@@
-1041,7
+1046,7
@@
static void generic_forget_inode(struct inode *inode)
if (!(inode->i_state & (I_DIRTY|I_LOCK)))
list_move(&inode->i_list, &inode_unused);
inodes_stat.nr_unused++;
if (!(inode->i_state & (I_DIRTY|I_LOCK)))
list_move(&inode->i_list, &inode_unused);
inodes_stat.nr_unused++;
- if (
!sb || (sb->s_flags & MS_ACTIVE)
) {
+ if (
sb->s_flags & MS_ACTIVE
) {
spin_unlock(&inode_lock);
return;
}
spin_unlock(&inode_lock);
return;
}