Blame view

fs/inode.c 40.6 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
  /*
   * linux/fs/inode.c
   *
   * (C) 1997 Linus Torvalds
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
6
7
8
9
  #include <linux/fs.h>
  #include <linux/mm.h>
  #include <linux/dcache.h>
  #include <linux/init.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
10
11
12
13
14
  #include <linux/slab.h>
  #include <linux/writeback.h>
  #include <linux/module.h>
  #include <linux/backing-dev.h>
  #include <linux/wait.h>
88e0fbc45   Nick Piggin   fs: turn iprune_m...
15
  #include <linux/rwsem.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
17
18
19
20
21
  #include <linux/hash.h>
  #include <linux/swap.h>
  #include <linux/security.h>
  #include <linux/pagemap.h>
  #include <linux/cdev.h>
  #include <linux/bootmem.h>
3be25f49b   Eric Paris   fsnotify: add mar...
22
  #include <linux/fsnotify.h>
fc33a7bb9   Christoph Hellwig   [PATCH] per-mount...
23
  #include <linux/mount.h>
efaee1920   Arjan van de Ven   async: make the f...
24
  #include <linux/async.h>
f19d4a8fa   Al Viro   add caching of AC...
25
  #include <linux/posix_acl.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
27
28
29
30
  
  /*
   * This is needed for the following functions:
   *  - inode_has_buffers
   *  - invalidate_inode_buffers
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
   *  - 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
fa3536cc1   Eric Dumazet   [PATCH] Use __rea...
58
59
  static unsigned int i_hash_mask __read_mostly;
  static unsigned int i_hash_shift __read_mostly;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  
  /*
   * 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.
   */
  
  LIST_HEAD(inode_in_use);
  LIST_HEAD(inode_unused);
fa3536cc1   Eric Dumazet   [PATCH] Use __rea...
75
  static struct hlist_head *inode_hashtable __read_mostly;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76
77
78
79
80
81
82
83
84
85
  
  /*
   * A simple spinlock to protect the list manipulations.
   *
   * NOTE! You also have to own the lock if you change
   * the i_state of an inode while it is in use..
   */
  DEFINE_SPINLOCK(inode_lock);
  
  /*
88e0fbc45   Nick Piggin   fs: turn iprune_m...
86
   * iprune_sem provides exclusion between the kswapd or try_to_free_pages
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
87
88
89
90
91
   * icache shrinking path, and the umount path.  Without this exclusion,
   * by the time prune_icache calls iput for the inode whose pages it has
   * been invalidating, or by the time it calls clear_inode & destroy_inode
   * from its final dispose_list, the struct super_block they refer to
   * (for inode->i_sb->s_op) may already have been freed and reused.
88e0fbc45   Nick Piggin   fs: turn iprune_m...
92
93
94
95
   *
   * We make this an rwsem because the fastpath is icache shrinking. In
   * some cases a filesystem may be doing a significant amount of work in
   * its inode reclaim code, so this should improve parallelism.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
96
   */
88e0fbc45   Nick Piggin   fs: turn iprune_m...
97
  static DECLARE_RWSEM(iprune_sem);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
98
99
100
101
102
  
  /*
   * Statistics gathering..
   */
  struct inodes_stat_t inodes_stat;
6b3304b53   Manish Katiyar   Make checkpatch.p...
103
  static struct kmem_cache *inode_cachep __read_mostly;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
104

1c0eeaf56   Joern Engel   introduce I_SYNC
105
106
107
108
109
110
  static void wake_up_inode(struct inode *inode)
  {
  	/*
  	 * Prevent speculative execution through spin_unlock(&inode_lock);
  	 */
  	smp_mb();
eaff8079d   Christoph Hellwig   kill I_LOCK
111
  	wake_up_bit(&inode->i_state, __I_NEW);
1c0eeaf56   Joern Engel   introduce I_SYNC
112
  }
2cb1599f9   David Chinner   Inode: Allow exte...
113
114
  /**
   * inode_init_always - perform inode structure intialisation
0bc02f3fa   Randy Dunlap   fs/inode: fix ker...
115
116
   * @sb: superblock inode belongs to
   * @inode: inode to initialise
2cb1599f9   David Chinner   Inode: Allow exte...
117
118
119
120
   *
   * These are initializations that need to be done on every inode
   * allocation as the fields are not initialised by slab allocation.
   */
54e346215   Christoph Hellwig   vfs: fix inode_in...
121
  int inode_init_always(struct super_block *sb, struct inode *inode)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
122
  {
f5e54d6e5   Christoph Hellwig   [PATCH] mark addr...
123
  	static const struct address_space_operations empty_aops;
6e1d5dcc2   Alexey Dobriyan   const: mark remai...
124
  	static const struct inode_operations empty_iops;
99ac48f54   Arjan van de Ven   [PATCH] mark f_op...
125
  	static const struct file_operations empty_fops;
6b3304b53   Manish Katiyar   Make checkpatch.p...
126
  	struct address_space *const mapping = &inode->i_data;
2cb1599f9   David Chinner   Inode: Allow exte...
127
128
129
130
131
132
133
134
  
  	inode->i_sb = sb;
  	inode->i_blkbits = sb->s_blocksize_bits;
  	inode->i_flags = 0;
  	atomic_set(&inode->i_count, 1);
  	inode->i_op = &empty_iops;
  	inode->i_fop = &empty_fops;
  	inode->i_nlink = 1;
56ff5efad   Al Viro   zero i_uid/i_gid ...
135
136
  	inode->i_uid = 0;
  	inode->i_gid = 0;
2cb1599f9   David Chinner   Inode: Allow exte...
137
138
139
140
141
  	atomic_set(&inode->i_writecount, 0);
  	inode->i_size = 0;
  	inode->i_blocks = 0;
  	inode->i_bytes = 0;
  	inode->i_generation = 0;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
142
  #ifdef CONFIG_QUOTA
2cb1599f9   David Chinner   Inode: Allow exte...
143
  	memset(&inode->i_dquot, 0, sizeof(inode->i_dquot));
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
144
  #endif
2cb1599f9   David Chinner   Inode: Allow exte...
145
146
147
148
149
  	inode->i_pipe = NULL;
  	inode->i_bdev = NULL;
  	inode->i_cdev = NULL;
  	inode->i_rdev = 0;
  	inode->dirtied_when = 0;
6146f0d5e   Mimi Zohar   integrity: IMA hooks
150
151
  
  	if (security_inode_alloc(inode))
54e346215   Christoph Hellwig   vfs: fix inode_in...
152
  		goto out;
2cb1599f9   David Chinner   Inode: Allow exte...
153
154
155
156
157
158
159
160
161
162
163
164
  	spin_lock_init(&inode->i_lock);
  	lockdep_set_class(&inode->i_lock, &sb->s_type->i_lock_key);
  
  	mutex_init(&inode->i_mutex);
  	lockdep_set_class(&inode->i_mutex, &sb->s_type->i_mutex_key);
  
  	init_rwsem(&inode->i_alloc_sem);
  	lockdep_set_class(&inode->i_alloc_sem, &sb->s_type->i_alloc_sem_key);
  
  	mapping->a_ops = &empty_aops;
  	mapping->host = inode;
  	mapping->flags = 0;
3c1d43787   Hugh Dickins   mm: remove GFP_HI...
165
  	mapping_set_gfp_mask(mapping, GFP_HIGHUSER_MOVABLE);
2cb1599f9   David Chinner   Inode: Allow exte...
166
167
168
169
170
171
172
173
174
175
176
  	mapping->assoc_mapping = NULL;
  	mapping->backing_dev_info = &default_backing_dev_info;
  	mapping->writeback_index = 0;
  
  	/*
  	 * If the block_device provides a backing_dev_info for client
  	 * inodes then use that.  Otherwise the inode share the bdev's
  	 * backing_dev_info.
  	 */
  	if (sb->s_bdev) {
  		struct backing_dev_info *bdi;
2c96ce9f2   Jens Axboe   fs: remove bdev->...
177
  		bdi = sb->s_bdev->bd_inode->i_mapping->backing_dev_info;
2cb1599f9   David Chinner   Inode: Allow exte...
178
179
180
181
  		mapping->backing_dev_info = bdi;
  	}
  	inode->i_private = NULL;
  	inode->i_mapping = mapping;
f19d4a8fa   Al Viro   add caching of AC...
182
183
184
  #ifdef CONFIG_FS_POSIX_ACL
  	inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED;
  #endif
2cb1599f9   David Chinner   Inode: Allow exte...
185

3be25f49b   Eric Paris   fsnotify: add mar...
186
187
188
  #ifdef CONFIG_FSNOTIFY
  	inode->i_fsnotify_mask = 0;
  #endif
54e346215   Christoph Hellwig   vfs: fix inode_in...
189
  	return 0;
54e346215   Christoph Hellwig   vfs: fix inode_in...
190
191
  out:
  	return -ENOMEM;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
192
  }
2cb1599f9   David Chinner   Inode: Allow exte...
193
194
195
196
197
198
199
200
201
202
  EXPORT_SYMBOL(inode_init_always);
  
  static struct inode *alloc_inode(struct super_block *sb)
  {
  	struct inode *inode;
  
  	if (sb->s_op->alloc_inode)
  		inode = sb->s_op->alloc_inode(sb);
  	else
  		inode = kmem_cache_alloc(inode_cachep, GFP_KERNEL);
54e346215   Christoph Hellwig   vfs: fix inode_in...
203
204
205
206
207
208
209
210
211
212
213
214
  	if (!inode)
  		return NULL;
  
  	if (unlikely(inode_init_always(sb, inode))) {
  		if (inode->i_sb->s_op->destroy_inode)
  			inode->i_sb->s_op->destroy_inode(inode);
  		else
  			kmem_cache_free(inode_cachep, inode);
  		return NULL;
  	}
  
  	return inode;
2cb1599f9   David Chinner   Inode: Allow exte...
215
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
216

2e00c97e2   Christoph Hellwig   vfs: add __destro...
217
  void __destroy_inode(struct inode *inode)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
218
  {
b7542f8c7   Eric Sesterhenn   BUG_ON() Conversi...
219
  	BUG_ON(inode_has_buffers(inode));
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
220
  	security_inode_free(inode);
3be25f49b   Eric Paris   fsnotify: add mar...
221
  	fsnotify_inode_delete(inode);
f19d4a8fa   Al Viro   add caching of AC...
222
223
224
225
226
227
  #ifdef CONFIG_FS_POSIX_ACL
  	if (inode->i_acl && inode->i_acl != ACL_NOT_CACHED)
  		posix_acl_release(inode->i_acl);
  	if (inode->i_default_acl && inode->i_default_acl != ACL_NOT_CACHED)
  		posix_acl_release(inode->i_default_acl);
  #endif
2e00c97e2   Christoph Hellwig   vfs: add __destro...
228
229
230
231
232
233
  }
  EXPORT_SYMBOL(__destroy_inode);
  
  void destroy_inode(struct inode *inode)
  {
  	__destroy_inode(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
234
235
236
237
238
  	if (inode->i_sb->s_op->destroy_inode)
  		inode->i_sb->s_op->destroy_inode(inode);
  	else
  		kmem_cache_free(inode_cachep, (inode));
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
239
240
241
242
243
244
245
246
247
248
249
250
  
  /*
   * These are initializations that only need to be done
   * once, because the fields are idempotent across use
   * of the inode, so let the slab aware of that.
   */
  void inode_init_once(struct inode *inode)
  {
  	memset(inode, 0, sizeof(*inode));
  	INIT_HLIST_NODE(&inode->i_hash);
  	INIT_LIST_HEAD(&inode->i_dentry);
  	INIT_LIST_HEAD(&inode->i_devices);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
251
  	INIT_RADIX_TREE(&inode->i_data.page_tree, GFP_ATOMIC);
19fd62312   Nick Piggin   mm: spinlock tree...
252
  	spin_lock_init(&inode->i_data.tree_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
253
254
255
256
257
  	spin_lock_init(&inode->i_data.i_mmap_lock);
  	INIT_LIST_HEAD(&inode->i_data.private_list);
  	spin_lock_init(&inode->i_data.private_lock);
  	INIT_RAW_PRIO_TREE_ROOT(&inode->i_data.i_mmap);
  	INIT_LIST_HEAD(&inode->i_data.i_mmap_nonlinear);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
258
  	i_size_ordered_init(inode);
3be25f49b   Eric Paris   fsnotify: add mar...
259
  #ifdef CONFIG_FSNOTIFY
e61ce8673   Eric Paris   fsnotify: rename ...
260
  	INIT_HLIST_HEAD(&inode->i_fsnotify_marks);
3be25f49b   Eric Paris   fsnotify: add mar...
261
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
262
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
263
  EXPORT_SYMBOL(inode_init_once);
51cc50685   Alexey Dobriyan   SL*B: drop kmem c...
264
  static void init_once(void *foo)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
265
  {
6b3304b53   Manish Katiyar   Make checkpatch.p...
266
  	struct inode *inode = (struct inode *) foo;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
267

a35afb830   Christoph Lameter   Remove SLAB_CTOR_...
268
  	inode_init_once(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
269
270
271
272
273
  }
  
  /*
   * inode_lock must be held
   */
6b3304b53   Manish Katiyar   Make checkpatch.p...
274
  void __iget(struct inode *inode)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
275
  {
2e147f1ef   Richard Kennedy   fs: inode.c use a...
276
  	if (atomic_inc_return(&inode->i_count) != 1)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
277
  		return;
2e147f1ef   Richard Kennedy   fs: inode.c use a...
278

1c0eeaf56   Joern Engel   introduce I_SYNC
279
  	if (!(inode->i_state & (I_DIRTY|I_SYNC)))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
280
281
282
  		list_move(&inode->i_list, &inode_in_use);
  	inodes_stat.nr_unused--;
  }
b0683aa63   Al Viro   new helper: end_w...
283
284
285
286
287
288
289
290
291
292
293
  void end_writeback(struct inode *inode)
  {
  	might_sleep();
  	BUG_ON(inode->i_data.nrpages);
  	BUG_ON(!list_empty(&inode->i_data.private_list));
  	BUG_ON(!(inode->i_state & I_FREEING));
  	BUG_ON(inode->i_state & I_CLEAR);
  	inode_sync_wait(inode);
  	inode->i_state = I_FREEING | I_CLEAR;
  }
  EXPORT_SYMBOL(end_writeback);
644da5960   Al Viro   fs/inode.c:evict(...
294
  static void evict(struct inode *inode)
b4272d4c8   Al Viro   unify fs/inode.c ...
295
296
  {
  	const struct super_operations *op = inode->i_sb->s_op;
be7ce4161   Al Viro   New method - evic...
297
298
  	if (op->evict_inode) {
  		op->evict_inode(inode);
b4272d4c8   Al Viro   unify fs/inode.c ...
299
300
301
  	} else {
  		if (inode->i_data.nrpages)
  			truncate_inode_pages(&inode->i_data, 0);
30140837f   Al Viro   fs/inode.c:clear_...
302
  		end_writeback(inode);
b4272d4c8   Al Viro   unify fs/inode.c ...
303
  	}
661074e91   Al Viro   Take ->i_bdev/->i...
304
305
306
307
  	if (S_ISBLK(inode->i_mode) && inode->i_bdev)
  		bd_forget(inode);
  	if (S_ISCHR(inode->i_mode) && inode->i_cdev)
  		cd_forget(inode);
b4272d4c8   Al Viro   unify fs/inode.c ...
308
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
309
310
311
312
313
314
315
316
317
318
319
320
321
  /*
   * dispose_list - dispose of the contents of a local list
   * @head: the head of the list to free
   *
   * Dispose-list gets a local list with local inodes in it, so it doesn't
   * need to worry about list corruption and SMP locks.
   */
  static void dispose_list(struct list_head *head)
  {
  	int nr_disposed = 0;
  
  	while (!list_empty(head)) {
  		struct inode *inode;
b5e618181   Pavel Emelianov   Introduce a handy...
322
  		inode = list_first_entry(head, struct inode, i_list);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
323
  		list_del(&inode->i_list);
644da5960   Al Viro   fs/inode.c:evict(...
324
  		evict(inode);
4120db471   Artem B. Bityuckiy   [PATCH] bugfix: t...
325
326
327
328
329
330
331
  
  		spin_lock(&inode_lock);
  		hlist_del_init(&inode->i_hash);
  		list_del_init(&inode->i_sb_list);
  		spin_unlock(&inode_lock);
  
  		wake_up_inode(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
  		destroy_inode(inode);
  		nr_disposed++;
  	}
  	spin_lock(&inode_lock);
  	inodes_stat.nr_inodes -= nr_disposed;
  	spin_unlock(&inode_lock);
  }
  
  /*
   * Invalidate all inodes for a device.
   */
  static int invalidate_list(struct list_head *head, struct list_head *dispose)
  {
  	struct list_head *next;
  	int busy = 0, count = 0;
  
  	next = head->next;
  	for (;;) {
6b3304b53   Manish Katiyar   Make checkpatch.p...
350
351
  		struct list_head *tmp = next;
  		struct inode *inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
352
353
354
355
  
  		/*
  		 * We can reschedule here without worrying about the list's
  		 * consistency because the per-sb list of inodes must not
88e0fbc45   Nick Piggin   fs: turn iprune_m...
356
  		 * change during umount anymore, and because iprune_sem keeps
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
357
358
359
360
361
362
363
364
  		 * shrink_icache_memory() away.
  		 */
  		cond_resched_lock(&inode_lock);
  
  		next = next->next;
  		if (tmp == head)
  			break;
  		inode = list_entry(tmp, struct inode, i_sb_list);
aabb8fdb4   Nick Piggin   fs: avoid I_NEW i...
365
366
  		if (inode->i_state & I_NEW)
  			continue;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
367
368
  		invalidate_inode_buffers(inode);
  		if (!atomic_read(&inode->i_count)) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
369
  			list_move(&inode->i_list, dispose);
7ef0d7377   Nick Piggin   fs: new inode i_s...
370
  			WARN_ON(inode->i_state & I_NEW);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
371
372
373
374
375
376
377
378
379
380
  			inode->i_state |= I_FREEING;
  			count++;
  			continue;
  		}
  		busy = 1;
  	}
  	/* only unused inodes may be cached with i_count zero */
  	inodes_stat.nr_unused -= count;
  	return busy;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
381
382
383
384
385
386
387
388
  /**
   *	invalidate_inodes	- discard the inodes on a device
   *	@sb: superblock
   *
   *	Discard all of the inodes for a given superblock. If the discard
   *	fails because there are busy inodes then a non zero value is returned.
   *	If the discard is successful all the inodes have been discarded.
   */
6b3304b53   Manish Katiyar   Make checkpatch.p...
389
  int invalidate_inodes(struct super_block *sb)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
390
391
392
  {
  	int busy;
  	LIST_HEAD(throw_away);
88e0fbc45   Nick Piggin   fs: turn iprune_m...
393
  	down_write(&iprune_sem);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
394
  	spin_lock(&inode_lock);
164bc6195   Eric Paris   fsnotify: handle ...
395
  	fsnotify_unmount_inodes(&sb->s_inodes);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
396
397
398
399
  	busy = invalidate_list(&sb->s_inodes, &throw_away);
  	spin_unlock(&inode_lock);
  
  	dispose_list(&throw_away);
88e0fbc45   Nick Piggin   fs: turn iprune_m...
400
  	up_write(&iprune_sem);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
401
402
403
  
  	return busy;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
404
  EXPORT_SYMBOL(invalidate_inodes);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
  
  static int can_unuse(struct inode *inode)
  {
  	if (inode->i_state)
  		return 0;
  	if (inode_has_buffers(inode))
  		return 0;
  	if (atomic_read(&inode->i_count))
  		return 0;
  	if (inode->i_data.nrpages)
  		return 0;
  	return 1;
  }
  
  /*
   * Scan `goal' inodes on the unused list for freeable ones. They are moved to
   * a temporary list and then are freed outside inode_lock by dispose_list().
   *
   * Any inodes which are pinned purely because of attached pagecache have their
   * pagecache removed.  We expect the final iput() on that inode to add it to
   * the front of the inode_unused list.  So look for it there and if the
   * inode is still freeable, proceed.  The right inode is found 99.9% of the
   * time in testing on a 4-way.
   *
   * If the inode has metadata buffers attached to mapping->private_list then
   * try to remove them.
   */
  static void prune_icache(int nr_to_scan)
  {
  	LIST_HEAD(freeable);
  	int nr_pruned = 0;
  	int nr_scanned;
  	unsigned long reap = 0;
88e0fbc45   Nick Piggin   fs: turn iprune_m...
438
  	down_read(&iprune_sem);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
  	spin_lock(&inode_lock);
  	for (nr_scanned = 0; nr_scanned < nr_to_scan; nr_scanned++) {
  		struct inode *inode;
  
  		if (list_empty(&inode_unused))
  			break;
  
  		inode = list_entry(inode_unused.prev, struct inode, i_list);
  
  		if (inode->i_state || atomic_read(&inode->i_count)) {
  			list_move(&inode->i_list, &inode_unused);
  			continue;
  		}
  		if (inode_has_buffers(inode) || inode->i_data.nrpages) {
  			__iget(inode);
  			spin_unlock(&inode_lock);
  			if (remove_inode_buffers(inode))
fc0ecff69   Andrew Morton   [PATCH] remove in...
456
457
  				reap += invalidate_mapping_pages(&inode->i_data,
  								0, -1);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
458
459
460
461
462
463
464
465
466
  			iput(inode);
  			spin_lock(&inode_lock);
  
  			if (inode != list_entry(inode_unused.next,
  						struct inode, i_list))
  				continue;	/* wrong inode or list_empty */
  			if (!can_unuse(inode))
  				continue;
  		}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
467
  		list_move(&inode->i_list, &freeable);
7ef0d7377   Nick Piggin   fs: new inode i_s...
468
  		WARN_ON(inode->i_state & I_NEW);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
469
470
471
472
  		inode->i_state |= I_FREEING;
  		nr_pruned++;
  	}
  	inodes_stat.nr_unused -= nr_pruned;
f8891e5e1   Christoph Lameter   [PATCH] Light wei...
473
474
475
476
  	if (current_is_kswapd())
  		__count_vm_events(KSWAPD_INODESTEAL, reap);
  	else
  		__count_vm_events(PGINODESTEAL, reap);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
477
478
479
  	spin_unlock(&inode_lock);
  
  	dispose_list(&freeable);
88e0fbc45   Nick Piggin   fs: turn iprune_m...
480
  	up_read(&iprune_sem);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
481
482
483
484
485
486
487
488
489
490
491
  }
  
  /*
   * shrink_icache_memory() will attempt to reclaim some unused inodes.  Here,
   * "unused" means that no dentries are referring to the inodes: the files are
   * not open and the dcache references to those inodes have already been
   * reclaimed.
   *
   * This function is passed the number of inodes to scan, and it returns the
   * total number of remaining possibly-reclaimable inodes.
   */
7f8275d0d   Dave Chinner   mm: add context a...
492
  static int shrink_icache_memory(struct shrinker *shrink, int nr, gfp_t gfp_mask)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
493
494
495
496
497
498
  {
  	if (nr) {
  		/*
  		 * Nasty deadlock avoidance.  We may hold various FS locks,
  		 * and we don't want to recurse into the FS that called us
  		 * in clear_inode() and friends..
6b3304b53   Manish Katiyar   Make checkpatch.p...
499
  		 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
500
501
502
503
504
505
  		if (!(gfp_mask & __GFP_FS))
  			return -1;
  		prune_icache(nr);
  	}
  	return (inodes_stat.nr_unused / 100) * sysctl_vfs_cache_pressure;
  }
8e1f936b7   Rusty Russell   mm: clean up and ...
506
507
508
509
  static struct shrinker icache_shrinker = {
  	.shrink = shrink_icache_memory,
  	.seeks = DEFAULT_SEEKS,
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
510
511
512
513
514
515
516
  static void __wait_on_freeing_inode(struct inode *inode);
  /*
   * Called with the inode lock held.
   * NOTE: we are not increasing the inode-refcount, you must call __iget()
   * by hand after calling find_inode now! This simplifies iunique and won't
   * add any additional branch in the common code.
   */
6b3304b53   Manish Katiyar   Make checkpatch.p...
517
518
519
520
  static struct inode *find_inode(struct super_block *sb,
  				struct hlist_head *head,
  				int (*test)(struct inode *, void *),
  				void *data)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
521
522
  {
  	struct hlist_node *node;
6b3304b53   Manish Katiyar   Make checkpatch.p...
523
  	struct inode *inode = NULL;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
524
525
  
  repeat:
c5c8be3ce   Matthias Kaehlcke   fs/inode.c: use h...
526
  	hlist_for_each_entry(inode, node, head, i_hash) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
527
528
529
530
  		if (inode->i_sb != sb)
  			continue;
  		if (!test(inode, data))
  			continue;
a4ffdde6e   Al Viro   simplify checks f...
531
  		if (inode->i_state & (I_FREEING|I_WILL_FREE)) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
532
533
534
535
536
537
538
539
540
541
542
543
  			__wait_on_freeing_inode(inode);
  			goto repeat;
  		}
  		break;
  	}
  	return node ? inode : NULL;
  }
  
  /*
   * find_inode_fast is the fast path version of find_inode, see the comment at
   * iget_locked for details.
   */
6b3304b53   Manish Katiyar   Make checkpatch.p...
544
545
  static struct inode *find_inode_fast(struct super_block *sb,
  				struct hlist_head *head, unsigned long ino)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
546
547
  {
  	struct hlist_node *node;
6b3304b53   Manish Katiyar   Make checkpatch.p...
548
  	struct inode *inode = NULL;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
549
550
  
  repeat:
c5c8be3ce   Matthias Kaehlcke   fs/inode.c: use h...
551
  	hlist_for_each_entry(inode, node, head, i_hash) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
552
553
554
555
  		if (inode->i_ino != ino)
  			continue;
  		if (inode->i_sb != sb)
  			continue;
a4ffdde6e   Al Viro   simplify checks f...
556
  		if (inode->i_state & (I_FREEING|I_WILL_FREE)) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
557
558
559
560
561
562
563
  			__wait_on_freeing_inode(inode);
  			goto repeat;
  		}
  		break;
  	}
  	return node ? inode : NULL;
  }
8290c35f8   David Chinner   Inode: Allow exte...
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
  static unsigned long hash(struct super_block *sb, unsigned long hashval)
  {
  	unsigned long tmp;
  
  	tmp = (hashval * (unsigned long)sb) ^ (GOLDEN_RATIO_PRIME + hashval) /
  			L1_CACHE_BYTES;
  	tmp = tmp ^ ((tmp ^ GOLDEN_RATIO_PRIME) >> I_HASHBITS);
  	return tmp & I_HASHMASK;
  }
  
  static inline void
  __inode_add_to_lists(struct super_block *sb, struct hlist_head *head,
  			struct inode *inode)
  {
  	inodes_stat.nr_inodes++;
  	list_add(&inode->i_list, &inode_in_use);
  	list_add(&inode->i_sb_list, &sb->s_inodes);
  	if (head)
  		hlist_add_head(&inode->i_hash, head);
  }
  
  /**
   * inode_add_to_lists - add a new inode to relevant lists
0bc02f3fa   Randy Dunlap   fs/inode: fix ker...
587
588
   * @sb: superblock inode belongs to
   * @inode: inode to mark in use
8290c35f8   David Chinner   Inode: Allow exte...
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
   *
   * When an inode is allocated it needs to be accounted for, added to the in use
   * list, the owning superblock and the inode hash. This needs to be done under
   * the inode_lock, so export a function to do this rather than the inode lock
   * itself. We calculate the hash list to add to here so it is all internal
   * which requires the caller to have already set up the inode number in the
   * inode to add.
   */
  void inode_add_to_lists(struct super_block *sb, struct inode *inode)
  {
  	struct hlist_head *head = inode_hashtable + hash(sb, inode->i_ino);
  
  	spin_lock(&inode_lock);
  	__inode_add_to_lists(sb, head, inode);
  	spin_unlock(&inode_lock);
  }
  EXPORT_SYMBOL_GPL(inode_add_to_lists);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
606
607
608
609
  /**
   *	new_inode 	- obtain an inode
   *	@sb: superblock
   *
769848c03   Mel Gorman   Add __GFP_MOVABLE...
610
   *	Allocates a new inode for given superblock. The default gfp_mask
3c1d43787   Hugh Dickins   mm: remove GFP_HI...
611
   *	for allocations related to inode->i_mapping is GFP_HIGHUSER_MOVABLE.
769848c03   Mel Gorman   Add __GFP_MOVABLE...
612
613
614
615
616
   *	If HIGHMEM pages are unsuitable or it is known that pages allocated
   *	for the page cache are not reclaimable or migratable,
   *	mapping_set_gfp_mask() must be called with suitable flags on the
   *	newly created inode's mapping
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
617
618
619
   */
  struct inode *new_inode(struct super_block *sb)
  {
866b04fcc   Jeff Layton   inode numbering: ...
620
621
622
623
624
625
  	/*
  	 * 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;
6b3304b53   Manish Katiyar   Make checkpatch.p...
626
  	struct inode *inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
627
628
  
  	spin_lock_prefetch(&inode_lock);
6b3304b53   Manish Katiyar   Make checkpatch.p...
629

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
630
631
632
  	inode = alloc_inode(sb);
  	if (inode) {
  		spin_lock(&inode_lock);
8290c35f8   David Chinner   Inode: Allow exte...
633
  		__inode_add_to_lists(sb, NULL, inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
634
635
636
637
638
639
  		inode->i_ino = ++last_ino;
  		inode->i_state = 0;
  		spin_unlock(&inode_lock);
  	}
  	return inode;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
640
641
642
643
  EXPORT_SYMBOL(new_inode);
  
  void unlock_new_inode(struct inode *inode)
  {
14358e6dd   Peter Zijlstra   lockdep: annotate...
644
  #ifdef CONFIG_DEBUG_LOCK_ALLOC
1e89a5e15   Peter Zijlstra   lockdep: fixup th...
645
646
  	if (inode->i_mode & S_IFDIR) {
  		struct file_system_type *type = inode->i_sb->s_type;
9a7aa12f3   Jan Kara   vfs: Set special ...
647
648
649
650
651
652
653
654
655
656
657
  		/* Set new key only if filesystem hasn't already changed it */
  		if (!lockdep_match_class(&inode->i_mutex,
  		    &type->i_mutex_key)) {
  			/*
  			 * ensure nobody is actually holding i_mutex
  			 */
  			mutex_destroy(&inode->i_mutex);
  			mutex_init(&inode->i_mutex);
  			lockdep_set_class(&inode->i_mutex,
  					  &type->i_mutex_dir_key);
  		}
1e89a5e15   Peter Zijlstra   lockdep: fixup th...
658
  	}
14358e6dd   Peter Zijlstra   lockdep: annotate...
659
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
660
  	/*
eaff8079d   Christoph Hellwig   kill I_LOCK
661
  	 * This is special!  We do not need the spinlock when clearing I_NEW,
580be0837   Jan Kara   fs: make sure dat...
662
663
  	 * because we're guaranteed that nobody else tries to do anything about
  	 * the state of the inode when it is locked, as we just created it (so
eaff8079d   Christoph Hellwig   kill I_LOCK
664
  	 * there can be no old holders that haven't tested I_NEW).
580be0837   Jan Kara   fs: make sure dat...
665
  	 * However we must emit the memory barrier so that other CPUs reliably
eaff8079d   Christoph Hellwig   kill I_LOCK
666
  	 * see the clearing of I_NEW after the other inode initialisation has
580be0837   Jan Kara   fs: make sure dat...
667
  	 * completed.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
668
  	 */
580be0837   Jan Kara   fs: make sure dat...
669
  	smp_mb();
eaff8079d   Christoph Hellwig   kill I_LOCK
670
671
  	WARN_ON(!(inode->i_state & I_NEW));
  	inode->i_state &= ~I_NEW;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
672
673
  	wake_up_inode(inode);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
674
675
676
677
678
679
680
681
  EXPORT_SYMBOL(unlock_new_inode);
  
  /*
   * This is called without the inode lock held.. Be careful.
   *
   * We no longer cache the sb_flags in i_flags - see fs.h
   *	-- rmk@arm.uk.linux.org
   */
6b3304b53   Manish Katiyar   Make checkpatch.p...
682
683
684
685
686
  static struct inode *get_new_inode(struct super_block *sb,
  				struct hlist_head *head,
  				int (*test)(struct inode *, void *),
  				int (*set)(struct inode *, void *),
  				void *data)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
687
  {
6b3304b53   Manish Katiyar   Make checkpatch.p...
688
  	struct inode *inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
689
690
691
  
  	inode = alloc_inode(sb);
  	if (inode) {
6b3304b53   Manish Katiyar   Make checkpatch.p...
692
  		struct inode *old;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
693
694
695
696
697
698
699
  
  		spin_lock(&inode_lock);
  		/* We released the lock, so.. */
  		old = find_inode(sb, head, test, data);
  		if (!old) {
  			if (set(inode, data))
  				goto set_failed;
8290c35f8   David Chinner   Inode: Allow exte...
700
  			__inode_add_to_lists(sb, head, inode);
eaff8079d   Christoph Hellwig   kill I_LOCK
701
  			inode->i_state = I_NEW;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
  			spin_unlock(&inode_lock);
  
  			/* Return the locked inode with I_NEW set, the
  			 * caller is responsible for filling in the contents
  			 */
  			return inode;
  		}
  
  		/*
  		 * Uhhuh, somebody else created the same inode under
  		 * us. Use the old inode instead of the one we just
  		 * allocated.
  		 */
  		__iget(old);
  		spin_unlock(&inode_lock);
  		destroy_inode(inode);
  		inode = old;
  		wait_on_inode(inode);
  	}
  	return inode;
  
  set_failed:
  	spin_unlock(&inode_lock);
  	destroy_inode(inode);
  	return NULL;
  }
  
  /*
   * get_new_inode_fast is the fast path version of get_new_inode, see the
   * comment at iget_locked for details.
   */
6b3304b53   Manish Katiyar   Make checkpatch.p...
733
734
  static struct inode *get_new_inode_fast(struct super_block *sb,
  				struct hlist_head *head, unsigned long ino)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
735
  {
6b3304b53   Manish Katiyar   Make checkpatch.p...
736
  	struct inode *inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
737
738
739
  
  	inode = alloc_inode(sb);
  	if (inode) {
6b3304b53   Manish Katiyar   Make checkpatch.p...
740
  		struct inode *old;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
741
742
743
744
745
746
  
  		spin_lock(&inode_lock);
  		/* We released the lock, so.. */
  		old = find_inode_fast(sb, head, ino);
  		if (!old) {
  			inode->i_ino = ino;
8290c35f8   David Chinner   Inode: Allow exte...
747
  			__inode_add_to_lists(sb, head, inode);
eaff8079d   Christoph Hellwig   kill I_LOCK
748
  			inode->i_state = I_NEW;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
  			spin_unlock(&inode_lock);
  
  			/* Return the locked inode with I_NEW set, the
  			 * caller is responsible for filling in the contents
  			 */
  			return inode;
  		}
  
  		/*
  		 * Uhhuh, somebody else created the same inode under
  		 * us. Use the old inode instead of the one we just
  		 * allocated.
  		 */
  		__iget(old);
  		spin_unlock(&inode_lock);
  		destroy_inode(inode);
  		inode = old;
  		wait_on_inode(inode);
  	}
  	return inode;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
  /**
   *	iunique - get a unique inode number
   *	@sb: superblock
   *	@max_reserved: highest reserved inode number
   *
   *	Obtain an inode number that is unique on the system for a given
   *	superblock. This is used by file systems that have no natural
   *	permanent inode numbering system. An inode number is returned that
   *	is higher than the reserved limit but unique.
   *
   *	BUGS:
   *	With a large number of inodes live on the file system this function
   *	currently becomes quite slow.
   */
  ino_t iunique(struct super_block *sb, ino_t max_reserved)
  {
866b04fcc   Jeff Layton   inode numbering: ...
786
787
788
789
790
791
  	/*
  	 * 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;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
792
  	struct inode *inode;
3361c7beb   Jeffrey Layton   make iunique use ...
793
  	struct hlist_head *head;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
794
  	ino_t res;
3361c7beb   Jeffrey Layton   make iunique use ...
795

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
796
  	spin_lock(&inode_lock);
3361c7beb   Jeffrey Layton   make iunique use ...
797
798
799
  	do {
  		if (counter <= max_reserved)
  			counter = max_reserved + 1;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
800
  		res = counter++;
3361c7beb   Jeffrey Layton   make iunique use ...
801
  		head = inode_hashtable + hash(sb, res);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
802
  		inode = find_inode_fast(sb, head, res);
3361c7beb   Jeffrey Layton   make iunique use ...
803
804
  	} while (inode != NULL);
  	spin_unlock(&inode_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
805

3361c7beb   Jeffrey Layton   make iunique use ...
806
807
  	return res;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
808
809
810
811
812
  EXPORT_SYMBOL(iunique);
  
  struct inode *igrab(struct inode *inode)
  {
  	spin_lock(&inode_lock);
a4ffdde6e   Al Viro   simplify checks f...
813
  	if (!(inode->i_state & (I_FREEING|I_WILL_FREE)))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
814
815
816
817
818
819
820
821
822
823
824
  		__iget(inode);
  	else
  		/*
  		 * Handle the case where s_op->clear_inode is not been
  		 * called yet, and somebody is calling igrab
  		 * while the inode is getting freed.
  		 */
  		inode = NULL;
  	spin_unlock(&inode_lock);
  	return inode;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
825
826
827
828
829
830
831
832
  EXPORT_SYMBOL(igrab);
  
  /**
   * ifind - internal function, you want ilookup5() or iget5().
   * @sb:		super block of file system to search
   * @head:       the head of the list to search
   * @test:	callback used for comparisons between inodes
   * @data:	opaque data pointer to pass to @test
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
833
   * @wait:	if true wait for the inode to be unlocked, if false do not
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
834
835
836
837
838
839
840
841
842
843
844
845
   *
   * ifind() searches for the inode specified by @data in the inode
   * cache. This is a generalized version of ifind_fast() for file systems where
   * the inode number is not sufficient for unique identification of an inode.
   *
   * If the inode is in the cache, the inode is returned with an incremented
   * reference count.
   *
   * Otherwise NULL is returned.
   *
   * Note, @test is called with the inode_lock held, so can't sleep.
   */
5d2bea458   Matt Mackall   [PATCH] tiny: Uni...
846
  static struct inode *ifind(struct super_block *sb,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
847
  		struct hlist_head *head, int (*test)(struct inode *, void *),
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
848
  		void *data, const int wait)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
849
850
851
852
853
854
855
856
  {
  	struct inode *inode;
  
  	spin_lock(&inode_lock);
  	inode = find_inode(sb, head, test, data);
  	if (inode) {
  		__iget(inode);
  		spin_unlock(&inode_lock);
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
857
858
  		if (likely(wait))
  			wait_on_inode(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
  		return inode;
  	}
  	spin_unlock(&inode_lock);
  	return NULL;
  }
  
  /**
   * ifind_fast - internal function, you want ilookup() or iget().
   * @sb:		super block of file system to search
   * @head:       head of the list to search
   * @ino:	inode number to search for
   *
   * ifind_fast() searches for the inode @ino in the inode cache. This is for
   * file systems where the inode number is sufficient for unique identification
   * of an inode.
   *
   * If the inode is in the cache, the inode is returned with an incremented
   * reference count.
   *
   * Otherwise NULL is returned.
   */
5d2bea458   Matt Mackall   [PATCH] tiny: Uni...
880
  static struct inode *ifind_fast(struct super_block *sb,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
  		struct hlist_head *head, unsigned long ino)
  {
  	struct inode *inode;
  
  	spin_lock(&inode_lock);
  	inode = find_inode_fast(sb, head, ino);
  	if (inode) {
  		__iget(inode);
  		spin_unlock(&inode_lock);
  		wait_on_inode(inode);
  		return inode;
  	}
  	spin_unlock(&inode_lock);
  	return NULL;
  }
  
  /**
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
898
   * ilookup5_nowait - search for an inode in the inode cache
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
899
900
901
902
903
904
905
906
907
908
909
   * @sb:		super block of file system to search
   * @hashval:	hash value (usually inode number) to search for
   * @test:	callback used for comparisons between inodes
   * @data:	opaque data pointer to pass to @test
   *
   * ilookup5() uses ifind() to search for the inode specified by @hashval and
   * @data in the inode cache. This is a generalized version of ilookup() for
   * file systems where the inode number is not sufficient for unique
   * identification of an inode.
   *
   * If the inode is in the cache, the inode is returned with an incremented
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
   * reference count.  Note, the inode lock is not waited upon so you have to be
   * very careful what you do with the returned inode.  You probably should be
   * using ilookup5() instead.
   *
   * Otherwise NULL is returned.
   *
   * Note, @test is called with the inode_lock held, so can't sleep.
   */
  struct inode *ilookup5_nowait(struct super_block *sb, unsigned long hashval,
  		int (*test)(struct inode *, void *), void *data)
  {
  	struct hlist_head *head = inode_hashtable + hash(sb, hashval);
  
  	return ifind(sb, head, test, data, 0);
  }
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
  EXPORT_SYMBOL(ilookup5_nowait);
  
  /**
   * ilookup5 - search for an inode in the inode cache
   * @sb:		super block of file system to search
   * @hashval:	hash value (usually inode number) to search for
   * @test:	callback used for comparisons between inodes
   * @data:	opaque data pointer to pass to @test
   *
   * ilookup5() uses ifind() to search for the inode specified by @hashval and
   * @data in the inode cache. This is a generalized version of ilookup() for
   * file systems where the inode number is not sufficient for unique
   * identification of an inode.
   *
   * If the inode is in the cache, the inode lock is waited upon and the inode is
   * returned with an incremented reference count.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
941
942
943
944
945
946
947
948
949
   *
   * Otherwise NULL is returned.
   *
   * Note, @test is called with the inode_lock held, so can't sleep.
   */
  struct inode *ilookup5(struct super_block *sb, unsigned long hashval,
  		int (*test)(struct inode *, void *), void *data)
  {
  	struct hlist_head *head = inode_hashtable + hash(sb, hashval);
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
950
  	return ifind(sb, head, test, data, 1);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
951
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
  EXPORT_SYMBOL(ilookup5);
  
  /**
   * ilookup - search for an inode in the inode cache
   * @sb:		super block of file system to search
   * @ino:	inode number to search for
   *
   * ilookup() uses ifind_fast() to search for the inode @ino in the inode cache.
   * This is for file systems where the inode number is sufficient for unique
   * identification of an inode.
   *
   * If the inode is in the cache, the inode is returned with an incremented
   * reference count.
   *
   * Otherwise NULL is returned.
   */
  struct inode *ilookup(struct super_block *sb, unsigned long ino)
  {
  	struct hlist_head *head = inode_hashtable + hash(sb, ino);
  
  	return ifind_fast(sb, head, ino);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
974
975
976
977
978
979
980
981
982
983
  EXPORT_SYMBOL(ilookup);
  
  /**
   * iget5_locked - obtain an inode from a mounted file system
   * @sb:		super block of file system
   * @hashval:	hash value (usually inode number) to get
   * @test:	callback used for comparisons between inodes
   * @set:	callback used to initialize a new struct inode
   * @data:	opaque data pointer to pass to @test and @set
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
   * iget5_locked() uses ifind() to search for the inode specified by @hashval
   * and @data in the inode cache and if present it is returned with an increased
   * reference count. This is a generalized version of iget_locked() for file
   * systems where the inode number is not sufficient for unique identification
   * of an inode.
   *
   * If the inode is not in cache, get_new_inode() is called to allocate a new
   * inode and this is returned locked, hashed, and with the I_NEW flag set. The
   * file system gets to fill it in before unlocking it via unlock_new_inode().
   *
   * Note both @test and @set are called with the inode_lock held, so can't sleep.
   */
  struct inode *iget5_locked(struct super_block *sb, unsigned long hashval,
  		int (*test)(struct inode *, void *),
  		int (*set)(struct inode *, void *), void *data)
  {
  	struct hlist_head *head = inode_hashtable + hash(sb, hashval);
  	struct inode *inode;
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
1002
  	inode = ifind(sb, head, test, data, 1);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1003
1004
1005
1006
1007
1008
1009
1010
  	if (inode)
  		return inode;
  	/*
  	 * get_new_inode() will do the right thing, re-trying the search
  	 * in case it had to block at any point.
  	 */
  	return get_new_inode(sb, head, test, set, data);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1011
1012
1013
1014
1015
1016
1017
  EXPORT_SYMBOL(iget5_locked);
  
  /**
   * iget_locked - obtain an inode from a mounted file system
   * @sb:		super block of file system
   * @ino:	inode number to get
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
   * iget_locked() uses ifind_fast() to search for the inode specified by @ino in
   * the inode cache and if present it is returned with an increased reference
   * count. This is for file systems where the inode number is sufficient for
   * unique identification of an inode.
   *
   * If the inode is not in cache, get_new_inode_fast() is called to allocate a
   * new inode and this is returned locked, hashed, and with the I_NEW flag set.
   * The file system gets to fill it in before unlocking it via
   * unlock_new_inode().
   */
  struct inode *iget_locked(struct super_block *sb, unsigned long ino)
  {
  	struct hlist_head *head = inode_hashtable + hash(sb, ino);
  	struct inode *inode;
  
  	inode = ifind_fast(sb, head, ino);
  	if (inode)
  		return inode;
  	/*
  	 * get_new_inode_fast() will do the right thing, re-trying the search
  	 * in case it had to block at any point.
  	 */
  	return get_new_inode_fast(sb, head, ino);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1042
  EXPORT_SYMBOL(iget_locked);
261bca86e   Al Viro   nfsd/create race ...
1043
1044
1045
1046
1047
  int insert_inode_locked(struct inode *inode)
  {
  	struct super_block *sb = inode->i_sb;
  	ino_t ino = inode->i_ino;
  	struct hlist_head *head = inode_hashtable + hash(sb, ino);
261bca86e   Al Viro   nfsd/create race ...
1048

eaff8079d   Christoph Hellwig   kill I_LOCK
1049
  	inode->i_state |= I_NEW;
261bca86e   Al Viro   nfsd/create race ...
1050
  	while (1) {
72a43d63c   Al Viro   ext3/4 with synch...
1051
1052
  		struct hlist_node *node;
  		struct inode *old = NULL;
261bca86e   Al Viro   nfsd/create race ...
1053
  		spin_lock(&inode_lock);
72a43d63c   Al Viro   ext3/4 with synch...
1054
1055
1056
1057
1058
  		hlist_for_each_entry(old, node, head, i_hash) {
  			if (old->i_ino != ino)
  				continue;
  			if (old->i_sb != sb)
  				continue;
a4ffdde6e   Al Viro   simplify checks f...
1059
  			if (old->i_state & (I_FREEING|I_WILL_FREE))
72a43d63c   Al Viro   ext3/4 with synch...
1060
1061
1062
1063
  				continue;
  			break;
  		}
  		if (likely(!node)) {
261bca86e   Al Viro   nfsd/create race ...
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
  			hlist_add_head(&inode->i_hash, head);
  			spin_unlock(&inode_lock);
  			return 0;
  		}
  		__iget(old);
  		spin_unlock(&inode_lock);
  		wait_on_inode(old);
  		if (unlikely(!hlist_unhashed(&old->i_hash))) {
  			iput(old);
  			return -EBUSY;
  		}
  		iput(old);
  	}
  }
261bca86e   Al Viro   nfsd/create race ...
1078
1079
1080
1081
1082
1083
1084
  EXPORT_SYMBOL(insert_inode_locked);
  
  int insert_inode_locked4(struct inode *inode, unsigned long hashval,
  		int (*test)(struct inode *, void *), void *data)
  {
  	struct super_block *sb = inode->i_sb;
  	struct hlist_head *head = inode_hashtable + hash(sb, hashval);
261bca86e   Al Viro   nfsd/create race ...
1085

eaff8079d   Christoph Hellwig   kill I_LOCK
1086
  	inode->i_state |= I_NEW;
261bca86e   Al Viro   nfsd/create race ...
1087
1088
  
  	while (1) {
72a43d63c   Al Viro   ext3/4 with synch...
1089
1090
  		struct hlist_node *node;
  		struct inode *old = NULL;
261bca86e   Al Viro   nfsd/create race ...
1091
  		spin_lock(&inode_lock);
72a43d63c   Al Viro   ext3/4 with synch...
1092
1093
1094
1095
1096
  		hlist_for_each_entry(old, node, head, i_hash) {
  			if (old->i_sb != sb)
  				continue;
  			if (!test(old, data))
  				continue;
a4ffdde6e   Al Viro   simplify checks f...
1097
  			if (old->i_state & (I_FREEING|I_WILL_FREE))
72a43d63c   Al Viro   ext3/4 with synch...
1098
1099
1100
1101
  				continue;
  			break;
  		}
  		if (likely(!node)) {
261bca86e   Al Viro   nfsd/create race ...
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
  			hlist_add_head(&inode->i_hash, head);
  			spin_unlock(&inode_lock);
  			return 0;
  		}
  		__iget(old);
  		spin_unlock(&inode_lock);
  		wait_on_inode(old);
  		if (unlikely(!hlist_unhashed(&old->i_hash))) {
  			iput(old);
  			return -EBUSY;
  		}
  		iput(old);
  	}
  }
261bca86e   Al Viro   nfsd/create race ...
1116
  EXPORT_SYMBOL(insert_inode_locked4);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
  /**
   *	__insert_inode_hash - hash an inode
   *	@inode: unhashed inode
   *	@hashval: unsigned long value used to locate this object in the
   *		inode_hashtable.
   *
   *	Add an inode to the inode hash for this superblock.
   */
  void __insert_inode_hash(struct inode *inode, unsigned long hashval)
  {
  	struct hlist_head *head = inode_hashtable + hash(inode->i_sb, hashval);
  	spin_lock(&inode_lock);
  	hlist_add_head(&inode->i_hash, head);
  	spin_unlock(&inode_lock);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
  EXPORT_SYMBOL(__insert_inode_hash);
  
  /**
   *	remove_inode_hash - remove an inode from the hash
   *	@inode: inode to unhash
   *
   *	Remove an inode from the superblock.
   */
  void remove_inode_hash(struct inode *inode)
  {
  	spin_lock(&inode_lock);
  	hlist_del_init(&inode->i_hash);
  	spin_unlock(&inode_lock);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1146
  EXPORT_SYMBOL(remove_inode_hash);
45321ac54   Al Viro   Make ->drop_inode...
1147
1148
1149
1150
1151
  int generic_delete_inode(struct inode *inode)
  {
  	return 1;
  }
  EXPORT_SYMBOL(generic_delete_inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1152
  /*
45321ac54   Al Viro   Make ->drop_inode...
1153
1154
1155
   * Normal UNIX filesystem behaviour: delete the
   * inode when the usage count drops to zero, and
   * i_nlink is zero.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1156
   */
45321ac54   Al Viro   Make ->drop_inode...
1157
  int generic_drop_inode(struct inode *inode)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1158
  {
45321ac54   Al Viro   Make ->drop_inode...
1159
  	return !inode->i_nlink || hlist_unhashed(&inode->i_hash);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1160
  }
45321ac54   Al Viro   Make ->drop_inode...
1161
  EXPORT_SYMBOL_GPL(generic_drop_inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1162

45321ac54   Al Viro   Make ->drop_inode...
1163
1164
1165
  /*
   * Called when we're dropping the last reference
   * to an inode.
22fe40421   Jan Kara   vfs: split generi...
1166
   *
45321ac54   Al Viro   Make ->drop_inode...
1167
1168
1169
1170
1171
   * Call the FS "drop_inode()" function, defaulting to
   * the legacy UNIX filesystem behaviour.  If it tells
   * us to evict inode, do so.  Otherwise, retain inode
   * in cache if fs is alive, sync and evict if fs is
   * shutting down.
22fe40421   Jan Kara   vfs: split generi...
1172
   */
45321ac54   Al Viro   Make ->drop_inode...
1173
  static void iput_final(struct inode *inode)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1174
1175
  {
  	struct super_block *sb = inode->i_sb;
45321ac54   Al Viro   Make ->drop_inode...
1176
1177
1178
1179
1180
1181
1182
  	const struct super_operations *op = inode->i_sb->s_op;
  	int drop;
  
  	if (op && op->drop_inode)
  		drop = op->drop_inode(inode);
  	else
  		drop = generic_drop_inode(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1183

45321ac54   Al Viro   Make ->drop_inode...
1184
  	if (!drop) {
1c0eeaf56   Joern Engel   introduce I_SYNC
1185
  		if (!(inode->i_state & (I_DIRTY|I_SYNC)))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1186
1187
  			list_move(&inode->i_list, &inode_unused);
  		inodes_stat.nr_unused++;
acb0c854f   Christoph Hellwig   vfs: remove super...
1188
  		if (sb->s_flags & MS_ACTIVE) {
991114c6f   Alexander Viro   [PATCH] fix for p...
1189
  			spin_unlock(&inode_lock);
45321ac54   Al Viro   Make ->drop_inode...
1190
  			return;
991114c6f   Alexander Viro   [PATCH] fix for p...
1191
  		}
7ef0d7377   Nick Piggin   fs: new inode i_s...
1192
  		WARN_ON(inode->i_state & I_NEW);
991114c6f   Alexander Viro   [PATCH] fix for p...
1193
1194
  		inode->i_state |= I_WILL_FREE;
  		spin_unlock(&inode_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1195
1196
  		write_inode_now(inode, 1);
  		spin_lock(&inode_lock);
7ef0d7377   Nick Piggin   fs: new inode i_s...
1197
  		WARN_ON(inode->i_state & I_NEW);
991114c6f   Alexander Viro   [PATCH] fix for p...
1198
  		inode->i_state &= ~I_WILL_FREE;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1199
1200
1201
1202
1203
  		inodes_stat.nr_unused--;
  		hlist_del_init(&inode->i_hash);
  	}
  	list_del_init(&inode->i_list);
  	list_del_init(&inode->i_sb_list);
7ef0d7377   Nick Piggin   fs: new inode i_s...
1204
  	WARN_ON(inode->i_state & I_NEW);
991114c6f   Alexander Viro   [PATCH] fix for p...
1205
  	inode->i_state |= I_FREEING;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1206
1207
  	inodes_stat.nr_inodes--;
  	spin_unlock(&inode_lock);
644da5960   Al Viro   fs/inode.c:evict(...
1208
  	evict(inode);
45321ac54   Al Viro   Make ->drop_inode...
1209
1210
1211
  	spin_lock(&inode_lock);
  	hlist_del_init(&inode->i_hash);
  	spin_unlock(&inode_lock);
7f04c26d7   Andrea Arcangeli   [PATCH] fix nr_un...
1212
  	wake_up_inode(inode);
45321ac54   Al Viro   Make ->drop_inode...
1213
  	BUG_ON(inode->i_state != (I_FREEING | I_CLEAR));
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1214
1215
  	destroy_inode(inode);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1216
  /**
6b3304b53   Manish Katiyar   Make checkpatch.p...
1217
   *	iput	- put an inode
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
   *	@inode: inode to put
   *
   *	Puts an inode, dropping its usage count. If the inode use count hits
   *	zero, the inode is then freed and may also be destroyed.
   *
   *	Consequently, iput() can sleep.
   */
  void iput(struct inode *inode)
  {
  	if (inode) {
a4ffdde6e   Al Viro   simplify checks f...
1228
  		BUG_ON(inode->i_state & I_CLEAR);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1229

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1230
1231
1232
1233
  		if (atomic_dec_and_lock(&inode->i_count, &inode_lock))
  			iput_final(inode);
  	}
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
  EXPORT_SYMBOL(iput);
  
  /**
   *	bmap	- find a block number in a file
   *	@inode: inode of file
   *	@block: block to find
   *
   *	Returns the block number on the device holding the inode that
   *	is the disk block number for the block of the file requested.
   *	That is, asked for block 4 of inode 1 the function will return the
6b3304b53   Manish Katiyar   Make checkpatch.p...
1244
   *	disk block relative to the disk start that holds that block of the
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1245
1246
   *	file.
   */
6b3304b53   Manish Katiyar   Make checkpatch.p...
1247
  sector_t bmap(struct inode *inode, sector_t block)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1248
1249
1250
1251
1252
1253
  {
  	sector_t res = 0;
  	if (inode->i_mapping->a_ops->bmap)
  		res = inode->i_mapping->a_ops->bmap(inode->i_mapping, block);
  	return res;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1254
  EXPORT_SYMBOL(bmap);
11ff6f05f   Matthew Garrett   Allow relatime to...
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
  /*
   * With relative atime, only update atime if the previous atime is
   * earlier than either the ctime or mtime or if at least a day has
   * passed since the last atime update.
   */
  static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
  			     struct timespec now)
  {
  
  	if (!(mnt->mnt_flags & MNT_RELATIME))
  		return 1;
  	/*
  	 * Is mtime younger than atime? If yes, update atime:
  	 */
  	if (timespec_compare(&inode->i_mtime, &inode->i_atime) >= 0)
  		return 1;
  	/*
  	 * Is ctime younger than atime? If yes, update atime:
  	 */
  	if (timespec_compare(&inode->i_ctime, &inode->i_atime) >= 0)
  		return 1;
  
  	/*
  	 * Is the previous atime value older than a day? If yes,
  	 * update atime:
  	 */
  	if ((long)(now.tv_sec - inode->i_atime.tv_sec) >= 24*60*60)
  		return 1;
  	/*
  	 * Good, we can skip the atime update:
  	 */
  	return 0;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1288
  /**
869243a0f   Christoph Hellwig   [PATCH] remove up...
1289
1290
   *	touch_atime	-	update the access time
   *	@mnt: mount the inode is accessed on
7045f37b1   Martin Waitz   [PATCH] DocBook: ...
1291
   *	@dentry: dentry accessed
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1292
1293
1294
1295
1296
   *
   *	Update the accessed time on an inode and mark it for writeback.
   *	This function automatically handles read only file systems and media,
   *	as well as the "noatime" flag and inode specific "noatime" markers.
   */
869243a0f   Christoph Hellwig   [PATCH] remove up...
1297
  void touch_atime(struct vfsmount *mnt, struct dentry *dentry)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1298
  {
869243a0f   Christoph Hellwig   [PATCH] remove up...
1299
  	struct inode *inode = dentry->d_inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1300
  	struct timespec now;
cdb70f3f7   Dave Hansen   [PATCH] r/o bind ...
1301
  	if (inode->i_flags & S_NOATIME)
b12536c27   Andi Kleen   vfs: optimization...
1302
  		return;
37756ced1   Eric Dumazet   [PATCH] avoid one...
1303
  	if (IS_NOATIME(inode))
b12536c27   Andi Kleen   vfs: optimization...
1304
  		return;
b22761384   Andrew Morton   [PATCH] touch_ati...
1305
  	if ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode))
b12536c27   Andi Kleen   vfs: optimization...
1306
  		return;
47ae32d6a   Valerie Henson   [PATCH] relative ...
1307

cdb70f3f7   Dave Hansen   [PATCH] r/o bind ...
1308
  	if (mnt->mnt_flags & MNT_NOATIME)
b12536c27   Andi Kleen   vfs: optimization...
1309
  		return;
cdb70f3f7   Dave Hansen   [PATCH] r/o bind ...
1310
  	if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))
b12536c27   Andi Kleen   vfs: optimization...
1311
  		return;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1312
1313
  
  	now = current_fs_time(inode->i_sb);
11ff6f05f   Matthew Garrett   Allow relatime to...
1314
1315
  
  	if (!relatime_need_update(mnt, inode, now))
b12536c27   Andi Kleen   vfs: optimization...
1316
  		return;
11ff6f05f   Matthew Garrett   Allow relatime to...
1317

47ae32d6a   Valerie Henson   [PATCH] relative ...
1318
  	if (timespec_equal(&inode->i_atime, &now))
b12536c27   Andi Kleen   vfs: optimization...
1319
1320
1321
1322
  		return;
  
  	if (mnt_want_write(mnt))
  		return;
47ae32d6a   Valerie Henson   [PATCH] relative ...
1323
1324
1325
  
  	inode->i_atime = now;
  	mark_inode_dirty_sync(inode);
cdb70f3f7   Dave Hansen   [PATCH] r/o bind ...
1326
  	mnt_drop_write(mnt);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1327
  }
869243a0f   Christoph Hellwig   [PATCH] remove up...
1328
  EXPORT_SYMBOL(touch_atime);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1329
1330
  
  /**
870f48179   Christoph Hellwig   [PATCH] replace i...
1331
1332
   *	file_update_time	-	update mtime and ctime time
   *	@file: file accessed
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1333
   *
870f48179   Christoph Hellwig   [PATCH] replace i...
1334
1335
1336
1337
   *	Update the mtime and ctime members of an inode and mark the inode
   *	for writeback.  Note that this function is meant exclusively for
   *	usage in the file write path of filesystems, and filesystems may
   *	choose to explicitly ignore update via this function with the
2eadfc0ed   Wolfram Sang   trivial: fs/inode...
1338
   *	S_NOCMTIME inode flag, e.g. for network filesystem where these
870f48179   Christoph Hellwig   [PATCH] replace i...
1339
   *	timestamps are handled by the server.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1340
   */
870f48179   Christoph Hellwig   [PATCH] replace i...
1341
  void file_update_time(struct file *file)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1342
  {
0f7fc9e4d   Josef "Jeff" Sipek   [PATCH] VFS: chan...
1343
  	struct inode *inode = file->f_path.dentry->d_inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1344
  	struct timespec now;
ce06e0b21   Andi Kleen   vfs: optimize tou...
1345
  	enum { S_MTIME = 1, S_CTIME = 2, S_VERSION = 4 } sync_it = 0;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1346

ce06e0b21   Andi Kleen   vfs: optimize tou...
1347
  	/* First try to exhaust all avenues to not sync */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1348
1349
  	if (IS_NOCMTIME(inode))
  		return;
20ddee2c7   Dave Hansen   [PATCH] r/o bind ...
1350

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1351
  	now = current_fs_time(inode->i_sb);
ce06e0b21   Andi Kleen   vfs: optimize tou...
1352
1353
  	if (!timespec_equal(&inode->i_mtime, &now))
  		sync_it = S_MTIME;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1354

ce06e0b21   Andi Kleen   vfs: optimize tou...
1355
1356
  	if (!timespec_equal(&inode->i_ctime, &now))
  		sync_it |= S_CTIME;
870f48179   Christoph Hellwig   [PATCH] replace i...
1357

ce06e0b21   Andi Kleen   vfs: optimize tou...
1358
1359
  	if (IS_I_VERSION(inode))
  		sync_it |= S_VERSION;
7a224228e   Jean Noel Cordenner   vfs: Add 64 bit i...
1360

ce06e0b21   Andi Kleen   vfs: optimize tou...
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
  	if (!sync_it)
  		return;
  
  	/* Finally allowed to write? Takes lock. */
  	if (mnt_want_write_file(file))
  		return;
  
  	/* Only change inode inside the lock region */
  	if (sync_it & S_VERSION)
  		inode_inc_iversion(inode);
  	if (sync_it & S_CTIME)
  		inode->i_ctime = now;
  	if (sync_it & S_MTIME)
  		inode->i_mtime = now;
  	mark_inode_dirty_sync(inode);
20ddee2c7   Dave Hansen   [PATCH] r/o bind ...
1376
  	mnt_drop_write(file->f_path.mnt);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1377
  }
870f48179   Christoph Hellwig   [PATCH] replace i...
1378
  EXPORT_SYMBOL(file_update_time);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1379
1380
1381
1382
1383
1384
1385
1386
1387
  
  int inode_needs_sync(struct inode *inode)
  {
  	if (IS_SYNC(inode))
  		return 1;
  	if (S_ISDIR(inode->i_mode) && IS_DIRSYNC(inode))
  		return 1;
  	return 0;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1388
  EXPORT_SYMBOL(inode_needs_sync);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1389
1390
1391
1392
1393
  int inode_wait(void *word)
  {
  	schedule();
  	return 0;
  }
d44dab8d1   Stephen Rothwell   fs: xfs needs ino...
1394
  EXPORT_SYMBOL(inode_wait);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1395
1396
  
  /*
168a9fd6a   Miklos Szeredi   [PATCH] __wait_on...
1397
1398
1399
1400
1401
1402
   * If we try to find an inode in the inode hash while it is being
   * deleted, we have to wait until the filesystem completes its
   * deletion before reporting that it isn't found.  This function waits
   * until the deletion _might_ have completed.  Callers are responsible
   * to recheck inode state.
   *
eaff8079d   Christoph Hellwig   kill I_LOCK
1403
   * It doesn't matter if I_NEW is not set initially, a call to
168a9fd6a   Miklos Szeredi   [PATCH] __wait_on...
1404
1405
   * wake_up_inode() after removing from the hash list will DTRT.
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1406
1407
1408
1409
1410
   * This is called with inode_lock held.
   */
  static void __wait_on_freeing_inode(struct inode *inode)
  {
  	wait_queue_head_t *wq;
eaff8079d   Christoph Hellwig   kill I_LOCK
1411
1412
  	DEFINE_WAIT_BIT(wait, &inode->i_state, __I_NEW);
  	wq = bit_waitqueue(&inode->i_state, __I_NEW);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1413
1414
1415
1416
1417
1418
  	prepare_to_wait(wq, &wait.wait, TASK_UNINTERRUPTIBLE);
  	spin_unlock(&inode_lock);
  	schedule();
  	finish_wait(wq, &wait.wait);
  	spin_lock(&inode_lock);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
  static __initdata unsigned long ihash_entries;
  static int __init set_ihash_entries(char *str)
  {
  	if (!str)
  		return 0;
  	ihash_entries = simple_strtoul(str, &str, 0);
  	return 1;
  }
  __setup("ihash_entries=", set_ihash_entries);
  
  /*
   * Initialize the waitqueues and inode hash table.
   */
  void __init inode_init_early(void)
  {
  	int loop;
  
  	/* If hashes are distributed across NUMA nodes, defer
  	 * hash allocation until vmalloc space is available.
  	 */
  	if (hashdist)
  		return;
  
  	inode_hashtable =
  		alloc_large_system_hash("Inode-cache",
  					sizeof(struct hlist_head),
  					ihash_entries,
  					14,
  					HASH_EARLY,
  					&i_hash_shift,
  					&i_hash_mask,
  					0);
  
  	for (loop = 0; loop < (1 << i_hash_shift); loop++)
  		INIT_HLIST_HEAD(&inode_hashtable[loop]);
  }
74bf17cff   Denis Cheng   fs: remove the un...
1455
  void __init inode_init(void)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1456
1457
1458
1459
  {
  	int loop;
  
  	/* inode slab cache */
b0196009d   Paul Jackson   [PATCH] cpuset me...
1460
1461
1462
1463
1464
  	inode_cachep = kmem_cache_create("inode_cache",
  					 sizeof(struct inode),
  					 0,
  					 (SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|
  					 SLAB_MEM_SPREAD),
20c2df83d   Paul Mundt   mm: Remove slab d...
1465
  					 init_once);
8e1f936b7   Rusty Russell   mm: clean up and ...
1466
  	register_shrinker(&icache_shrinker);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
  
  	/* Hash may have been set up in inode_init_early */
  	if (!hashdist)
  		return;
  
  	inode_hashtable =
  		alloc_large_system_hash("Inode-cache",
  					sizeof(struct hlist_head),
  					ihash_entries,
  					14,
  					0,
  					&i_hash_shift,
  					&i_hash_mask,
  					0);
  
  	for (loop = 0; loop < (1 << i_hash_shift); loop++)
  		INIT_HLIST_HEAD(&inode_hashtable[loop]);
  }
  
  void init_special_inode(struct inode *inode, umode_t mode, dev_t rdev)
  {
  	inode->i_mode = mode;
  	if (S_ISCHR(mode)) {
  		inode->i_fop = &def_chr_fops;
  		inode->i_rdev = rdev;
  	} else if (S_ISBLK(mode)) {
  		inode->i_fop = &def_blk_fops;
  		inode->i_rdev = rdev;
  	} else if (S_ISFIFO(mode))
  		inode->i_fop = &def_fifo_fops;
  	else if (S_ISSOCK(mode))
  		inode->i_fop = &bad_sock_fops;
  	else
af0d9ae81   Manish Katiyar   fs/inode.c: add d...
1500
1501
1502
1503
  		printk(KERN_DEBUG "init_special_inode: bogus i_mode (%o) for"
  				  " inode %s:%lu
  ", mode, inode->i_sb->s_id,
  				  inode->i_ino);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1504
1505
  }
  EXPORT_SYMBOL(init_special_inode);
a1bd120d1   Dmitry Monakhov   vfs: Add inode ui...
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
  
  /**
   * Init uid,gid,mode for new inode according to posix standards
   * @inode: New inode
   * @dir: Directory inode
   * @mode: mode of the new inode
   */
  void inode_init_owner(struct inode *inode, const struct inode *dir,
  			mode_t mode)
  {
  	inode->i_uid = current_fsuid();
  	if (dir && dir->i_mode & S_ISGID) {
  		inode->i_gid = dir->i_gid;
  		if (S_ISDIR(mode))
  			mode |= S_ISGID;
  	} else
  		inode->i_gid = current_fsgid();
  	inode->i_mode = mode;
  }
  EXPORT_SYMBOL(inode_init_owner);