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