Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 252704
b: refs/heads/master
c: 4b4563d
h: refs/heads/master
v: v3
  • Loading branch information
Christoph Hellwig authored and Al Viro committed May 27, 2011
1 parent e73eab9 commit f1e82a5
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 50 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c642808454ac81d6a6701da6022e93bbe47bb38b
refs/heads/master: 4b4563dc80594c6a2580aa52d9fcf0177a27074e
54 changes: 5 additions & 49 deletions trunk/fs/inode.c
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
/*
* linux/fs/inode.c
*
* (C) 1997 Linus Torvalds
* (C) 1999 Andrea Arcangeli <andrea@suse.de> (dynamic inode allocation)
*/

#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/dcache.h>
Expand All @@ -27,10 +25,11 @@
#include <linux/prefetch.h>
#include <linux/ima.h>
#include <linux/cred.h>
#include <linux/buffer_head.h> /* for inode_has_buffers */
#include "internal.h"

/*
* inode locking rules.
* Inode locking rules:
*
* inode->i_lock protects:
* inode->i_state, inode->i_hash, __iget()
Expand Down Expand Up @@ -60,54 +59,11 @@
* inode_hash_lock
*/

/*
* This is needed for the following functions:
* - inode_has_buffers
* - invalidate_bdev
*
* FIXME: remove all knowledge of the buffer layer from this file
*/
#include <linux/buffer_head.h>

/*
* New inode.c implementation.
*
* This implementation has the basic premise of trying
* to be extremely low-overhead and SMP-safe, yet be
* simple enough to be "obviously correct".
*
* Famous last words.
*/

/* inode dynamic allocation 1999, Andrea Arcangeli <andrea@suse.de> */

/* #define INODE_PARANOIA 1 */
/* #define INODE_DEBUG 1 */

/*
* Inode lookup is no longer as critical as it used to be:
* most of the lookups are going to be through the dcache.
*/
#define I_HASHBITS i_hash_shift
#define I_HASHMASK i_hash_mask

static unsigned int i_hash_mask __read_mostly;
static unsigned int i_hash_shift __read_mostly;
static struct hlist_head *inode_hashtable __read_mostly;
static __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_hash_lock);

/*
* Each inode can be on two separate lists. One is
* the hash list of the inode, used for lookups. The
* other linked list is the "type" list:
* "in_use" - valid inode, i_count > 0, i_nlink > 0
* "dirty" - as "in_use" but also dirty
* "unused" - valid inode, i_count = 0
*
* A "dirty" list is maintained for each super block,
* allowing for low-overhead inode sync() operations.
*/

static LIST_HEAD(inode_lru);
static DEFINE_SPINLOCK(inode_lru_lock);

Expand Down Expand Up @@ -424,8 +380,8 @@ static unsigned long hash(struct super_block *sb, unsigned long hashval)

tmp = (hashval * (unsigned long)sb) ^ (GOLDEN_RATIO_PRIME + hashval) /
L1_CACHE_BYTES;
tmp = tmp ^ ((tmp ^ GOLDEN_RATIO_PRIME) >> I_HASHBITS);
return tmp & I_HASHMASK;
tmp = tmp ^ ((tmp ^ GOLDEN_RATIO_PRIME) >> i_hash_shift);
return tmp & i_hash_mask;
}

/**
Expand Down

0 comments on commit f1e82a5

Please sign in to comment.