Blame view

fs/inode.c 55.3 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
   * (C) 1997 Linus Torvalds
4b4563dc8   Christoph Hellwig   fs: cosmetic inod...
3
   * (C) 1999 Andrea Arcangeli <andrea@suse.de> (dynamic inode allocation)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
   */
e59cc473c   Al Viro   trim includes in ...
5
  #include <linux/export.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
6
7
  #include <linux/fs.h>
  #include <linux/mm.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
8
  #include <linux/backing-dev.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
9
10
11
  #include <linux/hash.h>
  #include <linux/swap.h>
  #include <linux/security.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12
13
  #include <linux/cdev.h>
  #include <linux/bootmem.h>
3be25f49b   Eric Paris   fsnotify: add mar...
14
  #include <linux/fsnotify.h>
fc33a7bb9   Christoph Hellwig   [PATCH] per-mount...
15
  #include <linux/mount.h>
f19d4a8fa   Al Viro   add caching of AC...
16
  #include <linux/posix_acl.h>
9ce6e0be0   Heiko Carstens   fs: add missing p...
17
  #include <linux/prefetch.h>
4b4563dc8   Christoph Hellwig   fs: cosmetic inod...
18
  #include <linux/buffer_head.h> /* for inode_has_buffers */
7ada4db88   Miklos Szeredi   vfs: count unlink...
19
  #include <linux/ratelimit.h>
bc3b14cb2   Dave Chinner   inode: convert in...
20
  #include <linux/list_lru.h>
0ae45f63d   Theodore Ts'o   vfs: add support ...
21
  #include <trace/events/writeback.h>
a66979aba   Dave Chinner   fs: move i_wb_lis...
22
  #include "internal.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
23
24
  
  /*
4b4563dc8   Christoph Hellwig   fs: cosmetic inod...
25
   * Inode locking rules:
250df6ed2   Dave Chinner   fs: protect inode...
26
27
28
   *
   * inode->i_lock protects:
   *   inode->i_state, inode->i_hash, __iget()
bc3b14cb2   Dave Chinner   inode: convert in...
29
   * Inode LRU list locks protect:
98b745c64   Dave Chinner   inode: Make unuse...
30
   *   inode->i_sb->s_inode_lru, inode->i_lru
74278da9f   Dave Chinner   inode: convert in...
31
32
   * inode->i_sb->s_inode_list_lock protects:
   *   inode->i_sb->s_inodes, inode->i_sb_list
f758eeabe   Christoph Hellwig   writeback: split ...
33
   * bdi->wb.list_lock protects:
c7f540849   Dave Chinner   inode: rename i_w...
34
   *   bdi->wb.b_{dirty,io,more_io,dirty_time}, inode->i_io_list
67a23c494   Dave Chinner   fs: rename inode_...
35
36
   * inode_hash_lock protects:
   *   inode_hashtable, inode->i_hash
250df6ed2   Dave Chinner   fs: protect inode...
37
38
   *
   * Lock ordering:
55fa6091d   Dave Chinner   fs: move i_sb_lis...
39
   *
74278da9f   Dave Chinner   inode: convert in...
40
   * inode->i_sb->s_inode_list_lock
55fa6091d   Dave Chinner   fs: move i_sb_lis...
41
   *   inode->i_lock
bc3b14cb2   Dave Chinner   inode: convert in...
42
   *     Inode LRU list locks
a66979aba   Dave Chinner   fs: move i_wb_lis...
43
   *
f758eeabe   Christoph Hellwig   writeback: split ...
44
   * bdi->wb.list_lock
a66979aba   Dave Chinner   fs: move i_wb_lis...
45
   *   inode->i_lock
67a23c494   Dave Chinner   fs: rename inode_...
46
47
   *
   * inode_hash_lock
74278da9f   Dave Chinner   inode: convert in...
48
   *   inode->i_sb->s_inode_list_lock
67a23c494   Dave Chinner   fs: rename inode_...
49
50
51
52
   *   inode->i_lock
   *
   * iunique_lock
   *   inode_hash_lock
250df6ed2   Dave Chinner   fs: protect inode...
53
   */
fa3536cc1   Eric Dumazet   [PATCH] Use __rea...
54
55
  static unsigned int i_hash_mask __read_mostly;
  static unsigned int i_hash_shift __read_mostly;
67a23c494   Dave Chinner   fs: rename inode_...
56
57
  static struct hlist_head *inode_hashtable __read_mostly;
  static __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
58

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
59
  /*
7dcda1c96   Jens Axboe   fs: export empty_...
60
61
62
63
64
65
66
67
   * Empty aops. Can be used for the cases where the user does not
   * define any of the address_space operations.
   */
  const struct address_space_operations empty_aops = {
  };
  EXPORT_SYMBOL(empty_aops);
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
68
69
70
   * Statistics gathering..
   */
  struct inodes_stat_t inodes_stat;
3942c07cc   Glauber Costa   fs: bump inode an...
71
72
  static DEFINE_PER_CPU(unsigned long, nr_inodes);
  static DEFINE_PER_CPU(unsigned long, nr_unused);
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
73

6b3304b53   Manish Katiyar   Make checkpatch.p...
74
  static struct kmem_cache *inode_cachep __read_mostly;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
75

3942c07cc   Glauber Costa   fs: bump inode an...
76
  static long get_nr_inodes(void)
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
77
  {
3e880fb5e   Nick Piggin   fs: use fast coun...
78
  	int i;
3942c07cc   Glauber Costa   fs: bump inode an...
79
  	long sum = 0;
3e880fb5e   Nick Piggin   fs: use fast coun...
80
81
82
  	for_each_possible_cpu(i)
  		sum += per_cpu(nr_inodes, i);
  	return sum < 0 ? 0 : sum;
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
83
  }
3942c07cc   Glauber Costa   fs: bump inode an...
84
  static inline long get_nr_inodes_unused(void)
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
85
  {
fcb94f72d   Dave Chinner   inode: convert in...
86
  	int i;
3942c07cc   Glauber Costa   fs: bump inode an...
87
  	long sum = 0;
fcb94f72d   Dave Chinner   inode: convert in...
88
89
90
  	for_each_possible_cpu(i)
  		sum += per_cpu(nr_unused, i);
  	return sum < 0 ? 0 : sum;
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
91
  }
3942c07cc   Glauber Costa   fs: bump inode an...
92
  long get_nr_dirty_inodes(void)
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
93
  {
3e880fb5e   Nick Piggin   fs: use fast coun...
94
  	/* not actually dirty inodes, but a wild approximation */
3942c07cc   Glauber Costa   fs: bump inode an...
95
  	long nr_dirty = get_nr_inodes() - get_nr_inodes_unused();
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
96
  	return nr_dirty > 0 ? nr_dirty : 0;
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
97
98
99
100
101
102
  }
  
  /*
   * Handle nr_inode sysctl
   */
  #ifdef CONFIG_SYSCTL
1f7e0616c   Joe Perches   fs: convert use o...
103
  int proc_nr_inodes(struct ctl_table *table, int write,
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
104
105
106
  		   void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	inodes_stat.nr_inodes = get_nr_inodes();
fcb94f72d   Dave Chinner   inode: convert in...
107
  	inodes_stat.nr_unused = get_nr_inodes_unused();
3942c07cc   Glauber Costa   fs: bump inode an...
108
  	return proc_doulongvec_minmax(table, write, buffer, lenp, ppos);
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
109
110
  }
  #endif
bd9b51e79   Al Viro   make default ->i_...
111
112
113
114
  static int no_open(struct inode *inode, struct file *file)
  {
  	return -ENXIO;
  }
2cb1599f9   David Chinner   Inode: Allow exte...
115
  /**
6e7c2b4dd   Masahiro Yamada   scripts/spelling....
116
   * inode_init_always - perform inode structure initialisation
0bc02f3fa   Randy Dunlap   fs/inode: fix ker...
117
118
   * @sb: superblock inode belongs to
   * @inode: inode to initialise
2cb1599f9   David Chinner   Inode: Allow exte...
119
120
121
122
   *
   * 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...
123
  int inode_init_always(struct super_block *sb, struct inode *inode)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
124
  {
6e1d5dcc2   Alexey Dobriyan   const: mark remai...
125
  	static const struct inode_operations empty_iops;
bd9b51e79   Al Viro   make default ->i_...
126
  	static const struct file_operations no_open_fops = {.open = no_open};
6b3304b53   Manish Katiyar   Make checkpatch.p...
127
  	struct address_space *const mapping = &inode->i_data;
2cb1599f9   David Chinner   Inode: Allow exte...
128
129
130
131
132
133
  
  	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;
bd9b51e79   Al Viro   make default ->i_...
134
  	inode->i_fop = &no_open_fops;
a78ef704a   Miklos Szeredi   vfs: protect i_nlink
135
  	inode->__i_nlink = 1;
3ddcd0569   Linus Torvalds   vfs: optimize ino...
136
  	inode->i_opflags = 0;
d0a5b995a   Andreas Gruenbacher   vfs: Add IOP_XATT...
137
138
  	if (sb->s_xattr)
  		inode->i_opflags |= IOP_XATTR;
92361636e   Eric W. Biederman   userns: Store uid...
139
140
  	i_uid_write(inode, 0);
  	i_gid_write(inode, 0);
2cb1599f9   David Chinner   Inode: Allow exte...
141
142
  	atomic_set(&inode->i_writecount, 0);
  	inode->i_size = 0;
c75b1d942   Jens Axboe   fs: add fcntl() i...
143
  	inode->i_write_hint = WRITE_LIFE_NOT_SET;
2cb1599f9   David Chinner   Inode: Allow exte...
144
145
146
  	inode->i_blocks = 0;
  	inode->i_bytes = 0;
  	inode->i_generation = 0;
2cb1599f9   David Chinner   Inode: Allow exte...
147
148
149
  	inode->i_pipe = NULL;
  	inode->i_bdev = NULL;
  	inode->i_cdev = NULL;
61ba64fc0   Al Viro   libfs: simple_fol...
150
  	inode->i_link = NULL;
84e710da2   Al Viro   parallel lookups ...
151
  	inode->i_dir_seq = 0;
2cb1599f9   David Chinner   Inode: Allow exte...
152
153
  	inode->i_rdev = 0;
  	inode->dirtied_when = 0;
6146f0d5e   Mimi Zohar   integrity: IMA hooks
154

3d65ae463   Tahsin Erdogan   writeback: initia...
155
156
157
158
159
  #ifdef CONFIG_CGROUP_WRITEBACK
  	inode->i_wb_frn_winner = 0;
  	inode->i_wb_frn_avg_time = 0;
  	inode->i_wb_frn_history = 0;
  #endif
6146f0d5e   Mimi Zohar   integrity: IMA hooks
160
  	if (security_inode_alloc(inode))
54e346215   Christoph Hellwig   vfs: fix inode_in...
161
  		goto out;
2cb1599f9   David Chinner   Inode: Allow exte...
162
163
  	spin_lock_init(&inode->i_lock);
  	lockdep_set_class(&inode->i_lock, &sb->s_type->i_lock_key);
9902af79c   Al Viro   parallel lookups:...
164
165
  	init_rwsem(&inode->i_rwsem);
  	lockdep_set_class(&inode->i_rwsem, &sb->s_type->i_mutex_key);
2cb1599f9   David Chinner   Inode: Allow exte...
166

bd5fe6c5e   Christoph Hellwig   fs: kill i_alloc_sem
167
  	atomic_set(&inode->i_dio_count, 0);
2cb1599f9   David Chinner   Inode: Allow exte...
168
169
170
171
  
  	mapping->a_ops = &empty_aops;
  	mapping->host = inode;
  	mapping->flags = 0;
93b84462e   Darrick J. Wong   fs: clear writeba...
172
  	mapping->wb_err = 0;
4bb5f5d93   David Herrmann   mm: allow drivers...
173
  	atomic_set(&mapping->i_mmap_writable, 0);
3c1d43787   Hugh Dickins   mm: remove GFP_HI...
174
  	mapping_set_gfp_mask(mapping, GFP_HIGHUSER_MOVABLE);
252aa6f5b   Rafael Aquini   mm: redefine addr...
175
  	mapping->private_data = NULL;
2cb1599f9   David Chinner   Inode: Allow exte...
176
  	mapping->writeback_index = 0;
2cb1599f9   David Chinner   Inode: Allow exte...
177
178
  	inode->i_private = NULL;
  	inode->i_mapping = mapping;
b3d9b7a3c   Al Viro   vfs: switch i_den...
179
  	INIT_HLIST_HEAD(&inode->i_dentry);	/* buggered by rcu freeing */
f19d4a8fa   Al Viro   add caching of AC...
180
181
182
  #ifdef CONFIG_FS_POSIX_ACL
  	inode->i_acl = inode->i_default_acl = ACL_NOT_CACHED;
  #endif
2cb1599f9   David Chinner   Inode: Allow exte...
183

3be25f49b   Eric Paris   fsnotify: add mar...
184
185
186
  #ifdef CONFIG_FSNOTIFY
  	inode->i_fsnotify_mask = 0;
  #endif
4a075e39c   Jeff Layton   locks: add a new ...
187
  	inode->i_flctx = NULL;
3e880fb5e   Nick Piggin   fs: use fast coun...
188
  	this_cpu_inc(nr_inodes);
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
189

54e346215   Christoph Hellwig   vfs: fix inode_in...
190
  	return 0;
54e346215   Christoph Hellwig   vfs: fix inode_in...
191
192
  out:
  	return -ENOMEM;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
193
  }
2cb1599f9   David Chinner   Inode: Allow exte...
194
195
196
197
198
199
200
201
202
203
  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...
204
205
206
207
208
209
210
211
212
213
214
215
  	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...
216
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
217

ff0c7d15f   Nick Piggin   fs: avoid inode R...
218
219
220
221
222
  void free_inode_nonrcu(struct inode *inode)
  {
  	kmem_cache_free(inode_cachep, inode);
  }
  EXPORT_SYMBOL(free_inode_nonrcu);
2e00c97e2   Christoph Hellwig   vfs: add __destro...
223
  void __destroy_inode(struct inode *inode)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
224
  {
b7542f8c7   Eric Sesterhenn   BUG_ON() Conversi...
225
  	BUG_ON(inode_has_buffers(inode));
52ebea749   Tejun Heo   writeback: make b...
226
  	inode_detach_wb(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
227
  	security_inode_free(inode);
3be25f49b   Eric Paris   fsnotify: add mar...
228
  	fsnotify_inode_delete(inode);
f27a0fe08   Jeff Layton   locks: pass inode...
229
  	locks_free_lock_context(inode);
7ada4db88   Miklos Szeredi   vfs: count unlink...
230
231
232
233
  	if (!inode->i_nlink) {
  		WARN_ON(atomic_long_read(&inode->i_sb->s_remove_count) == 0);
  		atomic_long_dec(&inode->i_sb->s_remove_count);
  	}
f19d4a8fa   Al Viro   add caching of AC...
234
  #ifdef CONFIG_FS_POSIX_ACL
b8a7a3a66   Andreas Gruenbacher   posix_acl: Inode ...
235
  	if (inode->i_acl && !is_uncached_acl(inode->i_acl))
f19d4a8fa   Al Viro   add caching of AC...
236
  		posix_acl_release(inode->i_acl);
b8a7a3a66   Andreas Gruenbacher   posix_acl: Inode ...
237
  	if (inode->i_default_acl && !is_uncached_acl(inode->i_default_acl))
f19d4a8fa   Al Viro   add caching of AC...
238
239
  		posix_acl_release(inode->i_default_acl);
  #endif
3e880fb5e   Nick Piggin   fs: use fast coun...
240
  	this_cpu_dec(nr_inodes);
2e00c97e2   Christoph Hellwig   vfs: add __destro...
241
242
  }
  EXPORT_SYMBOL(__destroy_inode);
fa0d7e3de   Nick Piggin   fs: icache RCU fr...
243
244
245
  static void i_callback(struct rcu_head *head)
  {
  	struct inode *inode = container_of(head, struct inode, i_rcu);
fa0d7e3de   Nick Piggin   fs: icache RCU fr...
246
247
  	kmem_cache_free(inode_cachep, inode);
  }
56b0dacfa   Christoph Hellwig   fs: mark destroy_...
248
  static void destroy_inode(struct inode *inode)
2e00c97e2   Christoph Hellwig   vfs: add __destro...
249
  {
7ccf19a80   Nick Piggin   fs: inode split I...
250
  	BUG_ON(!list_empty(&inode->i_lru));
2e00c97e2   Christoph Hellwig   vfs: add __destro...
251
  	__destroy_inode(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
252
253
254
  	if (inode->i_sb->s_op->destroy_inode)
  		inode->i_sb->s_op->destroy_inode(inode);
  	else
fa0d7e3de   Nick Piggin   fs: icache RCU fr...
255
  		call_rcu(&inode->i_rcu, i_callback);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
256
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
257

7ada4db88   Miklos Szeredi   vfs: count unlink...
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
  /**
   * drop_nlink - directly drop an inode's link count
   * @inode: inode
   *
   * This is a low-level filesystem helper to replace any
   * direct filesystem manipulation of i_nlink.  In cases
   * where we are attempting to track writes to the
   * filesystem, a decrement to zero means an imminent
   * write when the file is truncated and actually unlinked
   * on the filesystem.
   */
  void drop_nlink(struct inode *inode)
  {
  	WARN_ON(inode->i_nlink == 0);
  	inode->__i_nlink--;
  	if (!inode->i_nlink)
  		atomic_long_inc(&inode->i_sb->s_remove_count);
  }
  EXPORT_SYMBOL(drop_nlink);
  
  /**
   * clear_nlink - directly zero an inode's link count
   * @inode: inode
   *
   * This is a low-level filesystem helper to replace any
   * direct filesystem manipulation of i_nlink.  See
   * drop_nlink() for why we care about i_nlink hitting zero.
   */
  void clear_nlink(struct inode *inode)
  {
  	if (inode->i_nlink) {
  		inode->__i_nlink = 0;
  		atomic_long_inc(&inode->i_sb->s_remove_count);
  	}
  }
  EXPORT_SYMBOL(clear_nlink);
  
  /**
   * set_nlink - directly set an inode's link count
   * @inode: inode
   * @nlink: new nlink (should be non-zero)
   *
   * This is a low-level filesystem helper to replace any
   * direct filesystem manipulation of i_nlink.
   */
  void set_nlink(struct inode *inode, unsigned int nlink)
  {
  	if (!nlink) {
7ada4db88   Miklos Szeredi   vfs: count unlink...
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
  		clear_nlink(inode);
  	} else {
  		/* Yes, some filesystems do change nlink from zero to one */
  		if (inode->i_nlink == 0)
  			atomic_long_dec(&inode->i_sb->s_remove_count);
  
  		inode->__i_nlink = nlink;
  	}
  }
  EXPORT_SYMBOL(set_nlink);
  
  /**
   * inc_nlink - directly increment an inode's link count
   * @inode: inode
   *
   * This is a low-level filesystem helper to replace any
   * direct filesystem manipulation of i_nlink.  Currently,
   * it is only here for parity with dec_nlink().
   */
  void inc_nlink(struct inode *inode)
  {
f4e0c30c1   Al Viro   allow the temp fi...
327
328
  	if (unlikely(inode->i_nlink == 0)) {
  		WARN_ON(!(inode->i_state & I_LINKABLE));
7ada4db88   Miklos Szeredi   vfs: count unlink...
329
  		atomic_long_dec(&inode->i_sb->s_remove_count);
f4e0c30c1   Al Viro   allow the temp fi...
330
  	}
7ada4db88   Miklos Szeredi   vfs: count unlink...
331
332
333
334
  
  	inode->__i_nlink++;
  }
  EXPORT_SYMBOL(inc_nlink);
2aa15890f   Miklos Szeredi   mm: prevent concu...
335
336
337
  void address_space_init_once(struct address_space *mapping)
  {
  	memset(mapping, 0, sizeof(*mapping));
05eb6e726   Vladimir Davydov   radix-tree: accou...
338
  	INIT_RADIX_TREE(&mapping->page_tree, GFP_ATOMIC | __GFP_ACCOUNT);
2aa15890f   Miklos Szeredi   mm: prevent concu...
339
  	spin_lock_init(&mapping->tree_lock);
c8c06efa8   Davidlohr Bueso   mm: convert i_mma...
340
  	init_rwsem(&mapping->i_mmap_rwsem);
2aa15890f   Miklos Szeredi   mm: prevent concu...
341
342
  	INIT_LIST_HEAD(&mapping->private_list);
  	spin_lock_init(&mapping->private_lock);
f808c13fd   Davidlohr Bueso   lib/interval_tree...
343
  	mapping->i_mmap = RB_ROOT_CACHED;
2aa15890f   Miklos Szeredi   mm: prevent concu...
344
345
  }
  EXPORT_SYMBOL(address_space_init_once);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
346
347
348
349
350
351
352
353
354
  /*
   * 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);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
355
  	INIT_LIST_HEAD(&inode->i_devices);
c7f540849   Dave Chinner   inode: rename i_w...
356
  	INIT_LIST_HEAD(&inode->i_io_list);
6c60d2b57   Dave Chinner   fs/fs-writeback.c...
357
  	INIT_LIST_HEAD(&inode->i_wb_list);
7ccf19a80   Nick Piggin   fs: inode split I...
358
  	INIT_LIST_HEAD(&inode->i_lru);
2aa15890f   Miklos Szeredi   mm: prevent concu...
359
  	address_space_init_once(&inode->i_data);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
360
361
  	i_size_ordered_init(inode);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
362
  EXPORT_SYMBOL(inode_init_once);
51cc50685   Alexey Dobriyan   SL*B: drop kmem c...
363
  static void init_once(void *foo)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
364
  {
6b3304b53   Manish Katiyar   Make checkpatch.p...
365
  	struct inode *inode = (struct inode *) foo;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
366

a35afb830   Christoph Lameter   Remove SLAB_CTOR_...
367
  	inode_init_once(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
368
369
370
  }
  
  /*
250df6ed2   Dave Chinner   fs: protect inode...
371
   * inode->i_lock must be held
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
372
   */
6b3304b53   Manish Katiyar   Make checkpatch.p...
373
  void __iget(struct inode *inode)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
374
  {
9e38d86ff   Nick Piggin   fs: Implement laz...
375
376
  	atomic_inc(&inode->i_count);
  }
2e147f1ef   Richard Kennedy   fs: inode.c use a...
377

7de9c6ee3   Al Viro   new helper: ihold()
378
379
380
381
382
383
384
385
  /*
   * get additional reference to inode; caller must already hold one.
   */
  void ihold(struct inode *inode)
  {
  	WARN_ON(atomic_inc_return(&inode->i_count) < 2);
  }
  EXPORT_SYMBOL(ihold);
9e38d86ff   Nick Piggin   fs: Implement laz...
386
387
  static void inode_lru_list_add(struct inode *inode)
  {
bc3b14cb2   Dave Chinner   inode: convert in...
388
  	if (list_lru_add(&inode->i_sb->s_inode_lru, &inode->i_lru))
fcb94f72d   Dave Chinner   inode: convert in...
389
  		this_cpu_inc(nr_unused);
563f40019   Josef Bacik   fs: don't set *RE...
390
391
  	else
  		inode->i_state |= I_REFERENCED;
9e38d86ff   Nick Piggin   fs: Implement laz...
392
  }
2e147f1ef   Richard Kennedy   fs: inode.c use a...
393

4eff96dd5   Jan Kara   writeback: put un...
394
395
396
397
398
399
400
  /*
   * Add inode to LRU if needed (inode is unused and clean).
   *
   * Needs inode->i_lock held.
   */
  void inode_add_lru(struct inode *inode)
  {
0ae45f63d   Theodore Ts'o   vfs: add support ...
401
402
  	if (!(inode->i_state & (I_DIRTY_ALL | I_SYNC |
  				I_FREEING | I_WILL_FREE)) &&
4eff96dd5   Jan Kara   writeback: put un...
403
404
405
  	    !atomic_read(&inode->i_count) && inode->i_sb->s_flags & MS_ACTIVE)
  		inode_lru_list_add(inode);
  }
9e38d86ff   Nick Piggin   fs: Implement laz...
406
407
  static void inode_lru_list_del(struct inode *inode)
  {
bc3b14cb2   Dave Chinner   inode: convert in...
408
409
  
  	if (list_lru_del(&inode->i_sb->s_inode_lru, &inode->i_lru))
fcb94f72d   Dave Chinner   inode: convert in...
410
  		this_cpu_dec(nr_unused);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
411
  }
646ec4615   Christoph Hellwig   fs: remove inode_...
412
413
414
415
416
417
  /**
   * inode_sb_list_add - add inode to the superblock list of inodes
   * @inode: inode to add
   */
  void inode_sb_list_add(struct inode *inode)
  {
74278da9f   Dave Chinner   inode: convert in...
418
  	spin_lock(&inode->i_sb->s_inode_list_lock);
55fa6091d   Dave Chinner   fs: move i_sb_lis...
419
  	list_add(&inode->i_sb_list, &inode->i_sb->s_inodes);
74278da9f   Dave Chinner   inode: convert in...
420
  	spin_unlock(&inode->i_sb->s_inode_list_lock);
646ec4615   Christoph Hellwig   fs: remove inode_...
421
422
  }
  EXPORT_SYMBOL_GPL(inode_sb_list_add);
55fa6091d   Dave Chinner   fs: move i_sb_lis...
423
  static inline void inode_sb_list_del(struct inode *inode)
646ec4615   Christoph Hellwig   fs: remove inode_...
424
  {
a209dfc7b   Eric Dumazet   vfs: dont chain p...
425
  	if (!list_empty(&inode->i_sb_list)) {
74278da9f   Dave Chinner   inode: convert in...
426
  		spin_lock(&inode->i_sb->s_inode_list_lock);
a209dfc7b   Eric Dumazet   vfs: dont chain p...
427
  		list_del_init(&inode->i_sb_list);
74278da9f   Dave Chinner   inode: convert in...
428
  		spin_unlock(&inode->i_sb->s_inode_list_lock);
a209dfc7b   Eric Dumazet   vfs: dont chain p...
429
  	}
646ec4615   Christoph Hellwig   fs: remove inode_...
430
  }
4c51acbc6   Dave Chinner   fs: Factor inode ...
431
432
433
434
435
436
  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;
4b4563dc8   Christoph Hellwig   fs: cosmetic inod...
437
438
  	tmp = tmp ^ ((tmp ^ GOLDEN_RATIO_PRIME) >> i_hash_shift);
  	return tmp & i_hash_mask;
4c51acbc6   Dave Chinner   fs: Factor inode ...
439
440
441
442
443
444
445
446
447
448
449
450
  }
  
  /**
   *	__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)
  {
646ec4615   Christoph Hellwig   fs: remove inode_...
451
  	struct hlist_head *b = inode_hashtable + hash(inode->i_sb, hashval);
67a23c494   Dave Chinner   fs: rename inode_...
452
  	spin_lock(&inode_hash_lock);
250df6ed2   Dave Chinner   fs: protect inode...
453
  	spin_lock(&inode->i_lock);
646ec4615   Christoph Hellwig   fs: remove inode_...
454
  	hlist_add_head(&inode->i_hash, b);
250df6ed2   Dave Chinner   fs: protect inode...
455
  	spin_unlock(&inode->i_lock);
67a23c494   Dave Chinner   fs: rename inode_...
456
  	spin_unlock(&inode_hash_lock);
4c51acbc6   Dave Chinner   fs: Factor inode ...
457
458
459
460
  }
  EXPORT_SYMBOL(__insert_inode_hash);
  
  /**
f2ee7abf4   Eric Dumazet   vfs: avoid taking...
461
   *	__remove_inode_hash - remove an inode from the hash
4c51acbc6   Dave Chinner   fs: Factor inode ...
462
463
464
465
   *	@inode: inode to unhash
   *
   *	Remove an inode from the superblock.
   */
f2ee7abf4   Eric Dumazet   vfs: avoid taking...
466
  void __remove_inode_hash(struct inode *inode)
4c51acbc6   Dave Chinner   fs: Factor inode ...
467
  {
67a23c494   Dave Chinner   fs: rename inode_...
468
  	spin_lock(&inode_hash_lock);
250df6ed2   Dave Chinner   fs: protect inode...
469
  	spin_lock(&inode->i_lock);
4c51acbc6   Dave Chinner   fs: Factor inode ...
470
  	hlist_del_init(&inode->i_hash);
250df6ed2   Dave Chinner   fs: protect inode...
471
  	spin_unlock(&inode->i_lock);
67a23c494   Dave Chinner   fs: rename inode_...
472
  	spin_unlock(&inode_hash_lock);
4c51acbc6   Dave Chinner   fs: Factor inode ...
473
  }
f2ee7abf4   Eric Dumazet   vfs: avoid taking...
474
  EXPORT_SYMBOL(__remove_inode_hash);
4c51acbc6   Dave Chinner   fs: Factor inode ...
475

dbd5768f8   Jan Kara   vfs: Rename end_w...
476
  void clear_inode(struct inode *inode)
b0683aa63   Al Viro   new helper: end_w...
477
478
  {
  	might_sleep();
08142579b   Jan Kara   mm: fix assertion...
479
480
481
482
483
484
  	/*
  	 * We have to cycle tree_lock here because reclaim can be still in the
  	 * process of removing the last page (in __delete_from_page_cache())
  	 * and we must not free mapping under it.
  	 */
  	spin_lock_irq(&inode->i_data.tree_lock);
b0683aa63   Al Viro   new helper: end_w...
485
  	BUG_ON(inode->i_data.nrpages);
f9fe48bec   Ross Zwisler   dax: support dirt...
486
  	BUG_ON(inode->i_data.nrexceptional);
08142579b   Jan Kara   mm: fix assertion...
487
  	spin_unlock_irq(&inode->i_data.tree_lock);
b0683aa63   Al Viro   new helper: end_w...
488
489
490
  	BUG_ON(!list_empty(&inode->i_data.private_list));
  	BUG_ON(!(inode->i_state & I_FREEING));
  	BUG_ON(inode->i_state & I_CLEAR);
6c60d2b57   Dave Chinner   fs/fs-writeback.c...
491
  	BUG_ON(!list_empty(&inode->i_wb_list));
fa0d7e3de   Nick Piggin   fs: icache RCU fr...
492
  	/* don't need i_lock here, no concurrent mods to i_state */
b0683aa63   Al Viro   new helper: end_w...
493
494
  	inode->i_state = I_FREEING | I_CLEAR;
  }
dbd5768f8   Jan Kara   vfs: Rename end_w...
495
  EXPORT_SYMBOL(clear_inode);
b0683aa63   Al Viro   new helper: end_w...
496

b2b2af8e6   Dave Chinner   fs: factor inode ...
497
498
499
500
501
502
503
504
505
506
507
508
509
  /*
   * Free the inode passed in, removing it from the lists it is still connected
   * to. We remove any pages still attached to the inode and wait for any IO that
   * is still in progress before finally destroying the inode.
   *
   * An inode must already be marked I_FREEING so that we avoid the inode being
   * moved back onto lists if we race with other code that manipulates the lists
   * (e.g. writeback_single_inode). The caller is responsible for setting this.
   *
   * An inode must already be removed from the LRU list before being evicted from
   * the cache. This should occur atomically with setting the I_FREEING state
   * flag, so no inodes here should ever be on the LRU when being evicted.
   */
644da5960   Al Viro   fs/inode.c:evict(...
510
  static void evict(struct inode *inode)
b4272d4c8   Al Viro   unify fs/inode.c ...
511
512
  {
  	const struct super_operations *op = inode->i_sb->s_op;
b2b2af8e6   Dave Chinner   fs: factor inode ...
513
514
  	BUG_ON(!(inode->i_state & I_FREEING));
  	BUG_ON(!list_empty(&inode->i_lru));
c7f540849   Dave Chinner   inode: rename i_w...
515
516
  	if (!list_empty(&inode->i_io_list))
  		inode_io_list_del(inode);
b12362bdb   Eric Dumazet   vfs: conditionall...
517

55fa6091d   Dave Chinner   fs: move i_sb_lis...
518
  	inode_sb_list_del(inode);
169ebd901   Jan Kara   writeback: Avoid ...
519
520
521
522
523
524
525
  	/*
  	 * Wait for flusher thread to be done with the inode so that filesystem
  	 * does not start destroying it while writeback is still running. Since
  	 * the inode has I_FREEING set, flusher thread won't start new work on
  	 * the inode.  We just have to wait for running writeback to finish.
  	 */
  	inode_wait_for_writeback(inode);
7994e6f72   Jan Kara   vfs: Move waiting...
526

be7ce4161   Al Viro   New method - evic...
527
528
  	if (op->evict_inode) {
  		op->evict_inode(inode);
b4272d4c8   Al Viro   unify fs/inode.c ...
529
  	} else {
91b0abe36   Johannes Weiner   mm + fs: store sh...
530
  		truncate_inode_pages_final(&inode->i_data);
dbd5768f8   Jan Kara   vfs: Rename end_w...
531
  		clear_inode(inode);
b4272d4c8   Al Viro   unify fs/inode.c ...
532
  	}
661074e91   Al Viro   Take ->i_bdev/->i...
533
534
535
536
  	if (S_ISBLK(inode->i_mode) && inode->i_bdev)
  		bd_forget(inode);
  	if (S_ISCHR(inode->i_mode) && inode->i_cdev)
  		cd_forget(inode);
b2b2af8e6   Dave Chinner   fs: factor inode ...
537
538
539
540
541
542
543
544
545
  
  	remove_inode_hash(inode);
  
  	spin_lock(&inode->i_lock);
  	wake_up_bit(&inode->i_state, __I_NEW);
  	BUG_ON(inode->i_state != (I_FREEING | I_CLEAR));
  	spin_unlock(&inode->i_lock);
  
  	destroy_inode(inode);
b4272d4c8   Al Viro   unify fs/inode.c ...
546
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
547
548
549
550
551
552
553
554
555
  /*
   * 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)
  {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
556
557
  	while (!list_empty(head)) {
  		struct inode *inode;
7ccf19a80   Nick Piggin   fs: inode split I...
558
559
  		inode = list_first_entry(head, struct inode, i_lru);
  		list_del_init(&inode->i_lru);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
560

644da5960   Al Viro   fs/inode.c:evict(...
561
  		evict(inode);
ac05fbb40   Josef Bacik   inode: don't soft...
562
  		cond_resched();
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
563
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
564
  }
a03187867   Christoph Hellwig   fs: fold invalida...
565
  /**
63997e98a   Al Viro   split invalidate_...
566
567
568
569
570
571
572
   * evict_inodes	- evict all evictable inodes for a superblock
   * @sb:		superblock to operate on
   *
   * Make sure that no inodes with zero refcount are retained.  This is
   * called by superblock shutdown after having MS_ACTIVE flag removed,
   * so any inode reaching zero refcount during or after that call will
   * be immediately evicted.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
573
   */
63997e98a   Al Viro   split invalidate_...
574
  void evict_inodes(struct super_block *sb)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
575
  {
63997e98a   Al Viro   split invalidate_...
576
577
  	struct inode *inode, *next;
  	LIST_HEAD(dispose);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
578

ac05fbb40   Josef Bacik   inode: don't soft...
579
  again:
74278da9f   Dave Chinner   inode: convert in...
580
  	spin_lock(&sb->s_inode_list_lock);
63997e98a   Al Viro   split invalidate_...
581
582
  	list_for_each_entry_safe(inode, next, &sb->s_inodes, i_sb_list) {
  		if (atomic_read(&inode->i_count))
aabb8fdb4   Nick Piggin   fs: avoid I_NEW i...
583
  			continue;
250df6ed2   Dave Chinner   fs: protect inode...
584
585
586
587
  
  		spin_lock(&inode->i_lock);
  		if (inode->i_state & (I_NEW | I_FREEING | I_WILL_FREE)) {
  			spin_unlock(&inode->i_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
588
  			continue;
250df6ed2   Dave Chinner   fs: protect inode...
589
  		}
63997e98a   Al Viro   split invalidate_...
590
591
  
  		inode->i_state |= I_FREEING;
02afc410f   Dave Chinner   fs: Lock the inod...
592
  		inode_lru_list_del(inode);
250df6ed2   Dave Chinner   fs: protect inode...
593
  		spin_unlock(&inode->i_lock);
02afc410f   Dave Chinner   fs: Lock the inod...
594
  		list_add(&inode->i_lru, &dispose);
ac05fbb40   Josef Bacik   inode: don't soft...
595
596
597
598
599
600
601
602
603
604
605
606
  
  		/*
  		 * We can have a ton of inodes to evict at unmount time given
  		 * enough memory, check to see if we need to go to sleep for a
  		 * bit so we don't livelock.
  		 */
  		if (need_resched()) {
  			spin_unlock(&sb->s_inode_list_lock);
  			cond_resched();
  			dispose_list(&dispose);
  			goto again;
  		}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
607
  	}
74278da9f   Dave Chinner   inode: convert in...
608
  	spin_unlock(&sb->s_inode_list_lock);
63997e98a   Al Viro   split invalidate_...
609
610
  
  	dispose_list(&dispose);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
611
  }
799ea9e9c   Darrick J. Wong   xfs: evict all in...
612
  EXPORT_SYMBOL_GPL(evict_inodes);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
613

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
614
  /**
a03187867   Christoph Hellwig   fs: fold invalida...
615
616
   * invalidate_inodes	- attempt to free all inodes on a superblock
   * @sb:		superblock to operate on
93b270f76   NeilBrown   Fix over-zealous ...
617
   * @kill_dirty: flag to guide handling of dirty inodes
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
618
   *
a03187867   Christoph Hellwig   fs: fold invalida...
619
620
   * Attempts to free all inodes for a given superblock.  If there were any
   * busy inodes return a non-zero value, else zero.
93b270f76   NeilBrown   Fix over-zealous ...
621
622
   * If @kill_dirty is set, discard dirty inodes too, otherwise treat
   * them as busy.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
623
   */
93b270f76   NeilBrown   Fix over-zealous ...
624
  int invalidate_inodes(struct super_block *sb, bool kill_dirty)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
625
  {
cffbc8aa3   Dave Chinner   fs: Convert nr_in...
626
  	int busy = 0;
a03187867   Christoph Hellwig   fs: fold invalida...
627
628
  	struct inode *inode, *next;
  	LIST_HEAD(dispose);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
629

74278da9f   Dave Chinner   inode: convert in...
630
  	spin_lock(&sb->s_inode_list_lock);
a03187867   Christoph Hellwig   fs: fold invalida...
631
  	list_for_each_entry_safe(inode, next, &sb->s_inodes, i_sb_list) {
250df6ed2   Dave Chinner   fs: protect inode...
632
633
634
  		spin_lock(&inode->i_lock);
  		if (inode->i_state & (I_NEW | I_FREEING | I_WILL_FREE)) {
  			spin_unlock(&inode->i_lock);
aabb8fdb4   Nick Piggin   fs: avoid I_NEW i...
635
  			continue;
250df6ed2   Dave Chinner   fs: protect inode...
636
  		}
0ae45f63d   Theodore Ts'o   vfs: add support ...
637
  		if (inode->i_state & I_DIRTY_ALL && !kill_dirty) {
250df6ed2   Dave Chinner   fs: protect inode...
638
  			spin_unlock(&inode->i_lock);
93b270f76   NeilBrown   Fix over-zealous ...
639
640
641
  			busy = 1;
  			continue;
  		}
99a389192   Christoph Hellwig   fs: fix buffer in...
642
  		if (atomic_read(&inode->i_count)) {
250df6ed2   Dave Chinner   fs: protect inode...
643
  			spin_unlock(&inode->i_lock);
99a389192   Christoph Hellwig   fs: fix buffer in...
644
  			busy = 1;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
645
646
  			continue;
  		}
99a389192   Christoph Hellwig   fs: fix buffer in...
647

99a389192   Christoph Hellwig   fs: fix buffer in...
648
  		inode->i_state |= I_FREEING;
02afc410f   Dave Chinner   fs: Lock the inod...
649
  		inode_lru_list_del(inode);
250df6ed2   Dave Chinner   fs: protect inode...
650
  		spin_unlock(&inode->i_lock);
02afc410f   Dave Chinner   fs: Lock the inod...
651
  		list_add(&inode->i_lru, &dispose);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
652
  	}
74278da9f   Dave Chinner   inode: convert in...
653
  	spin_unlock(&sb->s_inode_list_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
654

a03187867   Christoph Hellwig   fs: fold invalida...
655
  	dispose_list(&dispose);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
656
657
658
  
  	return busy;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
659

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
660
  /*
bc3b14cb2   Dave Chinner   inode: convert in...
661
   * Isolate the inode from the LRU in preparation for freeing it.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
662
663
   *
   * Any inodes which are pinned purely because of attached pagecache have their
9e38d86ff   Nick Piggin   fs: Implement laz...
664
665
   * pagecache removed.  If the inode has metadata buffers attached to
   * mapping->private_list then try to remove them.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
666
   *
9e38d86ff   Nick Piggin   fs: Implement laz...
667
668
669
670
671
672
673
   * If the inode has the I_REFERENCED flag set, then it means that it has been
   * used recently - the flag is set in iput_final(). When we encounter such an
   * inode, clear the flag and move it to the back of the LRU so it gets another
   * pass through the LRU before it gets reclaimed. This is necessary because of
   * the fact we are doing lazy LRU updates to minimise lock contention so the
   * LRU does not have strict ordering. Hence we don't want to reclaim inodes
   * with this flag set because they are the inodes that are out of order.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
674
   */
3f97b1632   Vladimir Davydov   list_lru: add hel...
675
676
  static enum lru_status inode_lru_isolate(struct list_head *item,
  		struct list_lru_one *lru, spinlock_t *lru_lock, void *arg)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
677
  {
bc3b14cb2   Dave Chinner   inode: convert in...
678
679
  	struct list_head *freeable = arg;
  	struct inode	*inode = container_of(item, struct inode, i_lru);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
680

bc3b14cb2   Dave Chinner   inode: convert in...
681
682
683
684
685
686
  	/*
  	 * we are inverting the lru lock/inode->i_lock here, so use a trylock.
  	 * If we fail to get the lock, just skip it.
  	 */
  	if (!spin_trylock(&inode->i_lock))
  		return LRU_SKIP;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
687

bc3b14cb2   Dave Chinner   inode: convert in...
688
689
690
691
692
693
  	/*
  	 * Referenced or dirty inodes are still in use. Give them another pass
  	 * through the LRU as we canot reclaim them now.
  	 */
  	if (atomic_read(&inode->i_count) ||
  	    (inode->i_state & ~I_REFERENCED)) {
3f97b1632   Vladimir Davydov   list_lru: add hel...
694
  		list_lru_isolate(lru, &inode->i_lru);
bc3b14cb2   Dave Chinner   inode: convert in...
695
696
697
698
  		spin_unlock(&inode->i_lock);
  		this_cpu_dec(nr_unused);
  		return LRU_REMOVED;
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
699

bc3b14cb2   Dave Chinner   inode: convert in...
700
701
702
703
704
705
  	/* recently referenced inodes get one more pass */
  	if (inode->i_state & I_REFERENCED) {
  		inode->i_state &= ~I_REFERENCED;
  		spin_unlock(&inode->i_lock);
  		return LRU_ROTATE;
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
706

bc3b14cb2   Dave Chinner   inode: convert in...
707
708
709
710
711
712
713
714
715
716
717
718
719
  	if (inode_has_buffers(inode) || inode->i_data.nrpages) {
  		__iget(inode);
  		spin_unlock(&inode->i_lock);
  		spin_unlock(lru_lock);
  		if (remove_inode_buffers(inode)) {
  			unsigned long reap;
  			reap = invalidate_mapping_pages(&inode->i_data, 0, -1);
  			if (current_is_kswapd())
  				__count_vm_events(KSWAPD_INODESTEAL, reap);
  			else
  				__count_vm_events(PGINODESTEAL, reap);
  			if (current->reclaim_state)
  				current->reclaim_state->reclaimed_slab += reap;
02afc410f   Dave Chinner   fs: Lock the inod...
720
  		}
bc3b14cb2   Dave Chinner   inode: convert in...
721
722
723
724
  		iput(inode);
  		spin_lock(lru_lock);
  		return LRU_RETRY;
  	}
02afc410f   Dave Chinner   fs: Lock the inod...
725

bc3b14cb2   Dave Chinner   inode: convert in...
726
727
  	WARN_ON(inode->i_state & I_NEW);
  	inode->i_state |= I_FREEING;
3f97b1632   Vladimir Davydov   list_lru: add hel...
728
  	list_lru_isolate_move(lru, &inode->i_lru, freeable);
bc3b14cb2   Dave Chinner   inode: convert in...
729
  	spin_unlock(&inode->i_lock);
9e38d86ff   Nick Piggin   fs: Implement laz...
730

bc3b14cb2   Dave Chinner   inode: convert in...
731
732
733
  	this_cpu_dec(nr_unused);
  	return LRU_REMOVED;
  }
7ccf19a80   Nick Piggin   fs: inode split I...
734

bc3b14cb2   Dave Chinner   inode: convert in...
735
736
737
738
739
740
  /*
   * Walk the superblock inode LRU for freeable inodes and attempt to free them.
   * This is called from the superblock shrinker function with a number of inodes
   * to trim from the LRU. Inodes to be freed are moved to a temporary list and
   * then are freed outside inode_lock by dispose_list().
   */
503c358cf   Vladimir Davydov   list_lru: introdu...
741
  long prune_icache_sb(struct super_block *sb, struct shrink_control *sc)
bc3b14cb2   Dave Chinner   inode: convert in...
742
743
744
  {
  	LIST_HEAD(freeable);
  	long freed;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
745

503c358cf   Vladimir Davydov   list_lru: introdu...
746
747
  	freed = list_lru_shrink_walk(&sb->s_inode_lru, sc,
  				     inode_lru_isolate, &freeable);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
748
  	dispose_list(&freeable);
0a234c6dc   Dave Chinner   shrinker: convert...
749
  	return freed;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
750
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
751
752
753
  static void __wait_on_freeing_inode(struct inode *inode);
  /*
   * Called with the inode lock held.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
754
   */
6b3304b53   Manish Katiyar   Make checkpatch.p...
755
756
757
758
  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
759
  {
6b3304b53   Manish Katiyar   Make checkpatch.p...
760
  	struct inode *inode = NULL;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
761
762
  
  repeat:
b67bfe0d4   Sasha Levin   hlist: drop the n...
763
  	hlist_for_each_entry(inode, head, i_hash) {
5a3cd9928   Al Viro   iget/iget5: don't...
764
  		if (inode->i_sb != sb)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
765
  			continue;
5a3cd9928   Al Viro   iget/iget5: don't...
766
  		if (!test(inode, data))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
767
  			continue;
5a3cd9928   Al Viro   iget/iget5: don't...
768
  		spin_lock(&inode->i_lock);
a4ffdde6e   Al Viro   simplify checks f...
769
  		if (inode->i_state & (I_FREEING|I_WILL_FREE)) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
770
771
772
  			__wait_on_freeing_inode(inode);
  			goto repeat;
  		}
f7899bd54   Christoph Hellwig   fs: move i_count ...
773
  		__iget(inode);
250df6ed2   Dave Chinner   fs: protect inode...
774
  		spin_unlock(&inode->i_lock);
f7899bd54   Christoph Hellwig   fs: move i_count ...
775
  		return inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
776
  	}
f7899bd54   Christoph Hellwig   fs: move i_count ...
777
  	return NULL;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
778
779
780
781
782
783
  }
  
  /*
   * 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...
784
785
  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
786
  {
6b3304b53   Manish Katiyar   Make checkpatch.p...
787
  	struct inode *inode = NULL;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
788
789
  
  repeat:
b67bfe0d4   Sasha Levin   hlist: drop the n...
790
  	hlist_for_each_entry(inode, head, i_hash) {
5a3cd9928   Al Viro   iget/iget5: don't...
791
  		if (inode->i_ino != ino)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
792
  			continue;
5a3cd9928   Al Viro   iget/iget5: don't...
793
  		if (inode->i_sb != sb)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
794
  			continue;
5a3cd9928   Al Viro   iget/iget5: don't...
795
  		spin_lock(&inode->i_lock);
a4ffdde6e   Al Viro   simplify checks f...
796
  		if (inode->i_state & (I_FREEING|I_WILL_FREE)) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
797
798
799
  			__wait_on_freeing_inode(inode);
  			goto repeat;
  		}
f7899bd54   Christoph Hellwig   fs: move i_count ...
800
  		__iget(inode);
250df6ed2   Dave Chinner   fs: protect inode...
801
  		spin_unlock(&inode->i_lock);
f7899bd54   Christoph Hellwig   fs: move i_count ...
802
  		return inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
803
  	}
f7899bd54   Christoph Hellwig   fs: move i_count ...
804
  	return NULL;
8290c35f8   David Chinner   Inode: Allow exte...
805
  }
f991bd2e1   Eric Dumazet   fs: introduce a p...
806
807
808
809
  /*
   * Each cpu owns a range of LAST_INO_BATCH numbers.
   * 'shared_last_ino' is dirtied only once out of LAST_INO_BATCH allocations,
   * to renew the exhausted range.
8290c35f8   David Chinner   Inode: Allow exte...
810
   *
f991bd2e1   Eric Dumazet   fs: introduce a p...
811
812
813
814
815
816
817
818
819
   * This does not significantly increase overflow rate because every CPU can
   * consume at most LAST_INO_BATCH-1 unused inode numbers. So there is
   * NR_CPUS*(LAST_INO_BATCH-1) wastage. At 4096 and 1024, this is ~0.1% of the
   * 2^32 range, and is a worst-case. Even a 50% wastage would only increase
   * overflow rate by 2x, which does not seem too significant.
   *
   * 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.
8290c35f8   David Chinner   Inode: Allow exte...
820
   */
f991bd2e1   Eric Dumazet   fs: introduce a p...
821
822
  #define LAST_INO_BATCH 1024
  static DEFINE_PER_CPU(unsigned int, last_ino);
85fe4025c   Christoph Hellwig   fs: do not assign...
823
  unsigned int get_next_ino(void)
8290c35f8   David Chinner   Inode: Allow exte...
824
  {
f991bd2e1   Eric Dumazet   fs: introduce a p...
825
826
  	unsigned int *p = &get_cpu_var(last_ino);
  	unsigned int res = *p;
8290c35f8   David Chinner   Inode: Allow exte...
827

f991bd2e1   Eric Dumazet   fs: introduce a p...
828
829
830
831
832
833
834
835
  #ifdef CONFIG_SMP
  	if (unlikely((res & (LAST_INO_BATCH-1)) == 0)) {
  		static atomic_t shared_last_ino;
  		int next = atomic_add_return(LAST_INO_BATCH, &shared_last_ino);
  
  		res = next - LAST_INO_BATCH;
  	}
  #endif
2adc376c5   Carlos Maiolino   vfs: avoid creati...
836
837
838
839
840
  	res++;
  	/* get_next_ino should not provide a 0 inode number */
  	if (unlikely(!res))
  		res++;
  	*p = res;
f991bd2e1   Eric Dumazet   fs: introduce a p...
841
842
  	put_cpu_var(last_ino);
  	return res;
8290c35f8   David Chinner   Inode: Allow exte...
843
  }
85fe4025c   Christoph Hellwig   fs: do not assign...
844
  EXPORT_SYMBOL(get_next_ino);
8290c35f8   David Chinner   Inode: Allow exte...
845

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
846
  /**
a209dfc7b   Eric Dumazet   vfs: dont chain p...
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
   *	new_inode_pseudo 	- obtain an inode
   *	@sb: superblock
   *
   *	Allocates a new inode for given superblock.
   *	Inode wont be chained in superblock s_inodes list
   *	This means :
   *	- fs can't be unmount
   *	- quotas, fsnotify, writeback can't work
   */
  struct inode *new_inode_pseudo(struct super_block *sb)
  {
  	struct inode *inode = alloc_inode(sb);
  
  	if (inode) {
  		spin_lock(&inode->i_lock);
  		inode->i_state = 0;
  		spin_unlock(&inode->i_lock);
  		INIT_LIST_HEAD(&inode->i_sb_list);
  	}
  	return inode;
  }
  
  /**
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
870
871
872
   *	new_inode 	- obtain an inode
   *	@sb: superblock
   *
769848c03   Mel Gorman   Add __GFP_MOVABLE...
873
   *	Allocates a new inode for given superblock. The default gfp_mask
3c1d43787   Hugh Dickins   mm: remove GFP_HI...
874
   *	for allocations related to inode->i_mapping is GFP_HIGHUSER_MOVABLE.
769848c03   Mel Gorman   Add __GFP_MOVABLE...
875
876
877
878
879
   *	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
880
881
882
   */
  struct inode *new_inode(struct super_block *sb)
  {
6b3304b53   Manish Katiyar   Make checkpatch.p...
883
  	struct inode *inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
884

74278da9f   Dave Chinner   inode: convert in...
885
  	spin_lock_prefetch(&sb->s_inode_list_lock);
6b3304b53   Manish Katiyar   Make checkpatch.p...
886

a209dfc7b   Eric Dumazet   vfs: dont chain p...
887
888
  	inode = new_inode_pseudo(sb);
  	if (inode)
55fa6091d   Dave Chinner   fs: move i_sb_lis...
889
  		inode_sb_list_add(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
890
891
  	return inode;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
892
  EXPORT_SYMBOL(new_inode);
14358e6dd   Peter Zijlstra   lockdep: annotate...
893
  #ifdef CONFIG_DEBUG_LOCK_ALLOC
e096d0c7e   Josh Boyer   lockdep: Add help...
894
895
  void lockdep_annotate_inode_mutex_key(struct inode *inode)
  {
a3314a0ed   Namhyung Kim   lockdep: fixup ch...
896
  	if (S_ISDIR(inode->i_mode)) {
1e89a5e15   Peter Zijlstra   lockdep: fixup th...
897
  		struct file_system_type *type = inode->i_sb->s_type;
9a7aa12f3   Jan Kara   vfs: Set special ...
898
  		/* Set new key only if filesystem hasn't already changed it */
9902af79c   Al Viro   parallel lookups:...
899
  		if (lockdep_match_class(&inode->i_rwsem, &type->i_mutex_key)) {
9a7aa12f3   Jan Kara   vfs: Set special ...
900
901
902
  			/*
  			 * ensure nobody is actually holding i_mutex
  			 */
9902af79c   Al Viro   parallel lookups:...
903
904
905
  			// mutex_destroy(&inode->i_mutex);
  			init_rwsem(&inode->i_rwsem);
  			lockdep_set_class(&inode->i_rwsem,
9a7aa12f3   Jan Kara   vfs: Set special ...
906
907
  					  &type->i_mutex_dir_key);
  		}
1e89a5e15   Peter Zijlstra   lockdep: fixup th...
908
  	}
e096d0c7e   Josh Boyer   lockdep: Add help...
909
910
  }
  EXPORT_SYMBOL(lockdep_annotate_inode_mutex_key);
14358e6dd   Peter Zijlstra   lockdep: annotate...
911
  #endif
e096d0c7e   Josh Boyer   lockdep: Add help...
912
913
914
915
916
917
918
919
920
921
922
  
  /**
   * unlock_new_inode - clear the I_NEW state and wake up any waiters
   * @inode:	new inode to unlock
   *
   * Called when the inode is fully initialised to clear the new state of the
   * inode and wake up anyone waiting for the inode to finish initialisation.
   */
  void unlock_new_inode(struct inode *inode)
  {
  	lockdep_annotate_inode_mutex_key(inode);
250df6ed2   Dave Chinner   fs: protect inode...
923
  	spin_lock(&inode->i_lock);
eaff8079d   Christoph Hellwig   kill I_LOCK
924
925
  	WARN_ON(!(inode->i_state & I_NEW));
  	inode->i_state &= ~I_NEW;
310fa7a36   Al Viro   restore smp_mb() ...
926
  	smp_mb();
250df6ed2   Dave Chinner   fs: protect inode...
927
928
  	wake_up_bit(&inode->i_state, __I_NEW);
  	spin_unlock(&inode->i_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
929
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
930
  EXPORT_SYMBOL(unlock_new_inode);
0b2d0724e   Christoph Hellwig   fs: simplify iget...
931
  /**
375e289ea   J. Bruce Fields   vfs: pull ext4's ...
932
   * lock_two_nondirectories - take two i_mutexes on non-directory objects
4fd699ae3   J. Bruce Fields   vfs: lock_two_non...
933
934
935
936
   *
   * Lock any non-NULL argument that is not a directory.
   * Zero, one or two objects may be locked by this function.
   *
375e289ea   J. Bruce Fields   vfs: pull ext4's ...
937
938
939
940
941
   * @inode1: first inode to lock
   * @inode2: second inode to lock
   */
  void lock_two_nondirectories(struct inode *inode1, struct inode *inode2)
  {
4fd699ae3   J. Bruce Fields   vfs: lock_two_non...
942
943
944
945
  	if (inode1 > inode2)
  		swap(inode1, inode2);
  
  	if (inode1 && !S_ISDIR(inode1->i_mode))
5955102c9   Al Viro   wrappers for ->i_...
946
  		inode_lock(inode1);
4fd699ae3   J. Bruce Fields   vfs: lock_two_non...
947
  	if (inode2 && !S_ISDIR(inode2->i_mode) && inode2 != inode1)
5955102c9   Al Viro   wrappers for ->i_...
948
  		inode_lock_nested(inode2, I_MUTEX_NONDIR2);
375e289ea   J. Bruce Fields   vfs: pull ext4's ...
949
950
951
952
953
954
955
956
957
958
  }
  EXPORT_SYMBOL(lock_two_nondirectories);
  
  /**
   * unlock_two_nondirectories - release locks from lock_two_nondirectories()
   * @inode1: first inode to unlock
   * @inode2: second inode to unlock
   */
  void unlock_two_nondirectories(struct inode *inode1, struct inode *inode2)
  {
4fd699ae3   J. Bruce Fields   vfs: lock_two_non...
959
  	if (inode1 && !S_ISDIR(inode1->i_mode))
5955102c9   Al Viro   wrappers for ->i_...
960
  		inode_unlock(inode1);
4fd699ae3   J. Bruce Fields   vfs: lock_two_non...
961
  	if (inode2 && !S_ISDIR(inode2->i_mode) && inode2 != inode1)
5955102c9   Al Viro   wrappers for ->i_...
962
  		inode_unlock(inode2);
375e289ea   J. Bruce Fields   vfs: pull ext4's ...
963
964
965
966
  }
  EXPORT_SYMBOL(unlock_two_nondirectories);
  
  /**
0b2d0724e   Christoph Hellwig   fs: simplify iget...
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
   * 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
   *
   * Search for the inode specified by @hashval and @data in the inode cache,
   * and if present it is return it 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, allocate a new inode and return it locked,
   * hashed, and with the I_NEW flag set. The file system gets to fill it in
   * before unlocking it via unlock_new_inode().
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
982
   *
0b2d0724e   Christoph Hellwig   fs: simplify iget...
983
984
   * Note both @test and @set are called with the inode_hash_lock held, so can't
   * sleep.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
985
   */
0b2d0724e   Christoph Hellwig   fs: simplify iget...
986
987
988
  struct inode *iget5_locked(struct super_block *sb, unsigned long hashval,
  		int (*test)(struct inode *, void *),
  		int (*set)(struct inode *, void *), void *data)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
989
  {
0b2d0724e   Christoph Hellwig   fs: simplify iget...
990
  	struct hlist_head *head = inode_hashtable + hash(sb, hashval);
6b3304b53   Manish Katiyar   Make checkpatch.p...
991
  	struct inode *inode;
2864f3014   Al Viro   iget_locked et.al...
992
  again:
0b2d0724e   Christoph Hellwig   fs: simplify iget...
993
994
995
996
997
998
  	spin_lock(&inode_hash_lock);
  	inode = find_inode(sb, head, test, data);
  	spin_unlock(&inode_hash_lock);
  
  	if (inode) {
  		wait_on_inode(inode);
2864f3014   Al Viro   iget_locked et.al...
999
1000
1001
1002
  		if (unlikely(inode_unhashed(inode))) {
  			iput(inode);
  			goto again;
  		}
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1003
1004
  		return inode;
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1005
1006
  	inode = alloc_inode(sb);
  	if (inode) {
6b3304b53   Manish Katiyar   Make checkpatch.p...
1007
  		struct inode *old;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1008

67a23c494   Dave Chinner   fs: rename inode_...
1009
  		spin_lock(&inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1010
1011
1012
1013
1014
  		/* We released the lock, so.. */
  		old = find_inode(sb, head, test, data);
  		if (!old) {
  			if (set(inode, data))
  				goto set_failed;
250df6ed2   Dave Chinner   fs: protect inode...
1015
1016
  			spin_lock(&inode->i_lock);
  			inode->i_state = I_NEW;
646ec4615   Christoph Hellwig   fs: remove inode_...
1017
  			hlist_add_head(&inode->i_hash, head);
250df6ed2   Dave Chinner   fs: protect inode...
1018
  			spin_unlock(&inode->i_lock);
55fa6091d   Dave Chinner   fs: move i_sb_lis...
1019
  			inode_sb_list_add(inode);
67a23c494   Dave Chinner   fs: rename inode_...
1020
  			spin_unlock(&inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
  
  			/* 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.
  		 */
67a23c494   Dave Chinner   fs: rename inode_...
1033
  		spin_unlock(&inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1034
1035
1036
  		destroy_inode(inode);
  		inode = old;
  		wait_on_inode(inode);
2864f3014   Al Viro   iget_locked et.al...
1037
1038
1039
1040
  		if (unlikely(inode_unhashed(inode))) {
  			iput(inode);
  			goto again;
  		}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1041
1042
1043
1044
  	}
  	return inode;
  
  set_failed:
67a23c494   Dave Chinner   fs: rename inode_...
1045
  	spin_unlock(&inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1046
1047
1048
  	destroy_inode(inode);
  	return NULL;
  }
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1049
  EXPORT_SYMBOL(iget5_locked);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1050

0b2d0724e   Christoph Hellwig   fs: simplify iget...
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
  /**
   * iget_locked - obtain an inode from a mounted file system
   * @sb:		super block of file system
   * @ino:	inode number to get
   *
   * Search for the inode specified by @ino in the inode cache and if present
   * return it 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, allocate a new inode and return it locked,
   * hashed, and with the I_NEW flag set.  The file system gets to fill it in
   * before unlocking it via unlock_new_inode().
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1063
   */
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1064
  struct inode *iget_locked(struct super_block *sb, unsigned long ino)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1065
  {
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1066
  	struct hlist_head *head = inode_hashtable + hash(sb, ino);
6b3304b53   Manish Katiyar   Make checkpatch.p...
1067
  	struct inode *inode;
2864f3014   Al Viro   iget_locked et.al...
1068
  again:
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1069
1070
1071
1072
1073
  	spin_lock(&inode_hash_lock);
  	inode = find_inode_fast(sb, head, ino);
  	spin_unlock(&inode_hash_lock);
  	if (inode) {
  		wait_on_inode(inode);
2864f3014   Al Viro   iget_locked et.al...
1074
1075
1076
1077
  		if (unlikely(inode_unhashed(inode))) {
  			iput(inode);
  			goto again;
  		}
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1078
1079
  		return inode;
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1080
1081
  	inode = alloc_inode(sb);
  	if (inode) {
6b3304b53   Manish Katiyar   Make checkpatch.p...
1082
  		struct inode *old;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1083

67a23c494   Dave Chinner   fs: rename inode_...
1084
  		spin_lock(&inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1085
1086
1087
1088
  		/* We released the lock, so.. */
  		old = find_inode_fast(sb, head, ino);
  		if (!old) {
  			inode->i_ino = ino;
250df6ed2   Dave Chinner   fs: protect inode...
1089
1090
  			spin_lock(&inode->i_lock);
  			inode->i_state = I_NEW;
646ec4615   Christoph Hellwig   fs: remove inode_...
1091
  			hlist_add_head(&inode->i_hash, head);
250df6ed2   Dave Chinner   fs: protect inode...
1092
  			spin_unlock(&inode->i_lock);
55fa6091d   Dave Chinner   fs: move i_sb_lis...
1093
  			inode_sb_list_add(inode);
67a23c494   Dave Chinner   fs: rename inode_...
1094
  			spin_unlock(&inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
  
  			/* 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.
  		 */
67a23c494   Dave Chinner   fs: rename inode_...
1107
  		spin_unlock(&inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1108
1109
1110
  		destroy_inode(inode);
  		inode = old;
  		wait_on_inode(inode);
2864f3014   Al Viro   iget_locked et.al...
1111
1112
1113
1114
  		if (unlikely(inode_unhashed(inode))) {
  			iput(inode);
  			goto again;
  		}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1115
1116
1117
  	}
  	return inode;
  }
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1118
  EXPORT_SYMBOL(iget_locked);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1119

ad5e195ac   Christoph Hellwig   fs: Stop abusing ...
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
  /*
   * search the inode cache for a matching inode number.
   * If we find one, then the inode number we are trying to
   * allocate is not unique and so we should not use it.
   *
   * Returns 1 if the inode number is unique, 0 if it is not.
   */
  static int test_inode_iunique(struct super_block *sb, unsigned long ino)
  {
  	struct hlist_head *b = inode_hashtable + hash(sb, ino);
ad5e195ac   Christoph Hellwig   fs: Stop abusing ...
1130
  	struct inode *inode;
67a23c494   Dave Chinner   fs: rename inode_...
1131
  	spin_lock(&inode_hash_lock);
b67bfe0d4   Sasha Levin   hlist: drop the n...
1132
  	hlist_for_each_entry(inode, b, i_hash) {
67a23c494   Dave Chinner   fs: rename inode_...
1133
1134
  		if (inode->i_ino == ino && inode->i_sb == sb) {
  			spin_unlock(&inode_hash_lock);
ad5e195ac   Christoph Hellwig   fs: Stop abusing ...
1135
  			return 0;
67a23c494   Dave Chinner   fs: rename inode_...
1136
  		}
ad5e195ac   Christoph Hellwig   fs: Stop abusing ...
1137
  	}
67a23c494   Dave Chinner   fs: rename inode_...
1138
  	spin_unlock(&inode_hash_lock);
ad5e195ac   Christoph Hellwig   fs: Stop abusing ...
1139
1140
1141
  
  	return 1;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
  /**
   *	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: ...
1158
1159
1160
1161
1162
  	/*
  	 * 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.
  	 */
ad5e195ac   Christoph Hellwig   fs: Stop abusing ...
1163
  	static DEFINE_SPINLOCK(iunique_lock);
866b04fcc   Jeff Layton   inode numbering: ...
1164
  	static unsigned int counter;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1165
  	ino_t res;
3361c7beb   Jeffrey Layton   make iunique use ...
1166

ad5e195ac   Christoph Hellwig   fs: Stop abusing ...
1167
  	spin_lock(&iunique_lock);
3361c7beb   Jeffrey Layton   make iunique use ...
1168
1169
1170
  	do {
  		if (counter <= max_reserved)
  			counter = max_reserved + 1;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1171
  		res = counter++;
ad5e195ac   Christoph Hellwig   fs: Stop abusing ...
1172
1173
  	} while (!test_inode_iunique(sb, res));
  	spin_unlock(&iunique_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1174

3361c7beb   Jeffrey Layton   make iunique use ...
1175
1176
  	return res;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1177
1178
1179
1180
  EXPORT_SYMBOL(iunique);
  
  struct inode *igrab(struct inode *inode)
  {
250df6ed2   Dave Chinner   fs: protect inode...
1181
1182
  	spin_lock(&inode->i_lock);
  	if (!(inode->i_state & (I_FREEING|I_WILL_FREE))) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1183
  		__iget(inode);
250df6ed2   Dave Chinner   fs: protect inode...
1184
1185
1186
  		spin_unlock(&inode->i_lock);
  	} else {
  		spin_unlock(&inode->i_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1187
1188
1189
1190
1191
1192
  		/*
  		 * 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;
250df6ed2   Dave Chinner   fs: protect inode...
1193
  	}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1194
1195
  	return inode;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1196
1197
1198
  EXPORT_SYMBOL(igrab);
  
  /**
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1199
   * ilookup5_nowait - search for an inode in the inode cache
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1200
   * @sb:		super block of file system to search
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1201
   * @hashval:	hash value (usually inode number) to search for
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1202
1203
   * @test:	callback used for comparisons between inodes
   * @data:	opaque data pointer to pass to @test
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1204
   *
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1205
   * Search for the inode specified by @hashval and @data in the inode cache.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1206
1207
1208
   * If the inode is in the cache, the inode is returned with an incremented
   * reference count.
   *
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1209
1210
   * Note: I_NEW 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.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1211
   *
b6d0ad686   Randy Dunlap   fs: fix inode.c k...
1212
   * Note2: @test is called with the inode_hash_lock held, so can't sleep.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1213
   */
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1214
1215
  struct inode *ilookup5_nowait(struct super_block *sb, unsigned long hashval,
  		int (*test)(struct inode *, void *), void *data)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1216
  {
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1217
  	struct hlist_head *head = inode_hashtable + hash(sb, hashval);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1218
  	struct inode *inode;
67a23c494   Dave Chinner   fs: rename inode_...
1219
  	spin_lock(&inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1220
  	inode = find_inode(sb, head, test, data);
67a23c494   Dave Chinner   fs: rename inode_...
1221
  	spin_unlock(&inode_hash_lock);
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
1222

0b2d0724e   Christoph Hellwig   fs: simplify iget...
1223
  	return inode;
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
1224
  }
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
1225
1226
1227
1228
1229
1230
1231
1232
1233
  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
   *
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1234
1235
1236
   * Search for the inode specified by @hashval and @data in the inode cache,
   * and if the inode is in the cache, return the inode with an incremented
   * reference count.  Waits on I_NEW before returning the inode.
88bd5121d   Anton Altaparmakov   [PATCH] Fix soft ...
1237
   * returned with an incremented reference count.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1238
   *
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1239
1240
   * This is a generalized version of ilookup() for file systems where the
   * inode number is not sufficient for unique identification of an inode.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1241
   *
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1242
   * Note: @test is called with the inode_hash_lock held, so can't sleep.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1243
1244
1245
1246
   */
  struct inode *ilookup5(struct super_block *sb, unsigned long hashval,
  		int (*test)(struct inode *, void *), void *data)
  {
2864f3014   Al Viro   iget_locked et.al...
1247
1248
1249
1250
  	struct inode *inode;
  again:
  	inode = ilookup5_nowait(sb, hashval, test, data);
  	if (inode) {
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1251
  		wait_on_inode(inode);
2864f3014   Al Viro   iget_locked et.al...
1252
1253
1254
1255
1256
  		if (unlikely(inode_unhashed(inode))) {
  			iput(inode);
  			goto again;
  		}
  	}
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1257
  	return inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1258
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1259
1260
1261
1262
1263
1264
1265
  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
   *
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1266
1267
   * Search for the inode @ino in the inode cache, and if the inode is in the
   * cache, the inode is returned with an incremented reference count.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1268
1269
1270
1271
   */
  struct inode *ilookup(struct super_block *sb, unsigned long ino)
  {
  	struct hlist_head *head = inode_hashtable + hash(sb, ino);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1272
  	struct inode *inode;
2864f3014   Al Viro   iget_locked et.al...
1273
  again:
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1274
1275
1276
  	spin_lock(&inode_hash_lock);
  	inode = find_inode_fast(sb, head, ino);
  	spin_unlock(&inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1277

2864f3014   Al Viro   iget_locked et.al...
1278
  	if (inode) {
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1279
  		wait_on_inode(inode);
2864f3014   Al Viro   iget_locked et.al...
1280
1281
1282
1283
1284
  		if (unlikely(inode_unhashed(inode))) {
  			iput(inode);
  			goto again;
  		}
  	}
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1285
  	return inode;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1286
  }
0b2d0724e   Christoph Hellwig   fs: simplify iget...
1287
  EXPORT_SYMBOL(ilookup);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1288

fe032c422   Theodore Ts'o   vfs: add find_ino...
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
  /**
   * find_inode_nowait - find an inode in the inode cache
   * @sb:		super block of file system to search
   * @hashval:	hash value (usually inode number) to search for
   * @match:	callback used for comparisons between inodes
   * @data:	opaque data pointer to pass to @match
   *
   * Search for the inode specified by @hashval and @data in the inode
   * cache, where the helper function @match will return 0 if the inode
   * does not match, 1 if the inode does match, and -1 if the search
   * should be stopped.  The @match function must be responsible for
   * taking the i_lock spin_lock and checking i_state for an inode being
   * freed or being initialized, and incrementing the reference count
   * before returning 1.  It also must not sleep, since it is called with
   * the inode_hash_lock spinlock held.
   *
   * This is a even more generalized version of ilookup5() when the
   * function must never block --- find_inode() can block in
   * __wait_on_freeing_inode() --- or when the caller can not increment
   * the reference count because the resulting iput() might cause an
   * inode eviction.  The tradeoff is that the @match funtion must be
   * very carefully implemented.
   */
  struct inode *find_inode_nowait(struct super_block *sb,
  				unsigned long hashval,
  				int (*match)(struct inode *, unsigned long,
  					     void *),
  				void *data)
  {
  	struct hlist_head *head = inode_hashtable + hash(sb, hashval);
  	struct inode *inode, *ret_inode = NULL;
  	int mval;
  
  	spin_lock(&inode_hash_lock);
  	hlist_for_each_entry(inode, head, i_hash) {
  		if (inode->i_sb != sb)
  			continue;
  		mval = match(inode, hashval, data);
  		if (mval == 0)
  			continue;
  		if (mval == 1)
  			ret_inode = inode;
  		goto out;
  	}
  out:
  	spin_unlock(&inode_hash_lock);
  	return ret_inode;
  }
  EXPORT_SYMBOL(find_inode_nowait);
261bca86e   Al Viro   nfsd/create race ...
1338
1339
1340
1341
1342
  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 ...
1343

261bca86e   Al Viro   nfsd/create race ...
1344
  	while (1) {
72a43d63c   Al Viro   ext3/4 with synch...
1345
  		struct inode *old = NULL;
67a23c494   Dave Chinner   fs: rename inode_...
1346
  		spin_lock(&inode_hash_lock);
b67bfe0d4   Sasha Levin   hlist: drop the n...
1347
  		hlist_for_each_entry(old, head, i_hash) {
72a43d63c   Al Viro   ext3/4 with synch...
1348
1349
1350
1351
  			if (old->i_ino != ino)
  				continue;
  			if (old->i_sb != sb)
  				continue;
250df6ed2   Dave Chinner   fs: protect inode...
1352
1353
1354
  			spin_lock(&old->i_lock);
  			if (old->i_state & (I_FREEING|I_WILL_FREE)) {
  				spin_unlock(&old->i_lock);
72a43d63c   Al Viro   ext3/4 with synch...
1355
  				continue;
250df6ed2   Dave Chinner   fs: protect inode...
1356
  			}
72a43d63c   Al Viro   ext3/4 with synch...
1357
1358
  			break;
  		}
b67bfe0d4   Sasha Levin   hlist: drop the n...
1359
  		if (likely(!old)) {
250df6ed2   Dave Chinner   fs: protect inode...
1360
1361
  			spin_lock(&inode->i_lock);
  			inode->i_state |= I_NEW;
261bca86e   Al Viro   nfsd/create race ...
1362
  			hlist_add_head(&inode->i_hash, head);
250df6ed2   Dave Chinner   fs: protect inode...
1363
  			spin_unlock(&inode->i_lock);
67a23c494   Dave Chinner   fs: rename inode_...
1364
  			spin_unlock(&inode_hash_lock);
261bca86e   Al Viro   nfsd/create race ...
1365
1366
1367
  			return 0;
  		}
  		__iget(old);
250df6ed2   Dave Chinner   fs: protect inode...
1368
  		spin_unlock(&old->i_lock);
67a23c494   Dave Chinner   fs: rename inode_...
1369
  		spin_unlock(&inode_hash_lock);
261bca86e   Al Viro   nfsd/create race ...
1370
  		wait_on_inode(old);
1d3382cbf   Al Viro   new helper: inode...
1371
  		if (unlikely(!inode_unhashed(old))) {
261bca86e   Al Viro   nfsd/create race ...
1372
1373
1374
1375
1376
1377
  			iput(old);
  			return -EBUSY;
  		}
  		iput(old);
  	}
  }
261bca86e   Al Viro   nfsd/create race ...
1378
1379
1380
1381
1382
1383
1384
  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 ...
1385

261bca86e   Al Viro   nfsd/create race ...
1386
  	while (1) {
72a43d63c   Al Viro   ext3/4 with synch...
1387
  		struct inode *old = NULL;
67a23c494   Dave Chinner   fs: rename inode_...
1388
  		spin_lock(&inode_hash_lock);
b67bfe0d4   Sasha Levin   hlist: drop the n...
1389
  		hlist_for_each_entry(old, head, i_hash) {
72a43d63c   Al Viro   ext3/4 with synch...
1390
1391
1392
1393
  			if (old->i_sb != sb)
  				continue;
  			if (!test(old, data))
  				continue;
250df6ed2   Dave Chinner   fs: protect inode...
1394
1395
1396
  			spin_lock(&old->i_lock);
  			if (old->i_state & (I_FREEING|I_WILL_FREE)) {
  				spin_unlock(&old->i_lock);
72a43d63c   Al Viro   ext3/4 with synch...
1397
  				continue;
250df6ed2   Dave Chinner   fs: protect inode...
1398
  			}
72a43d63c   Al Viro   ext3/4 with synch...
1399
1400
  			break;
  		}
b67bfe0d4   Sasha Levin   hlist: drop the n...
1401
  		if (likely(!old)) {
250df6ed2   Dave Chinner   fs: protect inode...
1402
1403
  			spin_lock(&inode->i_lock);
  			inode->i_state |= I_NEW;
261bca86e   Al Viro   nfsd/create race ...
1404
  			hlist_add_head(&inode->i_hash, head);
250df6ed2   Dave Chinner   fs: protect inode...
1405
  			spin_unlock(&inode->i_lock);
67a23c494   Dave Chinner   fs: rename inode_...
1406
  			spin_unlock(&inode_hash_lock);
261bca86e   Al Viro   nfsd/create race ...
1407
1408
1409
  			return 0;
  		}
  		__iget(old);
250df6ed2   Dave Chinner   fs: protect inode...
1410
  		spin_unlock(&old->i_lock);
67a23c494   Dave Chinner   fs: rename inode_...
1411
  		spin_unlock(&inode_hash_lock);
261bca86e   Al Viro   nfsd/create race ...
1412
  		wait_on_inode(old);
1d3382cbf   Al Viro   new helper: inode...
1413
  		if (unlikely(!inode_unhashed(old))) {
261bca86e   Al Viro   nfsd/create race ...
1414
1415
1416
1417
1418
1419
  			iput(old);
  			return -EBUSY;
  		}
  		iput(old);
  	}
  }
261bca86e   Al Viro   nfsd/create race ...
1420
  EXPORT_SYMBOL(insert_inode_locked4);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1421

45321ac54   Al Viro   Make ->drop_inode...
1422
1423
1424
1425
1426
  int generic_delete_inode(struct inode *inode)
  {
  	return 1;
  }
  EXPORT_SYMBOL(generic_delete_inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1427
  /*
45321ac54   Al Viro   Make ->drop_inode...
1428
1429
   * Called when we're dropping the last reference
   * to an inode.
22fe40421   Jan Kara   vfs: split generi...
1430
   *
45321ac54   Al Viro   Make ->drop_inode...
1431
1432
1433
1434
1435
   * 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...
1436
   */
45321ac54   Al Viro   Make ->drop_inode...
1437
  static void iput_final(struct inode *inode)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1438
1439
  {
  	struct super_block *sb = inode->i_sb;
45321ac54   Al Viro   Make ->drop_inode...
1440
1441
  	const struct super_operations *op = inode->i_sb->s_op;
  	int drop;
250df6ed2   Dave Chinner   fs: protect inode...
1442
  	WARN_ON(inode->i_state & I_NEW);
e7f590970   Al Viro   kill useless chec...
1443
  	if (op->drop_inode)
45321ac54   Al Viro   Make ->drop_inode...
1444
1445
1446
  		drop = op->drop_inode(inode);
  	else
  		drop = generic_drop_inode(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1447

b2b2af8e6   Dave Chinner   fs: factor inode ...
1448
  	if (!drop && (sb->s_flags & MS_ACTIVE)) {
4eff96dd5   Jan Kara   writeback: put un...
1449
  		inode_add_lru(inode);
b2b2af8e6   Dave Chinner   fs: factor inode ...
1450
  		spin_unlock(&inode->i_lock);
b2b2af8e6   Dave Chinner   fs: factor inode ...
1451
1452
  		return;
  	}
45321ac54   Al Viro   Make ->drop_inode...
1453
  	if (!drop) {
991114c6f   Alexander Viro   [PATCH] fix for p...
1454
  		inode->i_state |= I_WILL_FREE;
250df6ed2   Dave Chinner   fs: protect inode...
1455
  		spin_unlock(&inode->i_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1456
  		write_inode_now(inode, 1);
250df6ed2   Dave Chinner   fs: protect inode...
1457
  		spin_lock(&inode->i_lock);
7ef0d7377   Nick Piggin   fs: new inode i_s...
1458
  		WARN_ON(inode->i_state & I_NEW);
991114c6f   Alexander Viro   [PATCH] fix for p...
1459
  		inode->i_state &= ~I_WILL_FREE;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1460
  	}
7ccf19a80   Nick Piggin   fs: inode split I...
1461

991114c6f   Alexander Viro   [PATCH] fix for p...
1462
  	inode->i_state |= I_FREEING;
c4ae0c654   Eric Dumazet   vfs: avoid call t...
1463
1464
  	if (!list_empty(&inode->i_lru))
  		inode_lru_list_del(inode);
b2b2af8e6   Dave Chinner   fs: factor inode ...
1465
  	spin_unlock(&inode->i_lock);
b2b2af8e6   Dave Chinner   fs: factor inode ...
1466

644da5960   Al Viro   fs/inode.c:evict(...
1467
  	evict(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1468
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1469
  /**
6b3304b53   Manish Katiyar   Make checkpatch.p...
1470
   *	iput	- put an inode
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1471
1472
1473
1474
1475
1476
1477
1478
1479
   *	@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)
  {
0ae45f63d   Theodore Ts'o   vfs: add support ...
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
  	if (!inode)
  		return;
  	BUG_ON(inode->i_state & I_CLEAR);
  retry:
  	if (atomic_dec_and_lock(&inode->i_count, &inode->i_lock)) {
  		if (inode->i_nlink && (inode->i_state & I_DIRTY_TIME)) {
  			atomic_inc(&inode->i_count);
  			inode->i_state &= ~I_DIRTY_TIME;
  			spin_unlock(&inode->i_lock);
  			trace_writeback_lazytime_iput(inode);
  			mark_inode_dirty_sync(inode);
  			goto retry;
  		}
  		iput_final(inode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1494
1495
  	}
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
  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...
1506
   *	disk block relative to the disk start that holds that block of the
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1507
1508
   *	file.
   */
6b3304b53   Manish Katiyar   Make checkpatch.p...
1509
  sector_t bmap(struct inode *inode, sector_t block)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1510
1511
1512
1513
1514
1515
  {
  	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
1516
  EXPORT_SYMBOL(bmap);
11ff6f05f   Matthew Garrett   Allow relatime to...
1517
  /*
598e3c8f7   Miklos Szeredi   vfs: update ovl i...
1518
1519
1520
1521
1522
   * Update times in overlayed inode from underlying real inode
   */
  static void update_ovl_inode_times(struct dentry *dentry, struct inode *inode,
  			       bool rcu)
  {
cd91304e7   Miklos Szeredi   ovl: fix relatime...
1523
  	struct dentry *upperdentry;
598e3c8f7   Miklos Szeredi   vfs: update ovl i...
1524

cd91304e7   Miklos Szeredi   ovl: fix relatime...
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
  	/*
  	 * Nothing to do if in rcu or if non-overlayfs
  	 */
  	if (rcu || likely(!(dentry->d_flags & DCACHE_OP_REAL)))
  		return;
  
  	upperdentry = d_real(dentry, NULL, 0, D_REAL_UPPER);
  
  	/*
  	 * If file is on lower then we can't update atime, so no worries about
  	 * stale mtime/ctime.
  	 */
  	if (upperdentry) {
  		struct inode *realinode = d_inode(upperdentry);
  
  		if ((!timespec_equal(&inode->i_mtime, &realinode->i_mtime) ||
598e3c8f7   Miklos Szeredi   vfs: update ovl i...
1541
1542
1543
1544
1545
1546
1547
1548
  		     !timespec_equal(&inode->i_ctime, &realinode->i_ctime))) {
  			inode->i_mtime = realinode->i_mtime;
  			inode->i_ctime = realinode->i_ctime;
  		}
  	}
  }
  
  /*
11ff6f05f   Matthew Garrett   Allow relatime to...
1549
1550
1551
1552
   * 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.
   */
598e3c8f7   Miklos Szeredi   vfs: update ovl i...
1553
1554
  static int relatime_need_update(const struct path *path, struct inode *inode,
  				struct timespec now, bool rcu)
11ff6f05f   Matthew Garrett   Allow relatime to...
1555
  {
598e3c8f7   Miklos Szeredi   vfs: update ovl i...
1556
  	if (!(path->mnt->mnt_flags & MNT_RELATIME))
11ff6f05f   Matthew Garrett   Allow relatime to...
1557
  		return 1;
598e3c8f7   Miklos Szeredi   vfs: update ovl i...
1558
1559
  
  	update_ovl_inode_times(path->dentry, inode, rcu);
11ff6f05f   Matthew Garrett   Allow relatime to...
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
  	/*
  	 * 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;
  }
0ae45f63d   Theodore Ts'o   vfs: add support ...
1582
  int generic_update_time(struct inode *inode, struct timespec *time, int flags)
c3b2da314   Josef Bacik   fs: introduce ino...
1583
  {
0ae45f63d   Theodore Ts'o   vfs: add support ...
1584
  	int iflags = I_DIRTY_TIME;
c3b2da314   Josef Bacik   fs: introduce ino...
1585
1586
1587
1588
1589
1590
1591
1592
1593
  
  	if (flags & S_ATIME)
  		inode->i_atime = *time;
  	if (flags & S_VERSION)
  		inode_inc_iversion(inode);
  	if (flags & S_CTIME)
  		inode->i_ctime = *time;
  	if (flags & S_MTIME)
  		inode->i_mtime = *time;
0ae45f63d   Theodore Ts'o   vfs: add support ...
1594
1595
1596
1597
  
  	if (!(inode->i_sb->s_flags & MS_LAZYTIME) || (flags & S_VERSION))
  		iflags |= I_DIRTY_SYNC;
  	__mark_inode_dirty(inode, iflags);
c3b2da314   Josef Bacik   fs: introduce ino...
1598
1599
  	return 0;
  }
0ae45f63d   Theodore Ts'o   vfs: add support ...
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
  EXPORT_SYMBOL(generic_update_time);
  
  /*
   * This does the actual work of updating an inodes time or version.  Must have
   * had called mnt_want_write() before calling this.
   */
  static int update_time(struct inode *inode, struct timespec *time, int flags)
  {
  	int (*update_time)(struct inode *, struct timespec *, int);
  
  	update_time = inode->i_op->update_time ? inode->i_op->update_time :
  		generic_update_time;
  
  	return update_time(inode, time, flags);
  }
c3b2da314   Josef Bacik   fs: introduce ino...
1615

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1616
  /**
869243a0f   Christoph Hellwig   [PATCH] remove up...
1617
   *	touch_atime	-	update the access time
185553b22   Randy Dunlap   fs: fix inode.c k...
1618
   *	@path: the &struct path to update
30fdc8ee0   Randy Dunlap   fs/inode.c: fix k...
1619
   *	@inode: inode to update
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1620
1621
1622
1623
1624
   *
   *	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.
   */
598e3c8f7   Miklos Szeredi   vfs: update ovl i...
1625
1626
  bool __atime_needs_update(const struct path *path, struct inode *inode,
  			  bool rcu)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1627
  {
68ac1234f   Al Viro   switch touch_atim...
1628
  	struct vfsmount *mnt = path->mnt;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1629
  	struct timespec now;
cdb70f3f7   Dave Hansen   [PATCH] r/o bind ...
1630
  	if (inode->i_flags & S_NOATIME)
8fa9dd246   NeilBrown   VFS/namei: make t...
1631
  		return false;
0bd23d09b   Eric W. Biederman   vfs: Don't modify...
1632
1633
1634
1635
1636
1637
  
  	/* Atime updates will likely cause i_uid and i_gid to be written
  	 * back improprely if their true value is unknown to the vfs.
  	 */
  	if (HAS_UNMAPPED_ID(inode))
  		return false;
37756ced1   Eric Dumazet   [PATCH] avoid one...
1638
  	if (IS_NOATIME(inode))
8fa9dd246   NeilBrown   VFS/namei: make t...
1639
  		return false;
b22761384   Andrew Morton   [PATCH] touch_ati...
1640
  	if ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode))
8fa9dd246   NeilBrown   VFS/namei: make t...
1641
  		return false;
47ae32d6a   Valerie Henson   [PATCH] relative ...
1642

cdb70f3f7   Dave Hansen   [PATCH] r/o bind ...
1643
  	if (mnt->mnt_flags & MNT_NOATIME)
8fa9dd246   NeilBrown   VFS/namei: make t...
1644
  		return false;
cdb70f3f7   Dave Hansen   [PATCH] r/o bind ...
1645
  	if ((mnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))
8fa9dd246   NeilBrown   VFS/namei: make t...
1646
  		return false;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1647

c2050a454   Deepa Dinamani   fs: Replace curre...
1648
  	now = current_time(inode);
11ff6f05f   Matthew Garrett   Allow relatime to...
1649

598e3c8f7   Miklos Szeredi   vfs: update ovl i...
1650
  	if (!relatime_need_update(path, inode, now, rcu))
8fa9dd246   NeilBrown   VFS/namei: make t...
1651
  		return false;
11ff6f05f   Matthew Garrett   Allow relatime to...
1652

47ae32d6a   Valerie Henson   [PATCH] relative ...
1653
  	if (timespec_equal(&inode->i_atime, &now))
8fa9dd246   NeilBrown   VFS/namei: make t...
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
  		return false;
  
  	return true;
  }
  
  void touch_atime(const struct path *path)
  {
  	struct vfsmount *mnt = path->mnt;
  	struct inode *inode = d_inode(path->dentry);
  	struct timespec now;
598e3c8f7   Miklos Szeredi   vfs: update ovl i...
1664
  	if (!__atime_needs_update(path, inode, false))
b12536c27   Andi Kleen   vfs: optimization...
1665
  		return;
5d37e9e6d   Jan Kara   fs: Skip atime up...
1666
  	if (!sb_start_write_trylock(inode->i_sb))
b12536c27   Andi Kleen   vfs: optimization...
1667
  		return;
47ae32d6a   Valerie Henson   [PATCH] relative ...
1668

8fa9dd246   NeilBrown   VFS/namei: make t...
1669
  	if (__mnt_want_write(mnt) != 0)
5d37e9e6d   Jan Kara   fs: Skip atime up...
1670
  		goto skip_update;
c3b2da314   Josef Bacik   fs: introduce ino...
1671
1672
1673
1674
1675
1676
  	/*
  	 * File systems can error out when updating inodes if they need to
  	 * allocate new space to modify an inode (such is the case for
  	 * Btrfs), but since we touch atime while walking down the path we
  	 * really don't care if we failed to update the atime of the file,
  	 * so just ignore the return value.
2bc556528   Alexander Block   Btrfs: don't upda...
1677
1678
  	 * We may also fail on filesystems that have the ability to make parts
  	 * of the fs read only, e.g. subvolumes in Btrfs.
c3b2da314   Josef Bacik   fs: introduce ino...
1679
  	 */
c2050a454   Deepa Dinamani   fs: Replace curre...
1680
  	now = current_time(inode);
c3b2da314   Josef Bacik   fs: introduce ino...
1681
  	update_time(inode, &now, S_ATIME);
5d37e9e6d   Jan Kara   fs: Skip atime up...
1682
1683
1684
  	__mnt_drop_write(mnt);
  skip_update:
  	sb_end_write(inode->i_sb);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1685
  }
869243a0f   Christoph Hellwig   [PATCH] remove up...
1686
  EXPORT_SYMBOL(touch_atime);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1687

3ed37648e   Cong Wang   fs: move file_rem...
1688
1689
1690
1691
1692
1693
1694
1695
  /*
   * The logic we want is
   *
   *	if suid or (sgid and xgrp)
   *		remove privs
   */
  int should_remove_suid(struct dentry *dentry)
  {
df2b1afde   David Howells   VFS: fs/inode.c h...
1696
  	umode_t mode = d_inode(dentry)->i_mode;
3ed37648e   Cong Wang   fs: move file_rem...
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
  	int kill = 0;
  
  	/* suid always must be killed */
  	if (unlikely(mode & S_ISUID))
  		kill = ATTR_KILL_SUID;
  
  	/*
  	 * sgid without any exec bits is just a mandatory locking mark; leave
  	 * it alone.  If some exec bits are set, it's a real sgid; kill it.
  	 */
  	if (unlikely((mode & S_ISGID) && (mode & S_IXGRP)))
  		kill |= ATTR_KILL_SGID;
  
  	if (unlikely(kill && !capable(CAP_FSETID) && S_ISREG(mode)))
  		return kill;
  
  	return 0;
  }
  EXPORT_SYMBOL(should_remove_suid);
dbfae0cdc   Jan Kara   fs: Provide funct...
1716
1717
1718
1719
1720
  /*
   * Return mask of changes for notify_change() that need to be done as a
   * response to write or truncate. Return 0 if nothing has to be changed.
   * Negative value on error (change should be denied).
   */
45f147a1b   Jan Kara   fs: Call security...
1721
  int dentry_needs_remove_privs(struct dentry *dentry)
dbfae0cdc   Jan Kara   fs: Provide funct...
1722
  {
dbfae0cdc   Jan Kara   fs: Provide funct...
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
  	struct inode *inode = d_inode(dentry);
  	int mask = 0;
  	int ret;
  
  	if (IS_NOSEC(inode))
  		return 0;
  
  	mask = should_remove_suid(dentry);
  	ret = security_inode_need_killpriv(dentry);
  	if (ret < 0)
  		return ret;
  	if (ret)
  		mask |= ATTR_KILL_PRIV;
  	return mask;
  }
dbfae0cdc   Jan Kara   fs: Provide funct...
1738
1739
  
  static int __remove_privs(struct dentry *dentry, int kill)
3ed37648e   Cong Wang   fs: move file_rem...
1740
1741
1742
1743
  {
  	struct iattr newattrs;
  
  	newattrs.ia_valid = ATTR_FORCE | kill;
27ac0ffea   J. Bruce Fields   locks: break dele...
1744
1745
1746
1747
1748
  	/*
  	 * Note we call this on write, so notify_change will not
  	 * encounter any conflicting delegations:
  	 */
  	return notify_change(dentry, &newattrs, NULL);
3ed37648e   Cong Wang   fs: move file_rem...
1749
  }
5fa8e0a1c   Jan Kara   fs: Rename file_r...
1750
1751
1752
1753
1754
  /*
   * Remove special file priviledges (suid, capabilities) when file is written
   * to or truncated.
   */
  int file_remove_privs(struct file *file)
3ed37648e   Cong Wang   fs: move file_rem...
1755
  {
c1892c377   Miklos Szeredi   vfs: fix deadlock...
1756
1757
  	struct dentry *dentry = file_dentry(file);
  	struct inode *inode = file_inode(file);
dbfae0cdc   Jan Kara   fs: Provide funct...
1758
  	int kill;
3ed37648e   Cong Wang   fs: move file_rem...
1759
1760
1761
1762
1763
  	int error = 0;
  
  	/* Fast path for nothing security related */
  	if (IS_NOSEC(inode))
  		return 0;
c1892c377   Miklos Szeredi   vfs: fix deadlock...
1764
  	kill = dentry_needs_remove_privs(dentry);
dbfae0cdc   Jan Kara   fs: Provide funct...
1765
1766
1767
1768
  	if (kill < 0)
  		return kill;
  	if (kill)
  		error = __remove_privs(dentry, kill);
2426f3910   Jan Kara   fs: Fix S_NOSEC h...
1769
1770
  	if (!error)
  		inode_has_no_xattr(inode);
3ed37648e   Cong Wang   fs: move file_rem...
1771
1772
1773
  
  	return error;
  }
5fa8e0a1c   Jan Kara   fs: Rename file_r...
1774
  EXPORT_SYMBOL(file_remove_privs);
3ed37648e   Cong Wang   fs: move file_rem...
1775

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1776
  /**
870f48179   Christoph Hellwig   [PATCH] replace i...
1777
1778
   *	file_update_time	-	update mtime and ctime time
   *	@file: file accessed
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1779
   *
870f48179   Christoph Hellwig   [PATCH] replace i...
1780
1781
1782
1783
   *	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...
1784
   *	S_NOCMTIME inode flag, e.g. for network filesystem where these
c3b2da314   Josef Bacik   fs: introduce ino...
1785
1786
   *	timestamps are handled by the server.  This can return an error for
   *	file systems who need to allocate space in order to update an inode.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1787
   */
c3b2da314   Josef Bacik   fs: introduce ino...
1788
  int file_update_time(struct file *file)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1789
  {
496ad9aa8   Al Viro   new helper: file_...
1790
  	struct inode *inode = file_inode(file);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1791
  	struct timespec now;
c3b2da314   Josef Bacik   fs: introduce ino...
1792
1793
  	int sync_it = 0;
  	int ret;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1794

ce06e0b21   Andi Kleen   vfs: optimize tou...
1795
  	/* First try to exhaust all avenues to not sync */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1796
  	if (IS_NOCMTIME(inode))
c3b2da314   Josef Bacik   fs: introduce ino...
1797
  		return 0;
20ddee2c7   Dave Hansen   [PATCH] r/o bind ...
1798

c2050a454   Deepa Dinamani   fs: Replace curre...
1799
  	now = current_time(inode);
ce06e0b21   Andi Kleen   vfs: optimize tou...
1800
1801
  	if (!timespec_equal(&inode->i_mtime, &now))
  		sync_it = S_MTIME;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1802

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

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

ce06e0b21   Andi Kleen   vfs: optimize tou...
1809
  	if (!sync_it)
c3b2da314   Josef Bacik   fs: introduce ino...
1810
  		return 0;
ce06e0b21   Andi Kleen   vfs: optimize tou...
1811
1812
  
  	/* Finally allowed to write? Takes lock. */
eb04c2828   Jan Kara   fs: Add freezing ...
1813
  	if (__mnt_want_write_file(file))
c3b2da314   Josef Bacik   fs: introduce ino...
1814
  		return 0;
ce06e0b21   Andi Kleen   vfs: optimize tou...
1815

c3b2da314   Josef Bacik   fs: introduce ino...
1816
  	ret = update_time(inode, &now, sync_it);
eb04c2828   Jan Kara   fs: Add freezing ...
1817
  	__mnt_drop_write_file(file);
c3b2da314   Josef Bacik   fs: introduce ino...
1818
1819
  
  	return ret;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1820
  }
870f48179   Christoph Hellwig   [PATCH] replace i...
1821
  EXPORT_SYMBOL(file_update_time);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1822
1823
1824
1825
1826
1827
1828
1829
1830
  
  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
1831
  EXPORT_SYMBOL(inode_needs_sync);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1832
  /*
168a9fd6a   Miklos Szeredi   [PATCH] __wait_on...
1833
1834
1835
1836
1837
1838
   * 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
1839
   * It doesn't matter if I_NEW is not set initially, a call to
250df6ed2   Dave Chinner   fs: protect inode...
1840
1841
   * wake_up_bit(&inode->i_state, __I_NEW) after removing from the hash list
   * will DTRT.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1842
1843
1844
1845
   */
  static void __wait_on_freeing_inode(struct inode *inode)
  {
  	wait_queue_head_t *wq;
eaff8079d   Christoph Hellwig   kill I_LOCK
1846
1847
  	DEFINE_WAIT_BIT(wait, &inode->i_state, __I_NEW);
  	wq = bit_waitqueue(&inode->i_state, __I_NEW);
214171361   Ingo Molnar   sched/wait: Stand...
1848
  	prepare_to_wait(wq, &wait.wq_entry, TASK_UNINTERRUPTIBLE);
250df6ed2   Dave Chinner   fs: protect inode...
1849
  	spin_unlock(&inode->i_lock);
67a23c494   Dave Chinner   fs: rename inode_...
1850
  	spin_unlock(&inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1851
  	schedule();
214171361   Ingo Molnar   sched/wait: Stand...
1852
  	finish_wait(wq, &wait.wq_entry);
67a23c494   Dave Chinner   fs: rename inode_...
1853
  	spin_lock(&inode_hash_lock);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1854
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
  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)
  {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
  	/* 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,
3d375d785   Pavel Tatashin   mm: update caller...
1881
  					HASH_EARLY | HASH_ZERO,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1882
1883
  					&i_hash_shift,
  					&i_hash_mask,
31fe62b95   Tim Bird   mm: add a low lim...
1884
  					0,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1885
  					0);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1886
  }
74bf17cff   Denis Cheng   fs: remove the un...
1887
  void __init inode_init(void)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1888
  {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1889
  	/* inode slab cache */
b0196009d   Paul Jackson   [PATCH] cpuset me...
1890
1891
1892
1893
  	inode_cachep = kmem_cache_create("inode_cache",
  					 sizeof(struct inode),
  					 0,
  					 (SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|
5d097056c   Vladimir Davydov   kmemcg: account c...
1894
  					 SLAB_MEM_SPREAD|SLAB_ACCOUNT),
20c2df83d   Paul Mundt   mm: Remove slab d...
1895
  					 init_once);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
  
  	/* 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,
3d375d785   Pavel Tatashin   mm: update caller...
1906
  					HASH_ZERO,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1907
1908
  					&i_hash_shift,
  					&i_hash_mask,
31fe62b95   Tim Bird   mm: add a low lim...
1909
  					0,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1910
  					0);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
  }
  
  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))
599a0ac14   Al Viro   pipe: fold file_o...
1923
  		inode->i_fop = &pipefifo_fops;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1924
  	else if (S_ISSOCK(mode))
bd9b51e79   Al Viro   make default ->i_...
1925
  		;	/* leave it no_open_fops */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1926
  	else
af0d9ae81   Manish Katiyar   fs/inode.c: add d...
1927
1928
1929
1930
  		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
1931
1932
  }
  EXPORT_SYMBOL(init_special_inode);
a1bd120d1   Dmitry Monakhov   vfs: Add inode ui...
1933
1934
  
  /**
eaae668d0   Ben Hutchings   fs/inode: Fix ker...
1935
   * inode_init_owner - Init uid,gid,mode for new inode according to posix standards
a1bd120d1   Dmitry Monakhov   vfs: Add inode ui...
1936
1937
1938
1939
1940
   * @inode: New inode
   * @dir: Directory inode
   * @mode: mode of the new inode
   */
  void inode_init_owner(struct inode *inode, const struct inode *dir,
62bb10917   Al Viro   switch inode_init...
1941
  			umode_t mode)
a1bd120d1   Dmitry Monakhov   vfs: Add inode ui...
1942
1943
1944
1945
  {
  	inode->i_uid = current_fsuid();
  	if (dir && dir->i_mode & S_ISGID) {
  		inode->i_gid = dir->i_gid;
298243a5f   Linus Torvalds   Fix up non-direct...
1946
1947
  
  		/* Directories are special, and always inherit S_ISGID */
a1bd120d1   Dmitry Monakhov   vfs: Add inode ui...
1948
1949
  		if (S_ISDIR(mode))
  			mode |= S_ISGID;
298243a5f   Linus Torvalds   Fix up non-direct...
1950
1951
1952
1953
  		else if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP) &&
  			 !in_group_p(inode->i_gid) &&
  			 !capable_wrt_inode_uidgid(dir, CAP_FSETID))
  			mode &= ~S_ISGID;
a1bd120d1   Dmitry Monakhov   vfs: Add inode ui...
1954
1955
1956
1957
1958
  	} else
  		inode->i_gid = current_fsgid();
  	inode->i_mode = mode;
  }
  EXPORT_SYMBOL(inode_init_owner);
e795b7179   Serge E. Hallyn   userns: userns: c...
1959

2e1496707   Serge E. Hallyn   userns: rename is...
1960
1961
1962
1963
  /**
   * inode_owner_or_capable - check current task permissions to inode
   * @inode: inode being checked
   *
23adbe12e   Andy Lutomirski   fs,userns: Change...
1964
1965
   * Return true if current either has CAP_FOWNER in a namespace with the
   * inode owner uid mapped, or owns the file.
e795b7179   Serge E. Hallyn   userns: userns: c...
1966
   */
2e1496707   Serge E. Hallyn   userns: rename is...
1967
  bool inode_owner_or_capable(const struct inode *inode)
e795b7179   Serge E. Hallyn   userns: userns: c...
1968
  {
23adbe12e   Andy Lutomirski   fs,userns: Change...
1969
  	struct user_namespace *ns;
92361636e   Eric W. Biederman   userns: Store uid...
1970
  	if (uid_eq(current_fsuid(), inode->i_uid))
e795b7179   Serge E. Hallyn   userns: userns: c...
1971
  		return true;
23adbe12e   Andy Lutomirski   fs,userns: Change...
1972
1973
  
  	ns = current_user_ns();
cc658db47   Kees Cook   fs: Reorder inode...
1974
  	if (kuid_has_mapping(ns, inode->i_uid) && ns_capable(ns, CAP_FOWNER))
e795b7179   Serge E. Hallyn   userns: userns: c...
1975
1976
1977
  		return true;
  	return false;
  }
2e1496707   Serge E. Hallyn   userns: rename is...
1978
  EXPORT_SYMBOL(inode_owner_or_capable);
1d59d61f6   Trond Myklebust   NFS: Ensure that ...
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
  
  /*
   * Direct i/o helper functions
   */
  static void __inode_dio_wait(struct inode *inode)
  {
  	wait_queue_head_t *wq = bit_waitqueue(&inode->i_state, __I_DIO_WAKEUP);
  	DEFINE_WAIT_BIT(q, &inode->i_state, __I_DIO_WAKEUP);
  
  	do {
214171361   Ingo Molnar   sched/wait: Stand...
1989
  		prepare_to_wait(wq, &q.wq_entry, TASK_UNINTERRUPTIBLE);
1d59d61f6   Trond Myklebust   NFS: Ensure that ...
1990
1991
1992
  		if (atomic_read(&inode->i_dio_count))
  			schedule();
  	} while (atomic_read(&inode->i_dio_count));
214171361   Ingo Molnar   sched/wait: Stand...
1993
  	finish_wait(wq, &q.wq_entry);
1d59d61f6   Trond Myklebust   NFS: Ensure that ...
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
  }
  
  /**
   * inode_dio_wait - wait for outstanding DIO requests to finish
   * @inode: inode to wait for
   *
   * Waits for all pending direct I/O requests to finish so that we can
   * proceed with a truncate or equivalent operation.
   *
   * Must be called under a lock that serializes taking new references
   * to i_dio_count, usually by inode->i_mutex.
   */
  void inode_dio_wait(struct inode *inode)
  {
  	if (atomic_read(&inode->i_dio_count))
  		__inode_dio_wait(inode);
  }
  EXPORT_SYMBOL(inode_dio_wait);
  
  /*
5f16f3225   Theodore Ts'o   ext4: atomically ...
2014
2015
2016
2017
2018
2019
2020
   * inode_set_flags - atomically set some inode flags
   *
   * Note: the caller should be holding i_mutex, or else be sure that
   * they have exclusive access to the inode structure (i.e., while the
   * inode is being instantiated).  The reason for the cmpxchg() loop
   * --- which wouldn't be necessary if all code paths which modify
   * i_flags actually followed this rule, is that there is at least one
5fa8e0a1c   Jan Kara   fs: Rename file_r...
2021
2022
   * code path which doesn't today so we use cmpxchg() out of an abundance
   * of caution.
5f16f3225   Theodore Ts'o   ext4: atomically ...
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
   *
   * In the long run, i_mutex is overkill, and we should probably look
   * at using the i_lock spinlock to protect i_flags, and then make sure
   * it is so documented in include/linux/fs.h and that all code follows
   * the locking convention!!
   */
  void inode_set_flags(struct inode *inode, unsigned int flags,
  		     unsigned int mask)
  {
  	unsigned int old_flags, new_flags;
  
  	WARN_ON_ONCE(flags & ~mask);
  	do {
  		old_flags = ACCESS_ONCE(inode->i_flags);
  		new_flags = (old_flags & ~mask) | flags;
  	} while (unlikely(cmpxchg(&inode->i_flags, old_flags,
  				  new_flags) != old_flags));
  }
  EXPORT_SYMBOL(inode_set_flags);
21fc61c73   Al Viro   don't put symlink...
2042
2043
2044
2045
2046
2047
  
  void inode_nohighmem(struct inode *inode)
  {
  	mapping_set_gfp_mask(inode->i_mapping, GFP_USER);
  }
  EXPORT_SYMBOL(inode_nohighmem);
3cd886666   Deepa Dinamani   vfs: Add current_...
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
  
  /**
   * current_time - Return FS time
   * @inode: inode.
   *
   * Return the current time truncated to the time granularity supported by
   * the fs.
   *
   * Note that inode and inode->sb cannot be NULL.
   * Otherwise, the function warns and returns time without truncation.
   */
  struct timespec current_time(struct inode *inode)
  {
  	struct timespec now = current_kernel_time();
  
  	if (unlikely(!inode->i_sb)) {
  		WARN(1, "current_time() called with uninitialized super_block in the inode");
  		return now;
  	}
  
  	return timespec_trunc(now, inode->i_sb->s_time_gran);
  }
  EXPORT_SYMBOL(current_time);