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
48
49
50
51
52
53
54
55void __mark_inode_dirty(struct inode *inode, int flags)
56{
57 struct super_block *sb = inode->i_sb;
58
59
60
61
62
63 if (flags & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) {
64 if (sb->s_op->dirty_inode)
65 sb->s_op->dirty_inode(inode);
66 }
67
68
69
70
71
72 smp_mb();
73
74
75 if ((inode->i_state & flags) == flags)
76 return;
77
78 if (unlikely(block_dump)) {
79 struct dentry *dentry = NULL;
80 const char *name = "?";
81
82 if (!list_empty(&inode->i_dentry)) {
83 dentry = list_entry(inode->i_dentry.next,
84 struct dentry, d_alias);
85 if (dentry && dentry->d_name.name)
86 name = (const char *) dentry->d_name.name;
87 }
88
89 if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev"))
90 printk(KERN_DEBUG
91 "%s(%d): dirtied inode %lu (%s) on %s\n",
92 current->comm, current->pid, inode->i_ino,
93 name, inode->i_sb->s_id);
94 }
95
96 spin_lock(&inode_lock);
97 if ((inode->i_state & flags) != flags) {
98 const int was_dirty = inode->i_state & I_DIRTY;
99
100 inode->i_state |= flags;
101
102
103
104
105
106
107 if (inode->i_state & I_LOCK)
108 goto out;
109
110
111
112
113
114 if (!S_ISBLK(inode->i_mode)) {
115 if (hlist_unhashed(&inode->i_hash))
116 goto out;
117 }
118 if (inode->i_state & (I_FREEING|I_CLEAR))
119 goto out;
120
121
122
123
124
125 if (!was_dirty) {
126 inode->dirtied_when = jiffies;
127 list_move(&inode->i_list, &sb->s_dirty);
128 }
129 }
130out:
131 spin_unlock(&inode_lock);
132}
133
134EXPORT_SYMBOL(__mark_inode_dirty);
135
136static int write_inode(struct inode *inode, int sync)
137{
138 if (inode->i_sb->s_op->write_inode && !is_bad_inode(inode))
139 return inode->i_sb->s_op->write_inode(inode, sync);
140 return 0;
141}
142
143
144
145
146
147
148
149
150
151
152
153static int
154__sync_single_inode(struct inode *inode, struct writeback_control *wbc)
155{
156 unsigned dirty;
157 struct address_space *mapping = inode->i_mapping;
158 struct super_block *sb = inode->i_sb;
159 int wait = wbc->sync_mode == WB_SYNC_ALL;
160 int ret;
161
162 BUG_ON(inode->i_state & I_LOCK);
163
164
165 dirty = inode->i_state & I_DIRTY;
166 inode->i_state |= I_LOCK;
167 inode->i_state &= ~I_DIRTY;
168
169 spin_unlock(&inode_lock);
170
171 ret = do_writepages(mapping, wbc);
172
173
174 if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) {
175 int err = write_inode(inode, wait);
176 if (ret == 0)
177 ret = err;
178 }
179
180 if (wait) {
181 int err = filemap_fdatawait(mapping);
182 if (ret == 0)
183 ret = err;
184 }
185
186 spin_lock(&inode_lock);
187 inode->i_state &= ~I_LOCK;
188 if (!(inode->i_state & I_FREEING)) {
189 if (!(inode->i_state & I_DIRTY) &&
190 mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
191
192
193
194
195
196 if (wbc->for_kupdate) {
197
198
199
200
201
202
203 inode->i_state |= I_DIRTY_PAGES;
204 list_move_tail(&inode->i_list, &sb->s_dirty);
205 } else {
206
207
208
209
210
211
212
213 inode->i_state |= I_DIRTY_PAGES;
214 inode->dirtied_when = jiffies;
215 list_move(&inode->i_list, &sb->s_dirty);
216 }
217 } else if (inode->i_state & I_DIRTY) {
218
219
220
221
222 list_move(&inode->i_list, &sb->s_dirty);
223 } else if (atomic_read(&inode->i_count)) {
224
225
226
227 list_move(&inode->i_list, &inode_in_use);
228 } else {
229
230
231
232 list_move(&inode->i_list, &inode_unused);
233 inodes_stat.nr_unused++;
234 }
235 }
236 wake_up_inode(inode);
237 return ret;
238}
239
240
241
242
243static int
244__writeback_single_inode(struct inode *inode,
245 struct writeback_control *wbc)
246{
247 wait_queue_head_t *wqh;
248
249 if ((wbc->sync_mode != WB_SYNC_ALL) && (inode->i_state & I_LOCK)) {
250 list_move(&inode->i_list, &inode->i_sb->s_dirty);
251 return 0;
252 }
253
254
255
256
257 if (inode->i_state & I_LOCK) {
258 DEFINE_WAIT_BIT(wq, &inode->i_state, __I_LOCK);
259
260 wqh = bit_waitqueue(&inode->i_state, __I_LOCK);
261 do {
262 __iget(inode);
263 spin_unlock(&inode_lock);
264 __wait_on_bit(wqh, &wq, inode_wait,
265 TASK_UNINTERRUPTIBLE);
266 iput(inode);
267 spin_lock(&inode_lock);
268 } while (inode->i_state & I_LOCK);
269 }
270 return __sync_single_inode(inode, wbc);
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
303static void
304sync_sb_inodes(struct super_block *sb, struct writeback_control *wbc)
305{
306 const unsigned long start = jiffies;
307
308 if (!wbc->for_kupdate || list_empty(&sb->s_io))
309 list_splice_init(&sb->s_dirty, &sb->s_io);
310
311 while (!list_empty(&sb->s_io)) {
312 struct inode *inode = list_entry(sb->s_io.prev,
313 struct inode, i_list);
314 struct address_space *mapping = inode->i_mapping;
315 struct backing_dev_info *bdi = mapping->backing_dev_info;
316 long pages_skipped;
317
318 if (bdi->memory_backed) {
319 list_move(&inode->i_list, &sb->s_dirty);
320 if (sb == blockdev_superblock) {
321
322
323
324
325 continue;
326 }
327
328
329
330
331
332 break;
333 }
334
335 if (wbc->nonblocking && bdi_write_congested(bdi)) {
336 wbc->encountered_congestion = 1;
337 if (sb != blockdev_superblock)
338 break;
339 list_move(&inode->i_list, &sb->s_dirty);
340 continue;
341 }
342
343 if (wbc->bdi && bdi != wbc->bdi) {
344 if (sb != blockdev_superblock)
345 break;
346 list_move(&inode->i_list, &sb->s_dirty);
347 continue;
348 }
349
350
351 if (time_after(inode->dirtied_when, start))
352 break;
353
354
355 if (wbc->older_than_this && time_after(inode->dirtied_when,
356 *wbc->older_than_this))
357 break;
358
359
360 if (current_is_pdflush() && !writeback_acquire(bdi))
361 break;
362
363 BUG_ON(inode->i_state & I_FREEING);
364 __iget(inode);
365 pages_skipped = wbc->pages_skipped;
366 __writeback_single_inode(inode, wbc);
367 if (wbc->sync_mode == WB_SYNC_HOLD) {
368 inode->dirtied_when = jiffies;
369 list_move(&inode->i_list, &sb->s_dirty);
370 }
371 if (current_is_pdflush())
372 writeback_release(bdi);
373 if (wbc->pages_skipped != pages_skipped) {
374
375
376
377
378 list_move(&inode->i_list, &sb->s_dirty);
379 }
380 spin_unlock(&inode_lock);
381 iput(inode);
382 spin_lock(&inode_lock);
383 if (wbc->nr_to_write <= 0)
384 break;
385 }
386 return;
387}
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408void
409writeback_inodes(struct writeback_control *wbc)
410{
411 struct super_block *sb;
412
413 might_sleep();
414 spin_lock(&sb_lock);
415restart:
416 sb = sb_entry(super_blocks.prev);
417 for (; sb != sb_entry(&super_blocks); sb = sb_entry(sb->s_list.prev)) {
418 if (!list_empty(&sb->s_dirty) || !list_empty(&sb->s_io)) {
419
420 sb->s_count++;
421 spin_unlock(&sb_lock);
422
423
424
425
426
427 if (down_read_trylock(&sb->s_umount)) {
428 if (sb->s_root) {
429 spin_lock(&inode_lock);
430 sync_sb_inodes(sb, wbc);
431 spin_unlock(&inode_lock);
432 }
433 up_read(&sb->s_umount);
434 }
435 spin_lock(&sb_lock);
436 if (__put_super_and_need_restart(sb))
437 goto restart;
438 }
439 if (wbc->nr_to_write <= 0)
440 break;
441 }
442 spin_unlock(&sb_lock);
443}
444
445
446
447
448
449
450
451
452
453
454
455
456void sync_inodes_sb(struct super_block *sb, int wait)
457{
458 struct writeback_control wbc = {
459 .sync_mode = wait ? WB_SYNC_ALL : WB_SYNC_HOLD,
460 };
461 unsigned long nr_dirty = read_page_state(nr_dirty);
462 unsigned long nr_unstable = read_page_state(nr_unstable);
463
464 wbc.nr_to_write = nr_dirty + nr_unstable +
465 (inodes_stat.nr_inodes - inodes_stat.nr_unused) +
466 nr_dirty + nr_unstable;
467 wbc.nr_to_write += wbc.nr_to_write / 2;
468 spin_lock(&inode_lock);
469 sync_sb_inodes(sb, &wbc);
470 spin_unlock(&inode_lock);
471}
472
473
474
475
476static void set_sb_syncing(int val)
477{
478 struct super_block *sb;
479 spin_lock(&sb_lock);
480 sb = sb_entry(super_blocks.prev);
481 for (; sb != sb_entry(&super_blocks); sb = sb_entry(sb->s_list.prev)) {
482 sb->s_syncing = val;
483 }
484 spin_unlock(&sb_lock);
485}
486
487
488
489
490static struct super_block *get_super_to_sync(void)
491{
492 struct super_block *sb;
493restart:
494 spin_lock(&sb_lock);
495 sb = sb_entry(super_blocks.prev);
496 for (; sb != sb_entry(&super_blocks); sb = sb_entry(sb->s_list.prev)) {
497 if (sb->s_syncing)
498 continue;
499 sb->s_syncing = 1;
500 sb->s_count++;
501 spin_unlock(&sb_lock);
502 down_read(&sb->s_umount);
503 if (!sb->s_root) {
504 drop_super(sb);
505 goto restart;
506 }
507 return sb;
508 }
509 spin_unlock(&sb_lock);
510 return NULL;
511}
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531void sync_inodes(int wait)
532{
533 struct super_block *sb;
534
535 set_sb_syncing(0);
536 while ((sb = get_super_to_sync()) != NULL) {
537 sync_inodes_sb(sb, 0);
538 sync_blockdev(sb->s_bdev);
539 drop_super(sb);
540 }
541 if (wait) {
542 set_sb_syncing(0);
543 while ((sb = get_super_to_sync()) != NULL) {
544 sync_inodes_sb(sb, 1);
545 sync_blockdev(sb->s_bdev);
546 drop_super(sb);
547 }
548 }
549}
550
551
552
553
554
555
556
557
558
559
560void write_inode_now(struct inode *inode, int sync)
561{
562 struct writeback_control wbc = {
563 .nr_to_write = LONG_MAX,
564 .sync_mode = WB_SYNC_ALL,
565 };
566
567 if (inode->i_mapping->backing_dev_info->memory_backed)
568 return;
569
570 might_sleep();
571 spin_lock(&inode_lock);
572 __writeback_single_inode(inode, &wbc);
573 spin_unlock(&inode_lock);
574 if (sync)
575 wait_on_inode(inode);
576}
577EXPORT_SYMBOL(write_inode_now);
578
579
580
581
582
583
584
585
586
587
588
589
590int sync_inode(struct inode *inode, struct writeback_control *wbc)
591{
592 int ret;
593
594 spin_lock(&inode_lock);
595 ret = __writeback_single_inode(inode, wbc);
596 spin_unlock(&inode_lock);
597 return ret;
598}
599EXPORT_SYMBOL(sync_inode);
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617int generic_osync_inode(struct inode *inode, struct address_space *mapping, int what)
618{
619 int err = 0;
620 int need_write_inode_now = 0;
621 int err2;
622
623 current->flags |= PF_SYNCWRITE;
624 if (what & OSYNC_DATA)
625 err = filemap_fdatawrite(mapping);
626 if (what & (OSYNC_METADATA|OSYNC_DATA)) {
627 err2 = sync_mapping_buffers(mapping);
628 if (!err)
629 err = err2;
630 }
631 if (what & OSYNC_DATA) {
632 err2 = filemap_fdatawait(mapping);
633 if (!err)
634 err = err2;
635 }
636 current->flags &= ~PF_SYNCWRITE;
637
638 spin_lock(&inode_lock);
639 if ((inode->i_state & I_DIRTY) &&
640 ((what & OSYNC_INODE) || (inode->i_state & I_DIRTY_DATASYNC)))
641 need_write_inode_now = 1;
642 spin_unlock(&inode_lock);
643
644 if (need_write_inode_now)
645 write_inode_now(inode, 1);
646 else
647 wait_on_inode(inode);
648
649 return err;
650}
651
652EXPORT_SYMBOL(generic_osync_inode);
653
654
655
656
657
658
659
660
661
662
663
664
665
666int writeback_acquire(struct backing_dev_info *bdi)
667{
668 return !test_and_set_bit(BDI_pdflush, &bdi->state);
669}
670
671
672
673
674
675
676int writeback_in_progress(struct backing_dev_info *bdi)
677{
678 return test_bit(BDI_pdflush, &bdi->state);
679}
680
681
682
683
684
685void writeback_release(struct backing_dev_info *bdi)
686{
687 BUG_ON(!writeback_in_progress(bdi));
688 clear_bit(BDI_pdflush, &bdi->state);
689}
690