Lines Matching refs:area

39 static s64 logfs_get_free_bytes(struct logfs_area *area, size_t bytes)  in logfs_get_free_bytes()  argument
43 logfs_open_area(area, bytes); in logfs_get_free_bytes()
45 ofs = area->a_used_bytes; in logfs_get_free_bytes()
46 area->a_used_bytes += bytes; in logfs_get_free_bytes()
47 BUG_ON(area->a_used_bytes >= logfs_super(area->a_sb)->s_segsize); in logfs_get_free_bytes()
49 return dev_ofs(area->a_sb, area->a_segno, ofs); in logfs_get_free_bytes()
71 int __logfs_buf_write(struct logfs_area *area, u64 ofs, void *buf, size_t len, in __logfs_buf_write() argument
84 page = get_mapping_page(area->a_sb, index, use_filler); in __logfs_buf_write()
105 static void pad_partial_page(struct logfs_area *area) in pad_partial_page() argument
107 struct super_block *sb = area->a_sb; in pad_partial_page()
109 u64 ofs = dev_ofs(sb, area->a_segno, area->a_used_bytes); in pad_partial_page()
126 static void pad_full_pages(struct logfs_area *area) in pad_full_pages() argument
128 struct super_block *sb = area->a_sb; in pad_full_pages()
130 u64 ofs = dev_ofs(sb, area->a_segno, area->a_used_bytes); in pad_full_pages()
131 u32 len = super->s_segsize - area->a_used_bytes; in pad_full_pages()
155 static void pad_wbuf(struct logfs_area *area, int final) in pad_wbuf() argument
157 pad_partial_page(area); in pad_wbuf()
159 pad_full_pages(area); in pad_wbuf()
296 struct logfs_area *area; in __logfs_segment_write() local
307 area = get_area(sb, shadow->gc_level); in __logfs_segment_write()
308 ofs = logfs_get_free_bytes(area, len + LOGFS_OBJECT_HEADERSIZE); in __logfs_segment_write()
326 logfs_buf_write(area, ofs, &h, sizeof(h)); in __logfs_segment_write()
327 logfs_buf_write(area, ofs + LOGFS_OBJECT_HEADERSIZE, buf, len); in __logfs_segment_write()
732 int logfs_open_area(struct logfs_area *area, size_t bytes) in logfs_open_area() argument
734 struct super_block *sb = area->a_sb; in logfs_open_area()
738 if (area->a_is_open && area->a_used_bytes + bytes <= super->s_segsize) in logfs_open_area()
741 if (area->a_is_open) { in logfs_open_area()
742 u64 ofs = dev_ofs(sb, area->a_segno, area->a_written_bytes); in logfs_open_area()
743 u32 len = super->s_segsize - area->a_written_bytes; in logfs_open_area()
745 log_gc("logfs_close_area(%x)\n", area->a_segno); in logfs_open_area()
746 pad_wbuf(area, 1); in logfs_open_area()
747 super->s_devops->writeseg(area->a_sb, ofs, len); in logfs_open_area()
748 freeseg(sb, area->a_segno); in logfs_open_area()
752 area->a_used_bytes = 0; in logfs_open_area()
753 area->a_written_bytes = 0; in logfs_open_area()
755 area->a_ops->get_free_segment(area); in logfs_open_area()
756 area->a_ops->get_erase_count(area); in logfs_open_area()
758 log_gc("logfs_open_area(%x, %x)\n", area->a_segno, area->a_level); in logfs_open_area()
759 err = area->a_ops->erase_segment(area); in logfs_open_area()
762 area->a_segno); in logfs_open_area()
763 logfs_mark_segment_bad(sb, area->a_segno); in logfs_open_area()
766 area->a_is_open = 1; in logfs_open_area()
770 void logfs_sync_area(struct logfs_area *area) in logfs_sync_area() argument
772 struct super_block *sb = area->a_sb; in logfs_sync_area()
774 u64 ofs = dev_ofs(sb, area->a_segno, area->a_written_bytes); in logfs_sync_area()
775 u32 len = (area->a_used_bytes - area->a_written_bytes); in logfs_sync_area()
781 pad_wbuf(area, 0); in logfs_sync_area()
783 area->a_written_bytes += len; in logfs_sync_area()
799 static void ostore_get_free_segment(struct logfs_area *area) in ostore_get_free_segment() argument
801 struct super_block *sb = area->a_sb; in ostore_get_free_segment()
809 area->a_segno = get_best_cand(sb, &super->s_free_list, NULL); in ostore_get_free_segment()
812 static void ostore_get_erase_count(struct logfs_area *area) in ostore_get_erase_count() argument
817 logfs_get_segment_entry(area->a_sb, area->a_segno, &se); in ostore_get_erase_count()
822 area->a_erase_count = (ec_level >> 4) + 1; in ostore_get_erase_count()
825 static int ostore_erase_segment(struct logfs_area *area) in ostore_erase_segment() argument
827 struct super_block *sb = area->a_sb; in ostore_erase_segment()
832 err = logfs_erase_segment(sb, area->a_segno, 0); in ostore_erase_segment()
838 sh.level = (__force u8)area->a_level; in ostore_erase_segment()
839 sh.segno = cpu_to_be32(area->a_segno); in ostore_erase_segment()
840 sh.ec = cpu_to_be32(area->a_erase_count); in ostore_erase_segment()
844 logfs_set_segment_erased(sb, area->a_segno, area->a_erase_count, in ostore_erase_segment()
845 area->a_level); in ostore_erase_segment()
847 ofs = dev_ofs(sb, area->a_segno, 0); in ostore_erase_segment()
848 area->a_used_bytes = sizeof(sh); in ostore_erase_segment()
849 logfs_buf_write(area, ofs, &sh, sizeof(sh)); in ostore_erase_segment()
859 static void free_area(struct logfs_area *area) in free_area() argument
861 if (area) in free_area()
862 freeseg(area->a_sb, area->a_segno); in free_area()
863 kfree(area); in free_area()
878 struct logfs_area *area; in alloc_area() local
880 area = kzalloc(sizeof(*area), GFP_KERNEL); in alloc_area()
881 if (!area) in alloc_area()
884 area->a_sb = sb; in alloc_area()
885 return area; in alloc_area()