1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#include <linux/kernel.h>
22#include <linux/syscalls.h>
23#include <linux/fs.h>
24#include <linux/mm.h>
25#include <linux/percpu.h>
26#include <linux/slab.h>
27#include <linux/capability.h>
28#include <linux/blkdev.h>
29#include <linux/file.h>
30#include <linux/quotaops.h>
31#include <linux/highmem.h>
32#include <linux/module.h>
33#include <linux/writeback.h>
34#include <linux/hash.h>
35#include <linux/suspend.h>
36#include <linux/buffer_head.h>
37#include <linux/task_io_accounting_ops.h>
38#include <linux/bio.h>
39#include <linux/notifier.h>
40#include <linux/cpu.h>
41#include <linux/bitops.h>
42#include <linux/mpage.h>
43#include <linux/bit_spinlock.h>
44
45static int fsync_buffers_list(spinlock_t *lock, struct list_head *list);
46
47#define BH_ENTRY(list) list_entry((list), struct buffer_head, b_assoc_buffers)
48
49inline void
50init_buffer(struct buffer_head *bh, bh_end_io_t *handler, void *private)
51{
52 bh->b_end_io = handler;
53 bh->b_private = private;
54}
55
56static int sync_buffer(void *word)
57{
58 struct block_device *bd;
59 struct buffer_head *bh
60 = container_of(word, struct buffer_head, b_state);
61
62 smp_mb();
63 bd = bh->b_bdev;
64 if (bd)
65 blk_run_address_space(bd->bd_inode->i_mapping);
66 io_schedule();
67 return 0;
68}
69
70void fastcall __lock_buffer(struct buffer_head *bh)
71{
72 wait_on_bit_lock(&bh->b_state, BH_Lock, sync_buffer,
73 TASK_UNINTERRUPTIBLE);
74}
75EXPORT_SYMBOL(__lock_buffer);
76
77void fastcall unlock_buffer(struct buffer_head *bh)
78{
79 smp_mb__before_clear_bit();
80 clear_buffer_locked(bh);
81 smp_mb__after_clear_bit();
82 wake_up_bit(&bh->b_state, BH_Lock);
83}
84
85
86
87
88
89
90void __wait_on_buffer(struct buffer_head * bh)
91{
92 wait_on_bit(&bh->b_state, BH_Lock, sync_buffer, TASK_UNINTERRUPTIBLE);
93}
94
95static void
96__clear_page_buffers(struct page *page)
97{
98 ClearPagePrivate(page);
99 set_page_private(page, 0);
100 page_cache_release(page);
101}
102
103static void buffer_io_error(struct buffer_head *bh)
104{
105 char b[BDEVNAME_SIZE];
106
107 printk(KERN_ERR "Buffer I/O error on device %s, logical block %Lu\n",
108 bdevname(bh->b_bdev, b),
109 (unsigned long long)bh->b_blocknr);
110}
111
112
113
114
115
116void end_buffer_read_sync(struct buffer_head *bh, int uptodate)
117{
118 if (uptodate) {
119 set_buffer_uptodate(bh);
120 } else {
121
122 clear_buffer_uptodate(bh);
123 }
124 unlock_buffer(bh);
125 put_bh(bh);
126}
127
128void end_buffer_write_sync(struct buffer_head *bh, int uptodate)
129{
130 char b[BDEVNAME_SIZE];
131
132 if (uptodate) {
133 set_buffer_uptodate(bh);
134 } else {
135 if (!buffer_eopnotsupp(bh) && printk_ratelimit()) {
136 buffer_io_error(bh);
137 printk(KERN_WARNING "lost page write due to "
138 "I/O error on %s\n",
139 bdevname(bh->b_bdev, b));
140 }
141 set_buffer_write_io_error(bh);
142 clear_buffer_uptodate(bh);
143 }
144 unlock_buffer(bh);
145 put_bh(bh);
146}
147
148
149
150
151
152int sync_blockdev(struct block_device *bdev)
153{
154 int ret = 0;
155
156 if (bdev)
157 ret = filemap_write_and_wait(bdev->bd_inode->i_mapping);
158 return ret;
159}
160EXPORT_SYMBOL(sync_blockdev);
161
162
163
164
165
166
167int fsync_bdev(struct block_device *bdev)
168{
169 struct super_block *sb = get_super(bdev);
170 if (sb) {
171 int res = fsync_super(sb);
172 drop_super(sb);
173 return res;
174 }
175 return sync_blockdev(bdev);
176}
177
178
179
180
181
182
183
184
185
186
187struct super_block *freeze_bdev(struct block_device *bdev)
188{
189 struct super_block *sb;
190
191 down(&bdev->bd_mount_sem);
192 sb = get_super(bdev);
193 if (sb && !(sb->s_flags & MS_RDONLY)) {
194 sb->s_frozen = SB_FREEZE_WRITE;
195 smp_wmb();
196
197 __fsync_super(sb);
198
199 sb->s_frozen = SB_FREEZE_TRANS;
200 smp_wmb();
201
202 sync_blockdev(sb->s_bdev);
203
204 if (sb->s_op->write_super_lockfs)
205 sb->s_op->write_super_lockfs(sb);
206 }
207
208 sync_blockdev(bdev);
209 return sb;
210}
211EXPORT_SYMBOL(freeze_bdev);
212
213
214
215
216
217
218
219
220void thaw_bdev(struct block_device *bdev, struct super_block *sb)
221{
222 if (sb) {
223 BUG_ON(sb->s_bdev != bdev);
224
225 if (sb->s_op->unlockfs)
226 sb->s_op->unlockfs(sb);
227 sb->s_frozen = SB_UNFROZEN;
228 smp_wmb();
229 wake_up(&sb->s_wait_unfrozen);
230 drop_super(sb);
231 }
232
233 up(&bdev->bd_mount_sem);
234}
235EXPORT_SYMBOL(thaw_bdev);
236
237
238
239
240
241
242
243
244
245
246
247
248static struct buffer_head *
249__find_get_block_slow(struct block_device *bdev, sector_t block)
250{
251 struct inode *bd_inode = bdev->bd_inode;
252 struct address_space *bd_mapping = bd_inode->i_mapping;
253 struct buffer_head *ret = NULL;
254 pgoff_t index;
255 struct buffer_head *bh;
256 struct buffer_head *head;
257 struct page *page;
258 int all_mapped = 1;
259
260 index = block >> (PAGE_CACHE_SHIFT - bd_inode->i_blkbits);
261 page = find_get_page(bd_mapping, index);
262 if (!page)
263 goto out;
264
265 spin_lock(&bd_mapping->private_lock);
266 if (!page_has_buffers(page))
267 goto out_unlock;
268 head = page_buffers(page);
269 bh = head;
270 do {
271 if (bh->b_blocknr == block) {
272 ret = bh;
273 get_bh(bh);
274 goto out_unlock;
275 }
276 if (!buffer_mapped(bh))
277 all_mapped = 0;
278 bh = bh->b_this_page;
279 } while (bh != head);
280
281
282
283
284
285
286 if (all_mapped) {
287 printk("__find_get_block_slow() failed. "
288 "block=%llu, b_blocknr=%llu\n",
289 (unsigned long long)block,
290 (unsigned long long)bh->b_blocknr);
291 printk("b_state=0x%08lx, b_size=%zu\n",
292 bh->b_state, bh->b_size);
293 printk("device blocksize: %d\n", 1 << bd_inode->i_blkbits);
294 }
295out_unlock:
296 spin_unlock(&bd_mapping->private_lock);
297 page_cache_release(page);
298out:
299 return ret;
300}
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334void invalidate_bdev(struct block_device *bdev)
335{
336 struct address_space *mapping = bdev->bd_inode->i_mapping;
337
338 if (mapping->nrpages == 0)
339 return;
340
341 invalidate_bh_lrus();
342 invalidate_mapping_pages(mapping, 0, -1);
343}
344
345
346
347
348static void free_more_memory(void)
349{
350 struct zone **zones;
351 pg_data_t *pgdat;
352
353 wakeup_pdflush(1024);
354 yield();
355
356 for_each_online_pgdat(pgdat) {
357 zones = pgdat->node_zonelists[gfp_zone(GFP_NOFS)].zones;
358 if (*zones)
359 try_to_free_pages(zones, GFP_NOFS);
360 }
361}
362
363
364
365
366
367static void end_buffer_async_read(struct buffer_head *bh, int uptodate)
368{
369 unsigned long flags;
370 struct buffer_head *first;
371 struct buffer_head *tmp;
372 struct page *page;
373 int page_uptodate = 1;
374
375 BUG_ON(!buffer_async_read(bh));
376
377 page = bh->b_page;
378 if (uptodate) {
379 set_buffer_uptodate(bh);
380 } else {
381 clear_buffer_uptodate(bh);
382 if (printk_ratelimit())
383 buffer_io_error(bh);
384 SetPageError(page);
385 }
386
387
388
389
390
391
392 first = page_buffers(page);
393 local_irq_save(flags);
394 bit_spin_lock(BH_Uptodate_Lock, &first->b_state);
395 clear_buffer_async_read(bh);
396 unlock_buffer(bh);
397 tmp = bh;
398 do {
399 if (!buffer_uptodate(tmp))
400 page_uptodate = 0;
401 if (buffer_async_read(tmp)) {
402 BUG_ON(!buffer_locked(tmp));
403 goto still_busy;
404 }
405 tmp = tmp->b_this_page;
406 } while (tmp != bh);
407 bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);
408 local_irq_restore(flags);
409
410
411
412
413
414 if (page_uptodate && !PageError(page))
415 SetPageUptodate(page);
416 unlock_page(page);
417 return;
418
419still_busy:
420 bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);
421 local_irq_restore(flags);
422 return;
423}
424
425
426
427
428
429static void end_buffer_async_write(struct buffer_head *bh, int uptodate)
430{
431 char b[BDEVNAME_SIZE];
432 unsigned long flags;
433 struct buffer_head *first;
434 struct buffer_head *tmp;
435 struct page *page;
436
437 BUG_ON(!buffer_async_write(bh));
438
439 page = bh->b_page;
440 if (uptodate) {
441 set_buffer_uptodate(bh);
442 } else {
443 if (printk_ratelimit()) {
444 buffer_io_error(bh);
445 printk(KERN_WARNING "lost page write due to "
446 "I/O error on %s\n",
447 bdevname(bh->b_bdev, b));
448 }
449 set_bit(AS_EIO, &page->mapping->flags);
450 set_buffer_write_io_error(bh);
451 clear_buffer_uptodate(bh);
452 SetPageError(page);
453 }
454
455 first = page_buffers(page);
456 local_irq_save(flags);
457 bit_spin_lock(BH_Uptodate_Lock, &first->b_state);
458
459 clear_buffer_async_write(bh);
460 unlock_buffer(bh);
461 tmp = bh->b_this_page;
462 while (tmp != bh) {
463 if (buffer_async_write(tmp)) {
464 BUG_ON(!buffer_locked(tmp));
465 goto still_busy;
466 }
467 tmp = tmp->b_this_page;
468 }
469 bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);
470 local_irq_restore(flags);
471 end_page_writeback(page);
472 return;
473
474still_busy:
475 bit_spin_unlock(BH_Uptodate_Lock, &first->b_state);
476 local_irq_restore(flags);
477 return;
478}
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501static void mark_buffer_async_read(struct buffer_head *bh)
502{
503 bh->b_end_io = end_buffer_async_read;
504 set_buffer_async_read(bh);
505}
506
507void mark_buffer_async_write(struct buffer_head *bh)
508{
509 bh->b_end_io = end_buffer_async_write;
510 set_buffer_async_write(bh);
511}
512EXPORT_SYMBOL(mark_buffer_async_write);
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567static inline void __remove_assoc_queue(struct buffer_head *bh)
568{
569 list_del_init(&bh->b_assoc_buffers);
570 WARN_ON(!bh->b_assoc_map);
571 if (buffer_write_io_error(bh))
572 set_bit(AS_EIO, &bh->b_assoc_map->flags);
573 bh->b_assoc_map = NULL;
574}
575
576int inode_has_buffers(struct inode *inode)
577{
578 return !list_empty(&inode->i_data.private_list);
579}
580
581
582
583
584
585
586
587
588
589
590
591static int osync_buffers_list(spinlock_t *lock, struct list_head *list)
592{
593 struct buffer_head *bh;
594 struct list_head *p;
595 int err = 0;
596
597 spin_lock(lock);
598repeat:
599 list_for_each_prev(p, list) {
600 bh = BH_ENTRY(p);
601 if (buffer_locked(bh)) {
602 get_bh(bh);
603 spin_unlock(lock);
604 wait_on_buffer(bh);
605 if (!buffer_uptodate(bh))
606 err = -EIO;
607 brelse(bh);
608 spin_lock(lock);
609 goto repeat;
610 }
611 }
612 spin_unlock(lock);
613 return err;
614}
615
616
617
618
619
620
621
622
623
624
625
626
627
628int sync_mapping_buffers(struct address_space *mapping)
629{
630 struct address_space *buffer_mapping = mapping->assoc_mapping;
631
632 if (buffer_mapping == NULL || list_empty(&mapping->private_list))
633 return 0;
634
635 return fsync_buffers_list(&buffer_mapping->private_lock,
636 &mapping->private_list);
637}
638EXPORT_SYMBOL(sync_mapping_buffers);
639
640
641
642
643
644
645
646void write_boundary_block(struct block_device *bdev,
647 sector_t bblock, unsigned blocksize)
648{
649 struct buffer_head *bh = __find_get_block(bdev, bblock + 1, blocksize);
650 if (bh) {
651 if (buffer_dirty(bh))
652 ll_rw_block(WRITE, 1, &bh);
653 put_bh(bh);
654 }
655}
656
657void mark_buffer_dirty_inode(struct buffer_head *bh, struct inode *inode)
658{
659 struct address_space *mapping = inode->i_mapping;
660 struct address_space *buffer_mapping = bh->b_page->mapping;
661
662 mark_buffer_dirty(bh);
663 if (!mapping->assoc_mapping) {
664 mapping->assoc_mapping = buffer_mapping;
665 } else {
666 BUG_ON(mapping->assoc_mapping != buffer_mapping);
667 }
668 if (list_empty(&bh->b_assoc_buffers)) {
669 spin_lock(&buffer_mapping->private_lock);
670 list_move_tail(&bh->b_assoc_buffers,
671 &mapping->private_list);
672 bh->b_assoc_map = mapping;
673 spin_unlock(&buffer_mapping->private_lock);
674 }
675}
676EXPORT_SYMBOL(mark_buffer_dirty_inode);
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703int __set_page_dirty_buffers(struct page *page)
704{
705 struct address_space * const mapping = page_mapping(page);
706
707 if (unlikely(!mapping))
708 return !TestSetPageDirty(page);
709
710 spin_lock(&mapping->private_lock);
711 if (page_has_buffers(page)) {
712 struct buffer_head *head = page_buffers(page);
713 struct buffer_head *bh = head;
714
715 do {
716 set_buffer_dirty(bh);
717 bh = bh->b_this_page;
718 } while (bh != head);
719 }
720 spin_unlock(&mapping->private_lock);
721
722 if (TestSetPageDirty(page))
723 return 0;
724
725 write_lock_irq(&mapping->tree_lock);
726 if (page->mapping) {
727 if (mapping_cap_account_dirty(mapping)) {
728 __inc_zone_page_state(page, NR_FILE_DIRTY);
729 task_io_account_write(PAGE_CACHE_SIZE);
730 }
731 radix_tree_tag_set(&mapping->page_tree,
732 page_index(page), PAGECACHE_TAG_DIRTY);
733 }
734 write_unlock_irq(&mapping->tree_lock);
735 __mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
736 return 1;
737}
738EXPORT_SYMBOL(__set_page_dirty_buffers);
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759static int fsync_buffers_list(spinlock_t *lock, struct list_head *list)
760{
761 struct buffer_head *bh;
762 struct list_head tmp;
763 int err = 0, err2;
764
765 INIT_LIST_HEAD(&tmp);
766
767 spin_lock(lock);
768 while (!list_empty(list)) {
769 bh = BH_ENTRY(list->next);
770 __remove_assoc_queue(bh);
771 if (buffer_dirty(bh) || buffer_locked(bh)) {
772 list_add(&bh->b_assoc_buffers, &tmp);
773 if (buffer_dirty(bh)) {
774 get_bh(bh);
775 spin_unlock(lock);
776
777
778
779
780
781
782 ll_rw_block(SWRITE, 1, &bh);
783 brelse(bh);
784 spin_lock(lock);
785 }
786 }
787 }
788
789 while (!list_empty(&tmp)) {
790 bh = BH_ENTRY(tmp.prev);
791 list_del_init(&bh->b_assoc_buffers);
792 get_bh(bh);
793 spin_unlock(lock);
794 wait_on_buffer(bh);
795 if (!buffer_uptodate(bh))
796 err = -EIO;
797 brelse(bh);
798 spin_lock(lock);
799 }
800
801 spin_unlock(lock);
802 err2 = osync_buffers_list(lock, list);
803 if (err)
804 return err;
805 else
806 return err2;
807}
808
809
810
811
812
813
814
815
816
817
818void invalidate_inode_buffers(struct inode *inode)
819{
820 if (inode_has_buffers(inode)) {
821 struct address_space *mapping = &inode->i_data;
822 struct list_head *list = &mapping->private_list;
823 struct address_space *buffer_mapping = mapping->assoc_mapping;
824
825 spin_lock(&buffer_mapping->private_lock);
826 while (!list_empty(list))
827 __remove_assoc_queue(BH_ENTRY(list->next));
828 spin_unlock(&buffer_mapping->private_lock);
829 }
830}
831
832
833
834
835
836
837
838int remove_inode_buffers(struct inode *inode)
839{
840 int ret = 1;
841
842 if (inode_has_buffers(inode)) {
843 struct address_space *mapping = &inode->i_data;
844 struct list_head *list = &mapping->private_list;
845 struct address_space *buffer_mapping = mapping->assoc_mapping;
846
847 spin_lock(&buffer_mapping->private_lock);
848 while (!list_empty(list)) {
849 struct buffer_head *bh = BH_ENTRY(list->next);
850 if (buffer_dirty(bh)) {
851 ret = 0;
852 break;
853 }
854 __remove_assoc_queue(bh);
855 }
856 spin_unlock(&buffer_mapping->private_lock);
857 }
858 return ret;
859}
860
861
862
863
864
865
866
867
868
869
870struct buffer_head *alloc_page_buffers(struct page *page, unsigned long size,
871 int retry)
872{
873 struct buffer_head *bh, *head;
874 long offset;
875
876try_again:
877 head = NULL;
878 offset = PAGE_SIZE;
879 while ((offset -= size) >= 0) {
880 bh = alloc_buffer_head(GFP_NOFS);
881 if (!bh)
882 goto no_grow;
883
884 bh->b_bdev = NULL;
885 bh->b_this_page = head;
886 bh->b_blocknr = -1;
887 head = bh;
888
889 bh->b_state = 0;
890 atomic_set(&bh->b_count, 0);
891 bh->b_private = NULL;
892 bh->b_size = size;
893
894
895 set_bh_page(bh, page, offset);
896
897 init_buffer(bh, NULL, NULL);
898 }
899 return head;
900
901
902
903no_grow:
904 if (head) {
905 do {
906 bh = head;
907 head = head->b_this_page;
908 free_buffer_head(bh);
909 } while (head);
910 }
911
912
913
914
915
916
917
918 if (!retry)
919 return NULL;
920
921
922
923
924
925
926
927 free_more_memory();
928 goto try_again;
929}
930EXPORT_SYMBOL_GPL(alloc_page_buffers);
931
932static inline void
933link_dev_buffers(struct page *page, struct buffer_head *head)
934{
935 struct buffer_head *bh, *tail;
936
937 bh = head;
938 do {
939 tail = bh;
940 bh = bh->b_this_page;
941 } while (bh);
942 tail->b_this_page = head;
943 attach_page_buffers(page, head);
944}
945
946
947
948
949static void
950init_page_buffers(struct page *page, struct block_device *bdev,
951 sector_t block, int size)
952{
953 struct buffer_head *head = page_buffers(page);
954 struct buffer_head *bh = head;
955 int uptodate = PageUptodate(page);
956
957 do {
958 if (!buffer_mapped(bh)) {
959 init_buffer(bh, NULL, NULL);
960 bh->b_bdev = bdev;
961 bh->b_blocknr = block;
962 if (uptodate)
963 set_buffer_uptodate(bh);
964 set_buffer_mapped(bh);
965 }
966 block++;
967 bh = bh->b_this_page;
968 } while (bh != head);
969}
970
971
972
973
974
975
976static struct page *
977grow_dev_page(struct block_device *bdev, sector_t block,
978 pgoff_t index, int size)
979{
980 struct inode *inode = bdev->bd_inode;
981 struct page *page;
982 struct buffer_head *bh;
983
984 page = find_or_create_page(inode->i_mapping, index,
985 mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS);
986 if (!page)
987 return NULL;
988
989 BUG_ON(!PageLocked(page));
990
991 if (page_has_buffers(page)) {
992 bh = page_buffers(page);
993 if (bh->b_size == size) {
994 init_page_buffers(page, bdev, block, size);
995 return page;
996 }
997 if (!try_to_free_buffers(page))
998 goto failed;
999 }
1000
1001
1002
1003
1004 bh = alloc_page_buffers(page, size, 0);
1005 if (!bh)
1006 goto failed;
1007
1008
1009
1010
1011
1012
1013 spin_lock(&inode->i_mapping->private_lock);
1014 link_dev_buffers(page, bh);
1015 init_page_buffers(page, bdev, block, size);
1016 spin_unlock(&inode->i_mapping->private_lock);
1017 return page;
1018
1019failed:
1020 BUG();
1021 unlock_page(page);
1022 page_cache_release(page);
1023 return NULL;
1024}
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035static int
1036grow_buffers(struct block_device *bdev, sector_t block, int size)
1037{
1038 struct page *page;
1039 pgoff_t index;
1040 int sizebits;
1041
1042 sizebits = -1;
1043 do {
1044 sizebits++;
1045 } while ((size << sizebits) < PAGE_SIZE);
1046
1047 index = block >> sizebits;
1048
1049
1050
1051
1052
1053 if (unlikely(index != block >> sizebits)) {
1054 char b[BDEVNAME_SIZE];
1055
1056 printk(KERN_ERR "%s: requested out-of-range block %llu for "
1057 "device %s\n",
1058 __FUNCTION__, (unsigned long long)block,
1059 bdevname(bdev, b));
1060 return -EIO;
1061 }
1062 block = index << sizebits;
1063
1064 page = grow_dev_page(bdev, block, index, size);
1065 if (!page)
1066 return 0;
1067 unlock_page(page);
1068 page_cache_release(page);
1069 return 1;
1070}
1071
1072static struct buffer_head *
1073__getblk_slow(struct block_device *bdev, sector_t block, int size)
1074{
1075
1076 if (unlikely(size & (bdev_hardsect_size(bdev)-1) ||
1077 (size < 512 || size > PAGE_SIZE))) {
1078 printk(KERN_ERR "getblk(): invalid block size %d requested\n",
1079 size);
1080 printk(KERN_ERR "hardsect size: %d\n",
1081 bdev_hardsect_size(bdev));
1082
1083 dump_stack();
1084 return NULL;
1085 }
1086
1087 for (;;) {
1088 struct buffer_head * bh;
1089 int ret;
1090
1091 bh = __find_get_block(bdev, block, size);
1092 if (bh)
1093 return bh;
1094
1095 ret = grow_buffers(bdev, block, size);
1096 if (ret < 0)
1097 return NULL;
1098 if (ret == 0)
1099 free_more_memory();
1100 }
1101}
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138void fastcall mark_buffer_dirty(struct buffer_head *bh)
1139{
1140 if (!buffer_dirty(bh) && !test_set_buffer_dirty(bh))
1141 __set_page_dirty_nobuffers(bh->b_page);
1142}
1143
1144
1145
1146
1147
1148
1149
1150
1151void __brelse(struct buffer_head * buf)
1152{
1153 if (atomic_read(&buf->b_count)) {
1154 put_bh(buf);
1155 return;
1156 }
1157 printk(KERN_ERR "VFS: brelse: Trying to free free buffer\n");
1158 WARN_ON(1);
1159}
1160
1161
1162
1163
1164
1165void __bforget(struct buffer_head *bh)
1166{
1167 clear_buffer_dirty(bh);
1168 if (!list_empty(&bh->b_assoc_buffers)) {
1169 struct address_space *buffer_mapping = bh->b_page->mapping;
1170
1171 spin_lock(&buffer_mapping->private_lock);
1172 list_del_init(&bh->b_assoc_buffers);
1173 bh->b_assoc_map = NULL;
1174 spin_unlock(&buffer_mapping->private_lock);
1175 }
1176 __brelse(bh);
1177}
1178
1179static struct buffer_head *__bread_slow(struct buffer_head *bh)
1180{
1181 lock_buffer(bh);
1182 if (buffer_uptodate(bh)) {
1183 unlock_buffer(bh);
1184 return bh;
1185 } else {
1186 get_bh(bh);
1187 bh->b_end_io = end_buffer_read_sync;
1188 submit_bh(READ, bh);
1189 wait_on_buffer(bh);
1190 if (buffer_uptodate(bh))
1191 return bh;
1192 }
1193 brelse(bh);
1194 return NULL;
1195}
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211#define BH_LRU_SIZE 8
1212
1213struct bh_lru {
1214 struct buffer_head *bhs[BH_LRU_SIZE];
1215};
1216
1217static DEFINE_PER_CPU(struct bh_lru, bh_lrus) = {{ NULL }};
1218
1219#ifdef CONFIG_SMP
1220#define bh_lru_lock() local_irq_disable()
1221#define bh_lru_unlock() local_irq_enable()
1222#else
1223#define bh_lru_lock() preempt_disable()
1224#define bh_lru_unlock() preempt_enable()
1225#endif
1226
1227static inline void check_irqs_on(void)
1228{
1229#ifdef irqs_disabled
1230 BUG_ON(irqs_disabled());
1231#endif
1232}
1233
1234
1235
1236
1237static void bh_lru_install(struct buffer_head *bh)
1238{
1239 struct buffer_head *evictee = NULL;
1240 struct bh_lru *lru;
1241
1242 check_irqs_on();
1243 bh_lru_lock();
1244 lru = &__get_cpu_var(bh_lrus);
1245 if (lru->bhs[0] != bh) {
1246 struct buffer_head *bhs[BH_LRU_SIZE];
1247 int in;
1248 int out = 0;
1249
1250 get_bh(bh);
1251 bhs[out++] = bh;
1252 for (in = 0; in < BH_LRU_SIZE; in++) {
1253 struct buffer_head *bh2 = lru->bhs[in];
1254
1255 if (bh2 == bh) {
1256 __brelse(bh2);
1257 } else {
1258 if (out >= BH_LRU_SIZE) {
1259 BUG_ON(evictee != NULL);
1260 evictee = bh2;
1261 } else {
1262 bhs[out++] = bh2;
1263 }
1264 }
1265 }
1266 while (out < BH_LRU_SIZE)
1267 bhs[out++] = NULL;
1268 memcpy(lru->bhs, bhs, sizeof(bhs));
1269 }
1270 bh_lru_unlock();
1271
1272 if (evictee)
1273 __brelse(evictee);
1274}
1275
1276
1277
1278
1279static struct buffer_head *
1280lookup_bh_lru(struct block_device *bdev, sector_t block, unsigned size)
1281{
1282 struct buffer_head *ret = NULL;
1283 struct bh_lru *lru;
1284 unsigned int i;
1285
1286 check_irqs_on();
1287 bh_lru_lock();
1288 lru = &__get_cpu_var(bh_lrus);
1289 for (i = 0; i < BH_LRU_SIZE; i++) {
1290 struct buffer_head *bh = lru->bhs[i];
1291
1292 if (bh && bh->b_bdev == bdev &&
1293 bh->b_blocknr == block && bh->b_size == size) {
1294 if (i) {
1295 while (i) {
1296 lru->bhs[i] = lru->bhs[i - 1];
1297 i--;
1298 }
1299 lru->bhs[0] = bh;
1300 }
1301 get_bh(bh);
1302 ret = bh;
1303 break;
1304 }
1305 }
1306 bh_lru_unlock();
1307 return ret;
1308}
1309
1310
1311
1312
1313
1314
1315struct buffer_head *
1316__find_get_block(struct block_device *bdev, sector_t block, unsigned size)
1317{
1318 struct buffer_head *bh = lookup_bh_lru(bdev, block, size);
1319
1320 if (bh == NULL) {
1321 bh = __find_get_block_slow(bdev, block);
1322 if (bh)
1323 bh_lru_install(bh);
1324 }
1325 if (bh)
1326 touch_buffer(bh);
1327 return bh;
1328}
1329EXPORT_SYMBOL(__find_get_block);
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343struct buffer_head *
1344__getblk(struct block_device *bdev, sector_t block, unsigned size)
1345{
1346 struct buffer_head *bh = __find_get_block(bdev, block, size);
1347
1348 might_sleep();
1349 if (bh == NULL)
1350 bh = __getblk_slow(bdev, block, size);
1351 return bh;
1352}
1353EXPORT_SYMBOL(__getblk);
1354
1355
1356
1357
1358void __breadahead(struct block_device *bdev, sector_t block, unsigned size)
1359{
1360 struct buffer_head *bh = __getblk(bdev, block, size);
1361 if (likely(bh)) {
1362 ll_rw_block(READA, 1, &bh);
1363 brelse(bh);
1364 }
1365}
1366EXPORT_SYMBOL(__breadahead);
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377struct buffer_head *
1378__bread(struct block_device *bdev, sector_t block, unsigned size)
1379{
1380 struct buffer_head *bh = __getblk(bdev, block, size);
1381
1382 if (likely(bh) && !buffer_uptodate(bh))
1383 bh = __bread_slow(bh);
1384 return bh;
1385}
1386EXPORT_SYMBOL(__bread);
1387
1388
1389
1390
1391
1392
1393static void invalidate_bh_lru(void *arg)
1394{
1395 struct bh_lru *b = &get_cpu_var(bh_lrus);
1396 int i;
1397
1398 for (i = 0; i < BH_LRU_SIZE; i++) {
1399 brelse(b->bhs[i]);
1400 b->bhs[i] = NULL;
1401 }
1402 put_cpu_var(bh_lrus);
1403}
1404
1405void invalidate_bh_lrus(void)
1406{
1407 on_each_cpu(invalidate_bh_lru, NULL, 1, 1);
1408}
1409
1410void set_bh_page(struct buffer_head *bh,
1411 struct page *page, unsigned long offset)
1412{
1413 bh->b_page = page;
1414 BUG_ON(offset >= PAGE_SIZE);
1415 if (PageHighMem(page))
1416
1417
1418
1419 bh->b_data = (char *)(0 + offset);
1420 else
1421 bh->b_data = page_address(page) + offset;
1422}
1423EXPORT_SYMBOL(set_bh_page);
1424
1425
1426
1427
1428static void discard_buffer(struct buffer_head * bh)
1429{
1430 lock_buffer(bh);
1431 clear_buffer_dirty(bh);
1432 bh->b_bdev = NULL;
1433 clear_buffer_mapped(bh);
1434 clear_buffer_req(bh);
1435 clear_buffer_new(bh);
1436 clear_buffer_delay(bh);
1437 clear_buffer_unwritten(bh);
1438 unlock_buffer(bh);
1439}
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456void block_invalidatepage(struct page *page, unsigned long offset)
1457{
1458 struct buffer_head *head, *bh, *next;
1459 unsigned int curr_off = 0;
1460
1461 BUG_ON(!PageLocked(page));
1462 if (!page_has_buffers(page))
1463 goto out;
1464
1465 head = page_buffers(page);
1466 bh = head;
1467 do {
1468 unsigned int next_off = curr_off + bh->b_size;
1469 next = bh->b_this_page;
1470
1471
1472
1473
1474 if (offset <= curr_off)
1475 discard_buffer(bh);
1476 curr_off = next_off;
1477 bh = next;
1478 } while (bh != head);
1479
1480
1481
1482
1483
1484
1485 if (offset == 0)
1486 try_to_release_page(page, 0);
1487out:
1488 return;
1489}
1490EXPORT_SYMBOL(block_invalidatepage);
1491
1492
1493
1494
1495
1496
1497void create_empty_buffers(struct page *page,
1498 unsigned long blocksize, unsigned long b_state)
1499{
1500 struct buffer_head *bh, *head, *tail;
1501
1502 head = alloc_page_buffers(page, blocksize, 1);
1503 bh = head;
1504 do {
1505 bh->b_state |= b_state;
1506 tail = bh;
1507 bh = bh->b_this_page;
1508 } while (bh);
1509 tail->b_this_page = head;
1510
1511 spin_lock(&page->mapping->private_lock);
1512 if (PageUptodate(page) || PageDirty(page)) {
1513 bh = head;
1514 do {
1515 if (PageDirty(page))
1516 set_buffer_dirty(bh);
1517 if (PageUptodate(page))
1518 set_buffer_uptodate(bh);
1519 bh = bh->b_this_page;
1520 } while (bh != head);
1521 }
1522 attach_page_buffers(page, head);
1523 spin_unlock(&page->mapping->private_lock);
1524}
1525EXPORT_SYMBOL(create_empty_buffers);
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543void unmap_underlying_metadata(struct block_device *bdev, sector_t block)
1544{
1545 struct buffer_head *old_bh;
1546
1547 might_sleep();
1548
1549 old_bh = __find_get_block_slow(bdev, block);
1550 if (old_bh) {
1551 clear_buffer_dirty(old_bh);
1552 wait_on_buffer(old_bh);
1553 clear_buffer_req(old_bh);
1554 __brelse(old_bh);
1555 }
1556}
1557EXPORT_SYMBOL(unmap_underlying_metadata);
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584static int __block_write_full_page(struct inode *inode, struct page *page,
1585 get_block_t *get_block, struct writeback_control *wbc)
1586{
1587 int err;
1588 sector_t block;
1589 sector_t last_block;
1590 struct buffer_head *bh, *head;
1591 const unsigned blocksize = 1 << inode->i_blkbits;
1592 int nr_underway = 0;
1593
1594 BUG_ON(!PageLocked(page));
1595
1596 last_block = (i_size_read(inode) - 1) >> inode->i_blkbits;
1597
1598 if (!page_has_buffers(page)) {
1599 create_empty_buffers(page, blocksize,
1600 (1 << BH_Dirty)|(1 << BH_Uptodate));
1601 }
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613 block = (sector_t)page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits);
1614 head = page_buffers(page);
1615 bh = head;
1616
1617
1618
1619
1620
1621 do {
1622 if (block > last_block) {
1623
1624
1625
1626
1627
1628
1629
1630
1631 clear_buffer_dirty(bh);
1632 set_buffer_uptodate(bh);
1633 } else if (!buffer_mapped(bh) && buffer_dirty(bh)) {
1634 WARN_ON(bh->b_size != blocksize);
1635 err = get_block(inode, block, bh, 1);
1636 if (err)
1637 goto recover;
1638 if (buffer_new(bh)) {
1639
1640 clear_buffer_new(bh);
1641 unmap_underlying_metadata(bh->b_bdev,
1642 bh->b_blocknr);
1643 }
1644 }
1645 bh = bh->b_this_page;
1646 block++;
1647 } while (bh != head);
1648
1649 do {
1650 if (!buffer_mapped(bh))
1651 continue;
1652
1653
1654
1655
1656
1657
1658
1659 if (wbc->sync_mode != WB_SYNC_NONE || !wbc->nonblocking) {
1660 lock_buffer(bh);
1661 } else if (test_set_buffer_locked(bh)) {
1662 redirty_page_for_writepage(wbc, page);
1663 continue;
1664 }
1665 if (test_clear_buffer_dirty(bh)) {
1666 mark_buffer_async_write(bh);
1667 } else {
1668 unlock_buffer(bh);
1669 }
1670 } while ((bh = bh->b_this_page) != head);
1671
1672
1673
1674
1675
1676 BUG_ON(PageWriteback(page));
1677 set_page_writeback(page);
1678
1679 do {
1680 struct buffer_head *next = bh->b_this_page;
1681 if (buffer_async_write(bh)) {
1682 submit_bh(WRITE, bh);
1683 nr_underway++;
1684 }
1685 bh = next;
1686 } while (bh != head);
1687 unlock_page(page);
1688
1689 err = 0;
1690done:
1691 if (nr_underway == 0) {
1692
1693
1694
1695
1696
1697 end_page_writeback(page);
1698
1699
1700
1701
1702
1703 wbc->pages_skipped++;
1704 }
1705 return err;
1706
1707recover:
1708
1709
1710
1711
1712
1713
1714 bh = head;
1715
1716 do {
1717 if (buffer_mapped(bh) && buffer_dirty(bh)) {
1718 lock_buffer(bh);
1719 mark_buffer_async_write(bh);
1720 } else {
1721
1722
1723
1724
1725 clear_buffer_dirty(bh);
1726 }
1727 } while ((bh = bh->b_this_page) != head);
1728 SetPageError(page);
1729 BUG_ON(PageWriteback(page));
1730 mapping_set_error(page->mapping, err);
1731 set_page_writeback(page);
1732 do {
1733 struct buffer_head *next = bh->b_this_page;
1734 if (buffer_async_write(bh)) {
1735 clear_buffer_dirty(bh);
1736 submit_bh(WRITE, bh);
1737 nr_underway++;
1738 }
1739 bh = next;
1740 } while (bh != head);
1741 unlock_page(page);
1742 goto done;
1743}
1744
1745static int __block_prepare_write(struct inode *inode, struct page *page,
1746 unsigned from, unsigned to, get_block_t *get_block)
1747{
1748 unsigned block_start, block_end;
1749 sector_t block;
1750 int err = 0;
1751 unsigned blocksize, bbits;
1752 struct buffer_head *bh, *head, *wait[2], **wait_bh=wait;
1753
1754 BUG_ON(!PageLocked(page));
1755 BUG_ON(from > PAGE_CACHE_SIZE);
1756 BUG_ON(to > PAGE_CACHE_SIZE);
1757 BUG_ON(from > to);
1758
1759 blocksize = 1 << inode->i_blkbits;
1760 if (!page_has_buffers(page))
1761 create_empty_buffers(page, blocksize, 0);
1762 head = page_buffers(page);
1763
1764 bbits = inode->i_blkbits;
1765 block = (sector_t)page->index << (PAGE_CACHE_SHIFT - bbits);
1766
1767 for(bh = head, block_start = 0; bh != head || !block_start;
1768 block++, block_start=block_end, bh = bh->b_this_page) {
1769 block_end = block_start + blocksize;
1770 if (block_end <= from || block_start >= to) {
1771 if (PageUptodate(page)) {
1772 if (!buffer_uptodate(bh))
1773 set_buffer_uptodate(bh);
1774 }
1775 continue;
1776 }
1777 if (buffer_new(bh))
1778 clear_buffer_new(bh);
1779 if (!buffer_mapped(bh)) {
1780 WARN_ON(bh->b_size != blocksize);
1781 err = get_block(inode, block, bh, 1);
1782 if (err)
1783 break;
1784 if (buffer_new(bh)) {
1785 unmap_underlying_metadata(bh->b_bdev,
1786 bh->b_blocknr);
1787 if (PageUptodate(page)) {
1788 set_buffer_uptodate(bh);
1789 continue;
1790 }
1791 if (block_end > to || block_start < from) {
1792 void *kaddr;
1793
1794 kaddr = kmap_atomic(page, KM_USER0);
1795 if (block_end > to)
1796 memset(kaddr+to, 0,
1797 block_end-to);
1798 if (block_start < from)
1799 memset(kaddr+block_start,
1800 0, from-block_start);
1801 flush_dcache_page(page);
1802 kunmap_atomic(kaddr, KM_USER0);
1803 }
1804 continue;
1805 }
1806 }
1807 if (PageUptodate(page)) {
1808 if (!buffer_uptodate(bh))
1809 set_buffer_uptodate(bh);
1810 continue;
1811 }
1812 if (!buffer_uptodate(bh) && !buffer_delay(bh) &&
1813 !buffer_unwritten(bh) &&
1814 (block_start < from || block_end > to)) {
1815 ll_rw_block(READ, 1, &bh);
1816 *wait_bh++=bh;
1817 }
1818 }
1819
1820
1821
1822 while(wait_bh > wait) {
1823 wait_on_buffer(*--wait_bh);
1824 if (!buffer_uptodate(*wait_bh))
1825 err = -EIO;
1826 }
1827 if (!err) {
1828 bh = head;
1829 do {
1830 if (buffer_new(bh))
1831 clear_buffer_new(bh);
1832 } while ((bh = bh->b_this_page) != head);
1833 return 0;
1834 }
1835
1836
1837
1838
1839
1840
1841 bh = head;
1842 block_start = 0;
1843 do {
1844 block_end = block_start+blocksize;
1845 if (block_end <= from)
1846 goto next_bh;
1847 if (block_start >= to)
1848 break;
1849 if (buffer_new(bh)) {
1850 clear_buffer_new(bh);
1851 zero_user_page(page, block_start, bh->b_size, KM_USER0);
1852 set_buffer_uptodate(bh);
1853 mark_buffer_dirty(bh);
1854 }
1855next_bh:
1856 block_start = block_end;
1857 bh = bh->b_this_page;
1858 } while (bh != head);
1859 return err;
1860}
1861
1862static int __block_commit_write(struct inode *inode, struct page *page,
1863 unsigned from, unsigned to)
1864{
1865 unsigned block_start, block_end;
1866 int partial = 0;
1867 unsigned blocksize;
1868 struct buffer_head *bh, *head;
1869
1870 blocksize = 1 << inode->i_blkbits;
1871
1872 for(bh = head = page_buffers(page), block_start = 0;
1873 bh != head || !block_start;
1874 block_start=block_end, bh = bh->b_this_page) {
1875 block_end = block_start + blocksize;
1876 if (block_end <= from || block_start >= to) {
1877 if (!buffer_uptodate(bh))
1878 partial = 1;
1879 } else {
1880 set_buffer_uptodate(bh);
1881 mark_buffer_dirty(bh);
1882 }
1883 }
1884
1885
1886
1887
1888
1889
1890
1891 if (!partial)
1892 SetPageUptodate(page);
1893 return 0;
1894}
1895
1896
1897
1898
1899
1900
1901
1902
1903int block_read_full_page(struct page *page, get_block_t *get_block)
1904{
1905 struct inode *inode = page->mapping->host;
1906 sector_t iblock, lblock;
1907 struct buffer_head *bh, *head, *arr[MAX_BUF_PER_PAGE];
1908 unsigned int blocksize;
1909 int nr, i;
1910 int fully_mapped = 1;
1911
1912 BUG_ON(!PageLocked(page));
1913 blocksize = 1 << inode->i_blkbits;
1914 if (!page_has_buffers(page))
1915 create_empty_buffers(page, blocksize, 0);
1916 head = page_buffers(page);
1917
1918 iblock = (sector_t)page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits);
1919 lblock = (i_size_read(inode)+blocksize-1) >> inode->i_blkbits;
1920 bh = head;
1921 nr = 0;
1922 i = 0;
1923
1924 do {
1925 if (buffer_uptodate(bh))
1926 continue;
1927
1928 if (!buffer_mapped(bh)) {
1929 int err = 0;
1930
1931 fully_mapped = 0;
1932 if (iblock < lblock) {
1933 WARN_ON(bh->b_size != blocksize);
1934 err = get_block(inode, iblock, bh, 0);
1935 if (err)
1936 SetPageError(page);
1937 }
1938 if (!buffer_mapped(bh)) {
1939 zero_user_page(page, i * blocksize, blocksize,
1940 KM_USER0);
1941 if (!err)
1942 set_buffer_uptodate(bh);
1943 continue;
1944 }
1945
1946
1947
1948
1949 if (buffer_uptodate(bh))
1950 continue;
1951 }
1952 arr[nr++] = bh;
1953 } while (i++, iblock++, (bh = bh->b_this_page) != head);
1954
1955 if (fully_mapped)
1956 SetPageMappedToDisk(page);
1957
1958 if (!nr) {
1959
1960
1961
1962
1963 if (!PageError(page))
1964 SetPageUptodate(page);
1965 unlock_page(page);
1966 return 0;
1967 }
1968
1969
1970 for (i = 0; i < nr; i++) {
1971 bh = arr[i];
1972 lock_buffer(bh);
1973 mark_buffer_async_read(bh);
1974 }
1975
1976
1977
1978
1979
1980
1981 for (i = 0; i < nr; i++) {
1982 bh = arr[i];
1983 if (buffer_uptodate(bh))
1984 end_buffer_async_read(bh, 1);
1985 else
1986 submit_bh(READ, bh);
1987 }
1988 return 0;
1989}
1990
1991
1992
1993
1994
1995static int __generic_cont_expand(struct inode *inode, loff_t size,
1996 pgoff_t index, unsigned int offset)
1997{
1998 struct address_space *mapping = inode->i_mapping;
1999 struct page *page;
2000 unsigned long limit;
2001 int err;
2002
2003 err = -EFBIG;
2004 limit = current->signal->rlim[RLIMIT_FSIZE].rlim_cur;
2005 if (limit != RLIM_INFINITY && size > (loff_t)limit) {
2006 send_sig(SIGXFSZ, current, 0);
2007 goto out;
2008 }
2009 if (size > inode->i_sb->s_maxbytes)
2010 goto out;
2011
2012 err = -ENOMEM;
2013 page = grab_cache_page(mapping, index);
2014 if (!page)
2015 goto out;
2016 err = mapping->a_ops->prepare_write(NULL, page, offset, offset);
2017 if (err) {
2018
2019
2020
2021
2022 unlock_page(page);
2023 page_cache_release(page);
2024 vmtruncate(inode, inode->i_size);
2025 goto out;
2026 }
2027
2028 err = mapping->a_ops->commit_write(NULL, page, offset, offset);
2029
2030 unlock_page(page);
2031 page_cache_release(page);
2032 if (err > 0)
2033 err = 0;
2034out:
2035 return err;
2036}
2037
2038int generic_cont_expand(struct inode *inode, loff_t size)
2039{
2040 pgoff_t index;
2041 unsigned int offset;
2042
2043 offset = (size & (PAGE_CACHE_SIZE - 1));
2044
2045
2046
2047
2048
2049 if ((offset & (inode->i_sb->s_blocksize - 1)) == 0) {
2050
2051 offset++;
2052 }
2053 index = size >> PAGE_CACHE_SHIFT;
2054
2055 return __generic_cont_expand(inode, size, index, offset);
2056}
2057
2058int generic_cont_expand_simple(struct inode *inode, loff_t size)
2059{
2060 loff_t pos = size - 1;
2061 pgoff_t index = pos >> PAGE_CACHE_SHIFT;
2062 unsigned int offset = (pos & (PAGE_CACHE_SIZE - 1)) + 1;
2063
2064
2065 return __generic_cont_expand(inode, size, index, offset);
2066}
2067
2068
2069
2070
2071
2072
2073int cont_prepare_write(struct page *page, unsigned offset,
2074 unsigned to, get_block_t *get_block, loff_t *bytes)
2075{
2076 struct address_space *mapping = page->mapping;
2077 struct inode *inode = mapping->host;
2078 struct page *new_page;
2079 pgoff_t pgpos;
2080 long status;
2081 unsigned zerofrom;
2082 unsigned blocksize = 1 << inode->i_blkbits;
2083
2084 while(page->index > (pgpos = *bytes>>PAGE_CACHE_SHIFT)) {
2085 status = -ENOMEM;
2086 new_page = grab_cache_page(mapping, pgpos);
2087 if (!new_page)
2088 goto out;
2089
2090 if (*bytes>>PAGE_CACHE_SHIFT != pgpos) {
2091 unlock_page(new_page);
2092 page_cache_release(new_page);
2093 continue;
2094 }
2095 zerofrom = *bytes & ~PAGE_CACHE_MASK;
2096 if (zerofrom & (blocksize-1)) {
2097 *bytes |= (blocksize-1);
2098 (*bytes)++;
2099 }
2100 status = __block_prepare_write(inode, new_page, zerofrom,
2101 PAGE_CACHE_SIZE, get_block);
2102 if (status)
2103 goto out_unmap;
2104 zero_user_page(new_page, zerofrom, PAGE_CACHE_SIZE - zerofrom,
2105 KM_USER0);
2106 generic_commit_write(NULL, new_page, zerofrom, PAGE_CACHE_SIZE);
2107 unlock_page(new_page);
2108 page_cache_release(new_page);
2109 }
2110
2111 if (page->index < pgpos) {
2112
2113 zerofrom = offset;
2114 } else {
2115
2116 zerofrom = *bytes & ~PAGE_CACHE_MASK;
2117
2118
2119 if (to > zerofrom && (zerofrom & (blocksize-1))) {
2120 *bytes |= (blocksize-1);
2121 (*bytes)++;
2122 }
2123
2124
2125 if (offset <= zerofrom)
2126 zerofrom = offset;
2127 }
2128 status = __block_prepare_write(inode, page, zerofrom, to, get_block);
2129 if (status)
2130 goto out1;
2131 if (zerofrom < offset) {
2132 zero_user_page(page, zerofrom, offset - zerofrom, KM_USER0);
2133 __block_commit_write(inode, page, zerofrom, offset);
2134 }
2135 return 0;
2136out1:
2137 ClearPageUptodate(page);
2138 return status;
2139
2140out_unmap:
2141 ClearPageUptodate(new_page);
2142 unlock_page(new_page);
2143 page_cache_release(new_page);
2144out:
2145 return status;
2146}
2147
2148int block_prepare_write(struct page *page, unsigned from, unsigned to,
2149 get_block_t *get_block)
2150{
2151 struct inode *inode = page->mapping->host;
2152 int err = __block_prepare_write(inode, page, from, to, get_block);
2153 if (err)
2154 ClearPageUptodate(page);
2155 return err;
2156}
2157
2158int block_commit_write(struct page *page, unsigned from, unsigned to)
2159{
2160 struct inode *inode = page->mapping->host;
2161 __block_commit_write(inode,page,from,to);
2162 return 0;
2163}
2164
2165int generic_commit_write(struct file *file, struct page *page,
2166 unsigned from, unsigned to)
2167{
2168 struct inode *inode = page->mapping->host;
2169 loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to;
2170 __block_commit_write(inode,page,from,to);
2171
2172
2173
2174
2175 if (pos > inode->i_size) {
2176 i_size_write(inode, pos);
2177 mark_inode_dirty(inode);
2178 }
2179 return 0;
2180}
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193static void end_buffer_read_nobh(struct buffer_head *bh, int uptodate)
2194{
2195 if (uptodate) {
2196 set_buffer_uptodate(bh);
2197 } else {
2198
2199 clear_buffer_uptodate(bh);
2200 }
2201 unlock_buffer(bh);
2202}
2203
2204
2205
2206
2207
2208int nobh_prepare_write(struct page *page, unsigned from, unsigned to,
2209 get_block_t *get_block)
2210{
2211 struct inode *inode = page->mapping->host;
2212 const unsigned blkbits = inode->i_blkbits;
2213 const unsigned blocksize = 1 << blkbits;
2214 struct buffer_head map_bh;
2215 struct buffer_head *read_bh[MAX_BUF_PER_PAGE];
2216 unsigned block_in_page;
2217 unsigned block_start;
2218 sector_t block_in_file;
2219 char *kaddr;
2220 int nr_reads = 0;
2221 int i;
2222 int ret = 0;
2223 int is_mapped_to_disk = 1;
2224
2225 if (PageMappedToDisk(page))
2226 return 0;
2227
2228 block_in_file = (sector_t)page->index << (PAGE_CACHE_SHIFT - blkbits);
2229 map_bh.b_page = page;
2230
2231
2232
2233
2234
2235
2236 for (block_start = 0, block_in_page = 0;
2237 block_start < PAGE_CACHE_SIZE;
2238 block_in_page++, block_start += blocksize) {
2239 unsigned block_end = block_start + blocksize;
2240 int create;
2241
2242 map_bh.b_state = 0;
2243 create = 1;
2244 if (block_start >= to)
2245 create = 0;
2246 map_bh.b_size = blocksize;
2247 ret = get_block(inode, block_in_file + block_in_page,
2248 &map_bh, create);
2249 if (ret)
2250 goto failed;
2251 if (!buffer_mapped(&map_bh))
2252 is_mapped_to_disk = 0;
2253 if (buffer_new(&map_bh))
2254 unmap_underlying_metadata(map_bh.b_bdev,
2255 map_bh.b_blocknr);
2256 if (PageUptodate(page))
2257 continue;
2258 if (buffer_new(&map_bh) || !buffer_mapped(&map_bh)) {
2259 kaddr = kmap_atomic(page, KM_USER0);
2260 if (block_start < from)
2261 memset(kaddr+block_start, 0, from-block_start);
2262 if (block_end > to)
2263 memset(kaddr + to, 0, block_end - to);
2264 flush_dcache_page(page);
2265 kunmap_atomic(kaddr, KM_USER0);
2266 continue;
2267 }
2268 if (buffer_uptodate(&map_bh))
2269 continue;
2270 if (block_start < from || block_end > to) {
2271 struct buffer_head *bh = alloc_buffer_head(GFP_NOFS);
2272
2273 if (!bh) {
2274 ret = -ENOMEM;
2275 goto failed;
2276 }
2277 bh->b_state = map_bh.b_state;
2278 atomic_set(&bh->b_count, 0);
2279 bh->b_this_page = NULL;
2280 bh->b_page = page;
2281 bh->b_blocknr = map_bh.b_blocknr;
2282 bh->b_size = blocksize;
2283 bh->b_data = (char *)(long)block_start;
2284 bh->b_bdev = map_bh.b_bdev;
2285 bh->b_private = NULL;
2286 read_bh[nr_reads++] = bh;
2287 }
2288 }
2289
2290 if (nr_reads) {
2291 struct buffer_head *bh;
2292
2293
2294
2295
2296
2297
2298 for (i = 0; i < nr_reads; i++) {
2299 bh = read_bh[i];
2300 lock_buffer(bh);
2301 bh->b_end_io = end_buffer_read_nobh;
2302 submit_bh(READ, bh);
2303 }
2304 for (i = 0; i < nr_reads; i++) {
2305 bh = read_bh[i];
2306 wait_on_buffer(bh);
2307 if (!buffer_uptodate(bh))
2308 ret = -EIO;
2309 free_buffer_head(bh);
2310 read_bh[i] = NULL;
2311 }
2312 if (ret)
2313 goto failed;
2314 }
2315
2316 if (is_mapped_to_disk)
2317 SetPageMappedToDisk(page);
2318
2319 return 0;
2320
2321failed:
2322 for (i = 0; i < nr_reads; i++) {
2323 if (read_bh[i])
2324 free_buffer_head(read_bh[i]);
2325 }
2326
2327
2328
2329
2330
2331 zero_user_page(page, 0, PAGE_CACHE_SIZE, KM_USER0);
2332 SetPageUptodate(page);
2333 set_page_dirty(page);
2334 return ret;
2335}
2336EXPORT_SYMBOL(nobh_prepare_write);
2337
2338
2339
2340
2341
2342int nobh_commit_write(struct file *file, struct page *page,
2343 unsigned from, unsigned to)
2344{
2345 struct inode *inode = page->mapping->host;
2346 loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to;
2347
2348 SetPageUptodate(page);
2349 set_page_dirty(page);
2350 if (pos > inode->i_size) {
2351 i_size_write(inode, pos);
2352 mark_inode_dirty(inode);
2353 }
2354 return 0;
2355}
2356EXPORT_SYMBOL(nobh_commit_write);
2357
2358
2359
2360
2361
2362
2363int nobh_writepage(struct page *page, get_block_t *get_block,
2364 struct writeback_control *wbc)
2365{
2366 struct inode * const inode = page->mapping->host;
2367 loff_t i_size = i_size_read(inode);
2368 const pgoff_t end_index = i_size >> PAGE_CACHE_SHIFT;
2369 unsigned offset;
2370 int ret;
2371
2372
2373 if (page->index < end_index)
2374 goto out;
2375
2376
2377 offset = i_size & (PAGE_CACHE_SIZE-1);
2378 if (page->index >= end_index+1 || !offset) {
2379
2380
2381
2382
2383
2384#if 0
2385
2386 if (page->mapping->a_ops->invalidatepage)
2387 page->mapping->a_ops->invalidatepage(page, offset);
2388#endif
2389 unlock_page(page);
2390 return 0;
2391 }
2392
2393
2394
2395
2396
2397
2398
2399
2400 zero_user_page(page, offset, PAGE_CACHE_SIZE - offset, KM_USER0);
2401out:
2402 ret = mpage_writepage(page, get_block, wbc);
2403 if (ret == -EAGAIN)
2404 ret = __block_write_full_page(inode, page, get_block, wbc);
2405 return ret;
2406}
2407EXPORT_SYMBOL(nobh_writepage);
2408
2409
2410
2411
2412int nobh_truncate_page(struct address_space *mapping, loff_t from)
2413{
2414 struct inode *inode = mapping->host;
2415 unsigned blocksize = 1 << inode->i_blkbits;
2416 pgoff_t index = from >> PAGE_CACHE_SHIFT;
2417 unsigned offset = from & (PAGE_CACHE_SIZE-1);
2418 unsigned to;
2419 struct page *page;
2420 const struct address_space_operations *a_ops = mapping->a_ops;
2421 int ret = 0;
2422
2423 if ((offset & (blocksize - 1)) == 0)
2424 goto out;
2425
2426 ret = -ENOMEM;
2427 page = grab_cache_page(mapping, index);
2428 if (!page)
2429 goto out;
2430
2431 to = (offset + blocksize) & ~(blocksize - 1);
2432 ret = a_ops->prepare_write(NULL, page, offset, to);
2433 if (ret == 0) {
2434 zero_user_page(page, offset, PAGE_CACHE_SIZE - offset,
2435 KM_USER0);
2436
2437
2438
2439
2440 SetPageUptodate(page);
2441 set_page_dirty(page);
2442 }
2443 unlock_page(page);
2444 page_cache_release(page);
2445out:
2446 return ret;
2447}
2448EXPORT_SYMBOL(nobh_truncate_page);
2449
2450int block_truncate_page(struct address_space *mapping,
2451 loff_t from, get_block_t *get_block)
2452{
2453 pgoff_t index = from >> PAGE_CACHE_SHIFT;
2454 unsigned offset = from & (PAGE_CACHE_SIZE-1);
2455 unsigned blocksize;
2456 sector_t iblock;
2457 unsigned length, pos;
2458 struct inode *inode = mapping->host;
2459 struct page *page;
2460 struct buffer_head *bh;
2461 int err;
2462
2463 blocksize = 1 << inode->i_blkbits;
2464 length = offset & (blocksize - 1);
2465
2466
2467 if (!length)
2468 return 0;
2469
2470 length = blocksize - length;
2471 iblock = (sector_t)index << (PAGE_CACHE_SHIFT - inode->i_blkbits);
2472
2473 page = grab_cache_page(mapping, index);
2474 err = -ENOMEM;
2475 if (!page)
2476 goto out;
2477
2478 if (!page_has_buffers(page))
2479 create_empty_buffers(page, blocksize, 0);
2480
2481
2482 bh = page_buffers(page);
2483 pos = blocksize;
2484 while (offset >= pos) {
2485 bh = bh->b_this_page;
2486 iblock++;
2487 pos += blocksize;
2488 }
2489
2490 err = 0;
2491 if (!buffer_mapped(bh)) {
2492 WARN_ON(bh->b_size != blocksize);
2493 err = get_block(inode, iblock, bh, 0);
2494 if (err)
2495 goto unlock;
2496
2497 if (!buffer_mapped(bh))
2498 goto unlock;
2499 }
2500
2501
2502 if (PageUptodate(page))
2503 set_buffer_uptodate(bh);
2504
2505 if (!buffer_uptodate(bh) && !buffer_delay(bh) && !buffer_unwritten(bh)) {
2506 err = -EIO;
2507 ll_rw_block(READ, 1, &bh);
2508 wait_on_buffer(bh);
2509
2510 if (!buffer_uptodate(bh))
2511 goto unlock;
2512 }
2513
2514 zero_user_page(page, offset, length, KM_USER0);
2515 mark_buffer_dirty(bh);
2516 err = 0;
2517
2518unlock:
2519 unlock_page(page);
2520 page_cache_release(page);
2521out:
2522 return err;
2523}
2524
2525
2526
2527
2528int block_write_full_page(struct page *page, get_block_t *get_block,
2529 struct writeback_control *wbc)
2530{
2531 struct inode * const inode = page->mapping->host;
2532 loff_t i_size = i_size_read(inode);
2533 const pgoff_t end_index = i_size >> PAGE_CACHE_SHIFT;
2534 unsigned offset;
2535
2536
2537 if (page->index < end_index)
2538 return __block_write_full_page(inode, page, get_block, wbc);
2539
2540
2541 offset = i_size & (PAGE_CACHE_SIZE-1);
2542 if (page->index >= end_index+1 || !offset) {
2543
2544
2545
2546
2547
2548 do_invalidatepage(page, 0);
2549 unlock_page(page);
2550 return 0;
2551 }
2552
2553
2554
2555
2556
2557
2558
2559
2560 zero_user_page(page, offset, PAGE_CACHE_SIZE - offset, KM_USER0);
2561 return __block_write_full_page(inode, page, get_block, wbc);
2562}
2563
2564sector_t generic_block_bmap(struct address_space *mapping, sector_t block,
2565 get_block_t *get_block)
2566{
2567 struct buffer_head tmp;
2568 struct inode *inode = mapping->host;
2569 tmp.b_state = 0;
2570 tmp.b_blocknr = 0;
2571 tmp.b_size = 1 << inode->i_blkbits;
2572 get_block(inode, block, &tmp, 0);
2573 return tmp.b_blocknr;
2574}
2575
2576static int end_bio_bh_io_sync(struct bio *bio, unsigned int bytes_done, int err)
2577{
2578 struct buffer_head *bh = bio->bi_private;
2579
2580 if (bio->bi_size)
2581 return 1;
2582
2583 if (err == -EOPNOTSUPP) {
2584 set_bit(BIO_EOPNOTSUPP, &bio->bi_flags);
2585 set_bit(BH_Eopnotsupp, &bh->b_state);
2586 }
2587
2588 bh->b_end_io(bh, test_bit(BIO_UPTODATE, &bio->bi_flags));
2589 bio_put(bio);
2590 return 0;
2591}
2592
2593int submit_bh(int rw, struct buffer_head * bh)
2594{
2595 struct bio *bio;
2596 int ret = 0;
2597
2598 BUG_ON(!buffer_locked(bh));
2599 BUG_ON(!buffer_mapped(bh));
2600 BUG_ON(!bh->b_end_io);
2601
2602 if (buffer_ordered(bh) && (rw == WRITE))
2603 rw = WRITE_BARRIER;
2604
2605
2606
2607
2608
2609 if (test_set_buffer_req(bh) && (rw == WRITE || rw == WRITE_BARRIER))
2610 clear_buffer_write_io_error(bh);
2611
2612
2613
2614
2615
2616 bio = bio_alloc(GFP_NOIO, 1);
2617
2618 bio->bi_sector = bh->b_blocknr * (bh->b_size >> 9);
2619 bio->bi_bdev = bh->b_bdev;
2620 bio->bi_io_vec[0].bv_page = bh->b_page;
2621 bio->bi_io_vec[0].bv_len = bh->b_size;
2622 bio->bi_io_vec[0].bv_offset = bh_offset(bh);
2623
2624 bio->bi_vcnt = 1;
2625 bio->bi_idx = 0;
2626 bio->bi_size = bh->b_size;
2627
2628 bio->bi_end_io = end_bio_bh_io_sync;
2629 bio->bi_private = bh;
2630
2631 bio_get(bio);
2632 submit_bio(rw, bio);
2633
2634 if (bio_flagged(bio, BIO_EOPNOTSUPP))
2635 ret = -EOPNOTSUPP;
2636
2637 bio_put(bio);
2638 return ret;
2639}
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667void ll_rw_block(int rw, int nr, struct buffer_head *bhs[])
2668{
2669 int i;
2670
2671 for (i = 0; i < nr; i++) {
2672 struct buffer_head *bh = bhs[i];
2673
2674 if (rw == SWRITE)
2675 lock_buffer(bh);
2676 else if (test_set_buffer_locked(bh))
2677 continue;
2678
2679 if (rw == WRITE || rw == SWRITE) {
2680 if (test_clear_buffer_dirty(bh)) {
2681 bh->b_end_io = end_buffer_write_sync;
2682 get_bh(bh);
2683 submit_bh(WRITE, bh);
2684 continue;
2685 }
2686 } else {
2687 if (!buffer_uptodate(bh)) {
2688 bh->b_end_io = end_buffer_read_sync;
2689 get_bh(bh);
2690 submit_bh(rw, bh);
2691 continue;
2692 }
2693 }
2694 unlock_buffer(bh);
2695 }
2696}
2697
2698
2699
2700
2701
2702
2703int sync_dirty_buffer(struct buffer_head *bh)
2704{
2705 int ret = 0;
2706
2707 WARN_ON(atomic_read(&bh->b_count) < 1);
2708 lock_buffer(bh);
2709 if (test_clear_buffer_dirty(bh)) {
2710 get_bh(bh);
2711 bh->b_end_io = end_buffer_write_sync;
2712 ret = submit_bh(WRITE, bh);
2713 wait_on_buffer(bh);
2714 if (buffer_eopnotsupp(bh)) {
2715 clear_buffer_eopnotsupp(bh);
2716 ret = -EOPNOTSUPP;
2717 }
2718 if (!ret && !buffer_uptodate(bh))
2719 ret = -EIO;
2720 } else {
2721 unlock_buffer(bh);
2722 }
2723 return ret;
2724}
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746static inline int buffer_busy(struct buffer_head *bh)
2747{
2748 return atomic_read(&bh->b_count) |
2749 (bh->b_state & ((1 << BH_Dirty) | (1 << BH_Lock)));
2750}
2751
2752static int
2753drop_buffers(struct page *page, struct buffer_head **buffers_to_free)
2754{
2755 struct buffer_head *head = page_buffers(page);
2756 struct buffer_head *bh;
2757
2758 bh = head;
2759 do {
2760 if (buffer_write_io_error(bh) && page->mapping)
2761 set_bit(AS_EIO, &page->mapping->flags);
2762 if (buffer_busy(bh))
2763 goto failed;
2764 bh = bh->b_this_page;
2765 } while (bh != head);
2766
2767 do {
2768 struct buffer_head *next = bh->b_this_page;
2769
2770 if (!list_empty(&bh->b_assoc_buffers))
2771 __remove_assoc_queue(bh);
2772 bh = next;
2773 } while (bh != head);
2774 *buffers_to_free = head;
2775 __clear_page_buffers(page);
2776 return 1;
2777failed:
2778 return 0;
2779}
2780
2781int try_to_free_buffers(struct page *page)
2782{
2783 struct address_space * const mapping = page->mapping;
2784 struct buffer_head *buffers_to_free = NULL;
2785 int ret = 0;
2786
2787 BUG_ON(!PageLocked(page));
2788 if (PageWriteback(page))
2789 return 0;
2790
2791 if (mapping == NULL) {
2792 ret = drop_buffers(page, &buffers_to_free);
2793 goto out;
2794 }
2795
2796 spin_lock(&mapping->private_lock);
2797 ret = drop_buffers(page, &buffers_to_free);
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813 if (ret)
2814 cancel_dirty_page(page, PAGE_CACHE_SIZE);
2815 spin_unlock(&mapping->private_lock);
2816out:
2817 if (buffers_to_free) {
2818 struct buffer_head *bh = buffers_to_free;
2819
2820 do {
2821 struct buffer_head *next = bh->b_this_page;
2822 free_buffer_head(bh);
2823 bh = next;
2824 } while (bh != buffers_to_free);
2825 }
2826 return ret;
2827}
2828EXPORT_SYMBOL(try_to_free_buffers);
2829
2830void block_sync_page(struct page *page)
2831{
2832 struct address_space *mapping;
2833
2834 smp_mb();
2835 mapping = page_mapping(page);
2836 if (mapping)
2837 blk_run_backing_dev(mapping->backing_dev_info, page);
2838}
2839
2840
2841
2842
2843
2844
2845
2846
2847asmlinkage long sys_bdflush(int func, long data)
2848{
2849 static int msg_count;
2850
2851 if (!capable(CAP_SYS_ADMIN))
2852 return -EPERM;
2853
2854 if (msg_count < 5) {
2855 msg_count++;
2856 printk(KERN_INFO
2857 "warning: process `%s' used the obsolete bdflush"
2858 " system call\n", current->comm);
2859 printk(KERN_INFO "Fix your initscripts?\n");
2860 }
2861
2862 if (func == 1)
2863 do_exit(0);
2864 return 0;
2865}
2866
2867
2868
2869
2870static struct kmem_cache *bh_cachep;
2871
2872
2873
2874
2875
2876static int max_buffer_heads;
2877
2878int buffer_heads_over_limit;
2879
2880struct bh_accounting {
2881 int nr;
2882 int ratelimit;
2883};
2884
2885static DEFINE_PER_CPU(struct bh_accounting, bh_accounting) = {0, 0};
2886
2887static void recalc_bh_state(void)
2888{
2889 int i;
2890 int tot = 0;
2891
2892 if (__get_cpu_var(bh_accounting).ratelimit++ < 4096)
2893 return;
2894 __get_cpu_var(bh_accounting).ratelimit = 0;
2895 for_each_online_cpu(i)
2896 tot += per_cpu(bh_accounting, i).nr;
2897 buffer_heads_over_limit = (tot > max_buffer_heads);
2898}
2899
2900struct buffer_head *alloc_buffer_head(gfp_t gfp_flags)
2901{
2902 struct buffer_head *ret = kmem_cache_zalloc(bh_cachep, gfp_flags);
2903 if (ret) {
2904 INIT_LIST_HEAD(&ret->b_assoc_buffers);
2905 get_cpu_var(bh_accounting).nr++;
2906 recalc_bh_state();
2907 put_cpu_var(bh_accounting);
2908 }
2909 return ret;
2910}
2911EXPORT_SYMBOL(alloc_buffer_head);
2912
2913void free_buffer_head(struct buffer_head *bh)
2914{
2915 BUG_ON(!list_empty(&bh->b_assoc_buffers));
2916 kmem_cache_free(bh_cachep, bh);
2917 get_cpu_var(bh_accounting).nr--;
2918 recalc_bh_state();
2919 put_cpu_var(bh_accounting);
2920}
2921EXPORT_SYMBOL(free_buffer_head);
2922
2923static void buffer_exit_cpu(int cpu)
2924{
2925 int i;
2926 struct bh_lru *b = &per_cpu(bh_lrus, cpu);
2927
2928 for (i = 0; i < BH_LRU_SIZE; i++) {
2929 brelse(b->bhs[i]);
2930 b->bhs[i] = NULL;
2931 }
2932 get_cpu_var(bh_accounting).nr += per_cpu(bh_accounting, cpu).nr;
2933 per_cpu(bh_accounting, cpu).nr = 0;
2934 put_cpu_var(bh_accounting);
2935}
2936
2937static int buffer_cpu_notify(struct notifier_block *self,
2938 unsigned long action, void *hcpu)
2939{
2940 if (action == CPU_DEAD || action == CPU_DEAD_FROZEN)
2941 buffer_exit_cpu((unsigned long)hcpu);
2942 return NOTIFY_OK;
2943}
2944
2945void __init buffer_init(void)
2946{
2947 int nrpages;
2948
2949 bh_cachep = KMEM_CACHE(buffer_head,
2950 SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|SLAB_MEM_SPREAD);
2951
2952
2953
2954
2955 nrpages = (nr_free_buffer_pages() * 10) / 100;
2956 max_buffer_heads = nrpages * (PAGE_SIZE / sizeof(struct buffer_head));
2957 hotcpu_notifier(buffer_cpu_notify, 0);
2958}
2959
2960EXPORT_SYMBOL(__bforget);
2961EXPORT_SYMBOL(__brelse);
2962EXPORT_SYMBOL(__wait_on_buffer);
2963EXPORT_SYMBOL(block_commit_write);
2964EXPORT_SYMBOL(block_prepare_write);
2965EXPORT_SYMBOL(block_read_full_page);
2966EXPORT_SYMBOL(block_sync_page);
2967EXPORT_SYMBOL(block_truncate_page);
2968EXPORT_SYMBOL(block_write_full_page);
2969EXPORT_SYMBOL(cont_prepare_write);
2970EXPORT_SYMBOL(end_buffer_read_sync);
2971EXPORT_SYMBOL(end_buffer_write_sync);
2972EXPORT_SYMBOL(file_fsync);
2973EXPORT_SYMBOL(fsync_bdev);
2974EXPORT_SYMBOL(generic_block_bmap);
2975EXPORT_SYMBOL(generic_commit_write);
2976EXPORT_SYMBOL(generic_cont_expand);
2977EXPORT_SYMBOL(generic_cont_expand_simple);
2978EXPORT_SYMBOL(init_buffer);
2979EXPORT_SYMBOL(invalidate_bdev);
2980EXPORT_SYMBOL(ll_rw_block);
2981EXPORT_SYMBOL(mark_buffer_dirty);
2982EXPORT_SYMBOL(submit_bh);
2983EXPORT_SYMBOL(sync_dirty_buffer);
2984EXPORT_SYMBOL(unlock_buffer);
2985