1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <linux/kernel.h>
17#include <linux/spinlock.h>
18#include <linux/sched.h>
19#include <linux/fs.h>
20#include <linux/mm.h>
21#include <linux/writeback.h>
22#include <linux/blkdev.h>
23#include <linux/backing-dev.h>
24#include <linux/buffer_head.h>
25
26extern struct super_block *blockdev_superblock;
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48void __mark_inode_dirty(struct inode *inode, int flags)
49{
50 struct super_block *sb = inode->i_sb;
51
52 if (!sb)
53 return;
54
55
56
57
58
59 if (flags & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) {
60 if (sb->s_op && sb->s_op->dirty_inode)
61 sb->s_op->dirty_inode(inode);
62 }
63
64
65 if ((inode->i_state & flags) == flags)
66 return;
67
68 spin_lock(&inode_lock);
69 if ((inode->i_state & flags) != flags) {
70 const int was_dirty = inode->i_state & I_DIRTY;
71 struct address_space *mapping = inode->i_mapping;
72
73 inode->i_state |= flags;
74
75 if (!was_dirty)
76 mapping->dirtied_when = jiffies;
77
78
79
80
81
82
83 if (inode->i_state & I_LOCK)
84 goto out;
85
86
87
88
89
90 if (list_empty(&inode->i_hash) && !S_ISBLK(inode->i_mode))
91 goto out;
92
93
94
95
96
97 if (!was_dirty)
98 list_move(&inode->i_list, &sb->s_dirty);
99 }
100out:
101 spin_unlock(&inode_lock);
102}
103
104static void write_inode(struct inode *inode, int sync)
105{
106 if (inode->i_sb->s_op && inode->i_sb->s_op->write_inode &&
107 !is_bad_inode(inode))
108 inode->i_sb->s_op->write_inode(inode, sync);
109}
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129static void
130__sync_single_inode(struct inode *inode, int wait,
131 struct writeback_control *wbc)
132{
133 unsigned dirty;
134 unsigned long orig_dirtied_when;
135 struct address_space *mapping = inode->i_mapping;
136 struct super_block *sb = inode->i_sb;
137
138 BUG_ON(inode->i_state & I_LOCK);
139
140
141 dirty = inode->i_state & I_DIRTY;
142 inode->i_state |= I_LOCK;
143 inode->i_state &= ~I_DIRTY;
144 orig_dirtied_when = mapping->dirtied_when;
145 mapping->dirtied_when = 0;
146 spin_unlock(&inode_lock);
147
148 do_writepages(mapping, wbc);
149
150
151 if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC))
152 write_inode(inode, wait);
153
154 if (wait)
155 filemap_fdatawait(mapping);
156
157 spin_lock(&inode_lock);
158
159 inode->i_state &= ~I_LOCK;
160 if (!(inode->i_state & I_FREEING)) {
161 list_del(&inode->i_list);
162 if (inode->i_state & I_DIRTY) {
163 list_add(&inode->i_list, &sb->s_dirty);
164 } else {
165 if (!list_empty(&mapping->dirty_pages) ||
166 !list_empty(&mapping->io_pages)) {
167
168 mapping->dirtied_when = orig_dirtied_when;
169 inode->i_state |= I_DIRTY_PAGES;
170 list_add_tail(&inode->i_list, &sb->s_dirty);
171 } else if (atomic_read(&inode->i_count)) {
172 list_add(&inode->i_list, &inode_in_use);
173 } else {
174 list_add(&inode->i_list, &inode_unused);
175 }
176 }
177 }
178 wake_up_inode(inode);
179}
180
181
182
183
184static void
185__writeback_single_inode(struct inode *inode, int sync,
186 struct writeback_control *wbc)
187{
188 if (current_is_pdflush() && (inode->i_state & I_LOCK))
189 return;
190
191 while (inode->i_state & I_LOCK) {
192 __iget(inode);
193 spin_unlock(&inode_lock);
194 __wait_on_inode(inode);
195 iput(inode);
196 spin_lock(&inode_lock);
197 }
198 __sync_single_inode(inode, sync, wbc);
199}
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230static void
231sync_sb_inodes(struct super_block *sb, struct writeback_control *wbc)
232{
233 struct list_head *tmp;
234 struct list_head *head;
235 const unsigned long start = jiffies;
236
237 list_splice_init(&sb->s_dirty, &sb->s_io);
238 head = &sb->s_io;
239 while ((tmp = head->prev) != head) {
240 struct inode *inode = list_entry(tmp, struct inode, i_list);
241 struct address_space *mapping = inode->i_mapping;
242 struct backing_dev_info *bdi;
243 int really_sync;
244
245 if (wbc->bdi && mapping->backing_dev_info != wbc->bdi) {
246 if (sb != blockdev_superblock)
247 break;
248 list_move(&inode->i_list, &sb->s_dirty);
249 continue;
250 }
251
252
253 if (time_after(mapping->dirtied_when, start))
254 break;
255
256 if (wbc->older_than_this && time_after(mapping->dirtied_when,
257 *wbc->older_than_this))
258 goto out;
259
260 bdi = mapping->backing_dev_info;
261 if (current_is_pdflush() && !writeback_acquire(bdi))
262 break;
263
264 really_sync = (wbc->sync_mode == WB_SYNC_ALL);
265 BUG_ON(inode->i_state & I_FREEING);
266 __iget(inode);
267 list_move(&inode->i_list, &sb->s_dirty);
268 __writeback_single_inode(inode, really_sync, wbc);
269 if (wbc->sync_mode == WB_SYNC_HOLD) {
270 mapping->dirtied_when = jiffies;
271 list_move(&inode->i_list, &sb->s_dirty);
272 }
273 if (current_is_pdflush())
274 writeback_release(bdi);
275 spin_unlock(&inode_lock);
276 iput(inode);
277 spin_lock(&inode_lock);
278 if (wbc->nr_to_write <= 0)
279 break;
280 }
281out:
282
283
284
285 return;
286}
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307void
308writeback_inodes(struct writeback_control *wbc)
309{
310 struct super_block *sb;
311
312 spin_lock(&inode_lock);
313 spin_lock(&sb_lock);
314 sb = sb_entry(super_blocks.prev);
315 for (; sb != sb_entry(&super_blocks); sb = sb_entry(sb->s_list.prev)) {
316 if (!list_empty(&sb->s_dirty) || !list_empty(&sb->s_io)) {
317 spin_unlock(&sb_lock);
318 sync_sb_inodes(sb, wbc);
319 spin_lock(&sb_lock);
320 }
321 if (wbc->nr_to_write <= 0)
322 break;
323 }
324 spin_unlock(&sb_lock);
325 spin_unlock(&inode_lock);
326}
327
328
329
330
331
332
333
334
335
336void sync_inodes_sb(struct super_block *sb, int wait)
337{
338 struct page_state ps;
339 struct writeback_control wbc = {
340 .bdi = NULL,
341 .sync_mode = wait ? WB_SYNC_ALL : WB_SYNC_HOLD,
342 .older_than_this = NULL,
343 .nr_to_write = 0,
344 };
345
346 get_page_state(&ps);
347 wbc.nr_to_write = ps.nr_dirty + ps.nr_dirty / 4;
348 spin_lock(&inode_lock);
349 sync_sb_inodes(sb, &wbc);
350 spin_unlock(&inode_lock);
351}
352
353
354
355
356static void set_sb_syncing(int val)
357{
358 struct super_block *sb;
359 spin_lock(&sb_lock);
360 sb = sb_entry(super_blocks.prev);
361 for (; sb != sb_entry(&super_blocks); sb = sb_entry(sb->s_list.prev)) {
362 sb->s_syncing = val;
363 }
364 spin_unlock(&sb_lock);
365}
366
367
368
369
370static struct super_block *get_super_to_sync(void)
371{
372 struct super_block *sb;
373restart:
374 spin_lock(&sb_lock);
375 sb = sb_entry(super_blocks.prev);
376 for (; sb != sb_entry(&super_blocks); sb = sb_entry(sb->s_list.prev)) {
377 if (sb->s_syncing)
378 continue;
379 sb->s_syncing = 1;
380 sb->s_count++;
381 spin_unlock(&sb_lock);
382 down_read(&sb->s_umount);
383 if (!sb->s_root) {
384 drop_super(sb);
385 goto restart;
386 }
387 return sb;
388 }
389 spin_unlock(&sb_lock);
390 return NULL;
391}
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411void sync_inodes(int wait)
412{
413 struct super_block *sb;
414
415 set_sb_syncing(0);
416 while ((sb = get_super_to_sync()) != NULL) {
417 sync_inodes_sb(sb, 0);
418 sync_blockdev(sb->s_bdev);
419 drop_super(sb);
420 }
421 if (wait) {
422 set_sb_syncing(0);
423 while ((sb = get_super_to_sync()) != NULL) {
424 sync_inodes_sb(sb, 1);
425 sync_blockdev(sb->s_bdev);
426 drop_super(sb);
427 }
428 }
429}
430
431
432
433
434
435
436
437
438
439
440void write_inode_now(struct inode *inode, int sync)
441{
442 struct writeback_control wbc = {
443 .nr_to_write = LONG_MAX,
444 };
445
446 spin_lock(&inode_lock);
447 __writeback_single_inode(inode, sync, &wbc);
448 spin_unlock(&inode_lock);
449 if (sync)
450 wait_on_inode(inode);
451}
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469int generic_osync_inode(struct inode *inode, int what)
470{
471 int err = 0;
472 int need_write_inode_now = 0;
473 int err2;
474
475 if (what & OSYNC_DATA)
476 err = filemap_fdatawrite(inode->i_mapping);
477 if (what & (OSYNC_METADATA|OSYNC_DATA)) {
478 err2 = sync_mapping_buffers(inode->i_mapping);
479 if (!err)
480 err = err2;
481 }
482 if (what & OSYNC_DATA) {
483 err2 = filemap_fdatawait(inode->i_mapping);
484 if (!err)
485 err = err2;
486 }
487
488 spin_lock(&inode_lock);
489 if ((inode->i_state & I_DIRTY) &&
490 ((what & OSYNC_INODE) || (inode->i_state & I_DIRTY_DATASYNC)))
491 need_write_inode_now = 1;
492 spin_unlock(&inode_lock);
493
494 if (need_write_inode_now)
495 write_inode_now(inode, 1);
496 else
497 wait_on_inode(inode);
498
499 return err;
500}
501
502
503
504
505
506
507
508
509
510
511
512
513
514int writeback_acquire(struct backing_dev_info *bdi)
515{
516 return !test_and_set_bit(BDI_pdflush, &bdi->state);
517}
518
519
520
521
522
523
524int writeback_in_progress(struct backing_dev_info *bdi)
525{
526 return test_bit(BDI_pdflush, &bdi->state);
527}
528
529
530
531
532
533void writeback_release(struct backing_dev_info *bdi)
534{
535 BUG_ON(!writeback_in_progress(bdi));
536 clear_bit(BDI_pdflush, &bdi->state);
537}
538