1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <linux/kernel.h>
17#include <linux/module.h>
18#include <linux/spinlock.h>
19#include <linux/sched.h>
20#include <linux/fs.h>
21#include <linux/mm.h>
22#include <linux/writeback.h>
23#include <linux/blkdev.h>
24#include <linux/backing-dev.h>
25#include <linux/buffer_head.h>
26#include "internal.h"
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41static int writeback_acquire(struct backing_dev_info *bdi)
42{
43 return !test_and_set_bit(BDI_pdflush, &bdi->state);
44}
45
46
47
48
49
50
51
52int writeback_in_progress(struct backing_dev_info *bdi)
53{
54 return test_bit(BDI_pdflush, &bdi->state);
55}
56
57
58
59
60
61static void writeback_release(struct backing_dev_info *bdi)
62{
63 BUG_ON(!writeback_in_progress(bdi));
64 clear_bit(BDI_pdflush, &bdi->state);
65}
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94void __mark_inode_dirty(struct inode *inode, int flags)
95{
96 struct super_block *sb = inode->i_sb;
97
98
99
100
101
102 if (flags & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) {
103 if (sb->s_op->dirty_inode)
104 sb->s_op->dirty_inode(inode);
105 }
106
107
108
109
110
111 smp_mb();
112
113
114 if ((inode->i_state & flags) == flags)
115 return;
116
117 if (unlikely(block_dump)) {
118 struct dentry *dentry = NULL;
119 const char *name = "?";
120
121 if (!list_empty(&inode->i_dentry)) {
122 dentry = list_entry(inode->i_dentry.next,
123 struct dentry, d_alias);
124 if (dentry && dentry->d_name.name)
125 name = (const char *) dentry->d_name.name;
126 }
127
128 if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev"))
129 printk(KERN_DEBUG
130 "%s(%d): dirtied inode %lu (%s) on %s\n",
131 current->comm, task_pid_nr(current), inode->i_ino,
132 name, inode->i_sb->s_id);
133 }
134
135 spin_lock(&inode_lock);
136 if ((inode->i_state & flags) != flags) {
137 const int was_dirty = inode->i_state & I_DIRTY;
138
139 inode->i_state |= flags;
140
141
142
143
144
145
146 if (inode->i_state & I_SYNC)
147 goto out;
148
149
150
151
152
153 if (!S_ISBLK(inode->i_mode)) {
154 if (hlist_unhashed(&inode->i_hash))
155 goto out;
156 }
157 if (inode->i_state & (I_FREEING|I_CLEAR))
158 goto out;
159
160
161
162
163
164 if (!was_dirty) {
165 inode->dirtied_when = jiffies;
166 list_move(&inode->i_list, &sb->s_dirty);
167 }
168 }
169out:
170 spin_unlock(&inode_lock);
171}
172
173EXPORT_SYMBOL(__mark_inode_dirty);
174
175static int write_inode(struct inode *inode, int sync)
176{
177 if (inode->i_sb->s_op->write_inode && !is_bad_inode(inode))
178 return inode->i_sb->s_op->write_inode(inode, sync);
179 return 0;
180}
181
182
183
184
185
186
187
188
189
190
191static void redirty_tail(struct inode *inode)
192{
193 struct super_block *sb = inode->i_sb;
194
195 if (!list_empty(&sb->s_dirty)) {
196 struct inode *tail_inode;
197
198 tail_inode = list_entry(sb->s_dirty.next, struct inode, i_list);
199 if (!time_after_eq(inode->dirtied_when,
200 tail_inode->dirtied_when))
201 inode->dirtied_when = jiffies;
202 }
203 list_move(&inode->i_list, &sb->s_dirty);
204}
205
206
207
208
209static void requeue_io(struct inode *inode)
210{
211 list_move(&inode->i_list, &inode->i_sb->s_more_io);
212}
213
214static void inode_sync_complete(struct inode *inode)
215{
216
217
218
219 smp_mb();
220 wake_up_bit(&inode->i_state, __I_SYNC);
221}
222
223
224
225
226static void move_expired_inodes(struct list_head *delaying_queue,
227 struct list_head *dispatch_queue,
228 unsigned long *older_than_this)
229{
230 while (!list_empty(delaying_queue)) {
231 struct inode *inode = list_entry(delaying_queue->prev,
232 struct inode, i_list);
233 if (older_than_this &&
234 time_after(inode->dirtied_when, *older_than_this))
235 break;
236 list_move(&inode->i_list, dispatch_queue);
237 }
238}
239
240
241
242
243static void queue_io(struct super_block *sb,
244 unsigned long *older_than_this)
245{
246 list_splice_init(&sb->s_more_io, sb->s_io.prev);
247 move_expired_inodes(&sb->s_dirty, &sb->s_io, older_than_this);
248}
249
250int sb_has_dirty_inodes(struct super_block *sb)
251{
252 return !list_empty(&sb->s_dirty) ||
253 !list_empty(&sb->s_io) ||
254 !list_empty(&sb->s_more_io);
255}
256EXPORT_SYMBOL(sb_has_dirty_inodes);
257
258
259
260
261
262
263
264
265
266
267
268static int
269__sync_single_inode(struct inode *inode, struct writeback_control *wbc)
270{
271 unsigned dirty;
272 struct address_space *mapping = inode->i_mapping;
273 int wait = wbc->sync_mode == WB_SYNC_ALL;
274 int ret;
275
276 BUG_ON(inode->i_state & I_SYNC);
277
278
279 dirty = inode->i_state & I_DIRTY;
280 inode->i_state |= I_SYNC;
281 inode->i_state &= ~I_DIRTY;
282
283 spin_unlock(&inode_lock);
284
285 ret = do_writepages(mapping, wbc);
286
287
288 if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) {
289 int err = write_inode(inode, wait);
290 if (ret == 0)
291 ret = err;
292 }
293
294 if (wait) {
295 int err = filemap_fdatawait(mapping);
296 if (ret == 0)
297 ret = err;
298 }
299
300 spin_lock(&inode_lock);
301 inode->i_state &= ~I_SYNC;
302 if (!(inode->i_state & I_FREEING)) {
303 if (!(inode->i_state & I_DIRTY) &&
304 mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319 if (wbc->for_kupdate) {
320
321
322
323
324
325 inode->i_state |= I_DIRTY_PAGES;
326 if (wbc->nr_to_write <= 0) {
327
328
329
330 requeue_io(inode);
331 } else {
332
333
334
335 redirty_tail(inode);
336 }
337 } else {
338
339
340
341
342
343
344
345 inode->i_state |= I_DIRTY_PAGES;
346 redirty_tail(inode);
347 }
348 } else if (inode->i_state & I_DIRTY) {
349
350
351
352
353 redirty_tail(inode);
354 } else if (atomic_read(&inode->i_count)) {
355
356
357
358 list_move(&inode->i_list, &inode_in_use);
359 } else {
360
361
362
363 list_move(&inode->i_list, &inode_unused);
364 }
365 }
366 inode_sync_complete(inode);
367 return ret;
368}
369
370
371
372
373
374
375static int
376__writeback_single_inode(struct inode *inode, struct writeback_control *wbc)
377{
378 wait_queue_head_t *wqh;
379
380 if (!atomic_read(&inode->i_count))
381 WARN_ON(!(inode->i_state & (I_WILL_FREE|I_FREEING)));
382 else
383 WARN_ON(inode->i_state & I_WILL_FREE);
384
385 if ((wbc->sync_mode != WB_SYNC_ALL) && (inode->i_state & I_SYNC)) {
386
387
388
389
390
391
392
393 requeue_io(inode);
394 return 0;
395 }
396
397
398
399
400 if (inode->i_state & I_SYNC) {
401 DEFINE_WAIT_BIT(wq, &inode->i_state, __I_SYNC);
402
403 wqh = bit_waitqueue(&inode->i_state, __I_SYNC);
404 do {
405 spin_unlock(&inode_lock);
406 __wait_on_bit(wqh, &wq, inode_wait,
407 TASK_UNINTERRUPTIBLE);
408 spin_lock(&inode_lock);
409 } while (inode->i_state & I_SYNC);
410 }
411 return __sync_single_inode(inode, wbc);
412}
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444static void
445sync_sb_inodes(struct super_block *sb, struct writeback_control *wbc)
446{
447 const unsigned long start = jiffies;
448
449 if (!wbc->for_kupdate || list_empty(&sb->s_io))
450 queue_io(sb, wbc->older_than_this);
451
452 while (!list_empty(&sb->s_io)) {
453 struct inode *inode = list_entry(sb->s_io.prev,
454 struct inode, i_list);
455 struct address_space *mapping = inode->i_mapping;
456 struct backing_dev_info *bdi = mapping->backing_dev_info;
457 long pages_skipped;
458
459 if (!bdi_cap_writeback_dirty(bdi)) {
460 redirty_tail(inode);
461 if (sb_is_blkdev_sb(sb)) {
462
463
464
465
466 continue;
467 }
468
469
470
471
472
473 break;
474 }
475
476 if (wbc->nonblocking && bdi_write_congested(bdi)) {
477 wbc->encountered_congestion = 1;
478 if (!sb_is_blkdev_sb(sb))
479 break;
480 requeue_io(inode);
481 continue;
482 }
483
484 if (wbc->bdi && bdi != wbc->bdi) {
485 if (!sb_is_blkdev_sb(sb))
486 break;
487 requeue_io(inode);
488 continue;
489 }
490
491
492 if (time_after(inode->dirtied_when, start))
493 break;
494
495
496 if (current_is_pdflush() && !writeback_acquire(bdi))
497 break;
498
499 BUG_ON(inode->i_state & I_FREEING);
500 __iget(inode);
501 pages_skipped = wbc->pages_skipped;
502 __writeback_single_inode(inode, wbc);
503 if (wbc->sync_mode == WB_SYNC_HOLD) {
504 inode->dirtied_when = jiffies;
505 list_move(&inode->i_list, &sb->s_dirty);
506 }
507 if (current_is_pdflush())
508 writeback_release(bdi);
509 if (wbc->pages_skipped != pages_skipped) {
510
511
512
513
514 redirty_tail(inode);
515 }
516 spin_unlock(&inode_lock);
517 iput(inode);
518 cond_resched();
519 spin_lock(&inode_lock);
520 if (wbc->nr_to_write <= 0) {
521 wbc->more_io = 1;
522 break;
523 }
524 if (!list_empty(&sb->s_more_io))
525 wbc->more_io = 1;
526 }
527 return;
528}
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549void
550writeback_inodes(struct writeback_control *wbc)
551{
552 struct super_block *sb;
553
554 might_sleep();
555 spin_lock(&sb_lock);
556restart:
557 list_for_each_entry_reverse(sb, &super_blocks, s_list) {
558 if (sb_has_dirty_inodes(sb)) {
559
560 sb->s_count++;
561 spin_unlock(&sb_lock);
562
563
564
565
566
567 if (down_read_trylock(&sb->s_umount)) {
568 if (sb->s_root) {
569 spin_lock(&inode_lock);
570 sync_sb_inodes(sb, wbc);
571 spin_unlock(&inode_lock);
572 }
573 up_read(&sb->s_umount);
574 }
575 spin_lock(&sb_lock);
576 if (__put_super_and_need_restart(sb))
577 goto restart;
578 }
579 if (wbc->nr_to_write <= 0)
580 break;
581 }
582 spin_unlock(&sb_lock);
583}
584
585
586
587
588
589
590
591
592
593
594
595
596void sync_inodes_sb(struct super_block *sb, int wait)
597{
598 struct writeback_control wbc = {
599 .sync_mode = wait ? WB_SYNC_ALL : WB_SYNC_HOLD,
600 .range_start = 0,
601 .range_end = LLONG_MAX,
602 };
603 unsigned long nr_dirty = global_page_state(NR_FILE_DIRTY);
604 unsigned long nr_unstable = global_page_state(NR_UNSTABLE_NFS);
605
606 wbc.nr_to_write = nr_dirty + nr_unstable +
607 (inodes_stat.nr_inodes - inodes_stat.nr_unused) +
608 nr_dirty + nr_unstable;
609 wbc.nr_to_write += wbc.nr_to_write / 2;
610 spin_lock(&inode_lock);
611 sync_sb_inodes(sb, &wbc);
612 spin_unlock(&inode_lock);
613}
614
615
616
617
618static void set_sb_syncing(int val)
619{
620 struct super_block *sb;
621 spin_lock(&sb_lock);
622 list_for_each_entry_reverse(sb, &super_blocks, s_list)
623 sb->s_syncing = val;
624 spin_unlock(&sb_lock);
625}
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646static void __sync_inodes(int wait)
647{
648 struct super_block *sb;
649
650 spin_lock(&sb_lock);
651restart:
652 list_for_each_entry(sb, &super_blocks, s_list) {
653 if (sb->s_syncing)
654 continue;
655 sb->s_syncing = 1;
656 sb->s_count++;
657 spin_unlock(&sb_lock);
658 down_read(&sb->s_umount);
659 if (sb->s_root) {
660 sync_inodes_sb(sb, wait);
661 sync_blockdev(sb->s_bdev);
662 }
663 up_read(&sb->s_umount);
664 spin_lock(&sb_lock);
665 if (__put_super_and_need_restart(sb))
666 goto restart;
667 }
668 spin_unlock(&sb_lock);
669}
670
671void sync_inodes(int wait)
672{
673 set_sb_syncing(0);
674 __sync_inodes(0);
675
676 if (wait) {
677 set_sb_syncing(0);
678 __sync_inodes(1);
679 }
680}
681
682
683
684
685
686
687
688
689
690
691
692int write_inode_now(struct inode *inode, int sync)
693{
694 int ret;
695 struct writeback_control wbc = {
696 .nr_to_write = LONG_MAX,
697 .sync_mode = sync ? WB_SYNC_ALL : WB_SYNC_NONE,
698 .range_start = 0,
699 .range_end = LLONG_MAX,
700 };
701
702 if (!mapping_cap_writeback_dirty(inode->i_mapping))
703 wbc.nr_to_write = 0;
704
705 might_sleep();
706 spin_lock(&inode_lock);
707 ret = __writeback_single_inode(inode, &wbc);
708 spin_unlock(&inode_lock);
709 if (sync)
710 inode_sync_wait(inode);
711 return ret;
712}
713EXPORT_SYMBOL(write_inode_now);
714
715
716
717
718
719
720
721
722
723
724
725
726int sync_inode(struct inode *inode, struct writeback_control *wbc)
727{
728 int ret;
729
730 spin_lock(&inode_lock);
731 ret = __writeback_single_inode(inode, wbc);
732 spin_unlock(&inode_lock);
733 return ret;
734}
735EXPORT_SYMBOL(sync_inode);
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754int generic_osync_inode(struct inode *inode, struct address_space *mapping, int what)
755{
756 int err = 0;
757 int need_write_inode_now = 0;
758 int err2;
759
760 if (what & OSYNC_DATA)
761 err = filemap_fdatawrite(mapping);
762 if (what & (OSYNC_METADATA|OSYNC_DATA)) {
763 err2 = sync_mapping_buffers(mapping);
764 if (!err)
765 err = err2;
766 }
767 if (what & OSYNC_DATA) {
768 err2 = filemap_fdatawait(mapping);
769 if (!err)
770 err = err2;
771 }
772
773 spin_lock(&inode_lock);
774 if ((inode->i_state & I_DIRTY) &&
775 ((what & OSYNC_INODE) || (inode->i_state & I_DIRTY_DATASYNC)))
776 need_write_inode_now = 1;
777 spin_unlock(&inode_lock);
778
779 if (need_write_inode_now) {
780 err2 = write_inode_now(inode, 1);
781 if (!err)
782 err = err2;
783 }
784 else
785 inode_sync_wait(inode);
786
787 return err;
788}
789EXPORT_SYMBOL(generic_osync_inode);
790