Lines Matching refs:sb

11 static void logfs_calc_free(struct super_block *sb)  in logfs_calc_free()  argument
13 struct logfs_super *super = logfs_super(sb); in logfs_calc_free()
50 static void reserve_sb_and_journal(struct super_block *sb) in reserve_sb_and_journal() argument
52 struct logfs_super *super = logfs_super(sb); in reserve_sb_and_journal()
56 err = btree_insert32(head, seg_no(sb, super->s_sb_ofs[0]), (void *)1, in reserve_sb_and_journal()
60 err = btree_insert32(head, seg_no(sb, super->s_sb_ofs[1]), (void *)1, in reserve_sb_and_journal()
73 static void read_dynsb(struct super_block *sb, in read_dynsb() argument
76 struct logfs_super *super = logfs_super(sb); in read_dynsb()
87 static void read_anchor(struct super_block *sb, in read_anchor() argument
90 struct logfs_super *super = logfs_super(sb); in read_anchor()
105 static void read_erasecount(struct super_block *sb, in read_erasecount() argument
108 struct logfs_super *super = logfs_super(sb); in read_erasecount()
115 static int read_area(struct super_block *sb, struct logfs_je_area *a) in read_area() argument
117 struct logfs_super *super = logfs_super(sb); in read_area()
133 ofs = dev_ofs(sb, area->a_segno, area->a_written_bytes); in read_area()
159 static int __read_je_header(struct super_block *sb, u64 ofs, in __read_je_header() argument
162 struct logfs_super *super = logfs_super(sb); in __read_je_header()
163 size_t bufsize = max_t(size_t, sb->s_blocksize, super->s_writesize) in __read_je_header()
169 err = wbuf_read(sb, ofs, sizeof(*jh), jh); in __read_je_header()
175 if (len > sb->s_blocksize) in __read_je_header()
184 static int __read_je_payload(struct super_block *sb, u64 ofs, in __read_je_payload() argument
191 err = wbuf_read(sb, ofs + sizeof(*jh), len, jh + 1); in __read_je_payload()
211 static int __read_je(struct super_block *sb, u64 ofs, in __read_je() argument
216 err = __read_je_header(sb, ofs, jh); in __read_je()
219 return __read_je_payload(sb, ofs, jh); in __read_je()
222 static int read_je(struct super_block *sb, u64 ofs) in read_je() argument
224 struct logfs_super *super = logfs_super(sb); in read_je()
230 err = __read_je(sb, ofs, jh); in read_je()
238 read_dynsb(sb, unpack(jh, scratch)); in read_je()
241 read_anchor(sb, unpack(jh, scratch)); in read_je()
244 read_erasecount(sb, unpack(jh, scratch)); in read_je()
247 err = read_area(sb, unpack(jh, scratch)); in read_je()
250 err = logfs_load_object_aliases(sb, unpack(jh, scratch), in read_je()
260 static int logfs_read_segment(struct super_block *sb, u32 segno) in logfs_read_segment() argument
262 struct logfs_super *super = logfs_super(sb); in logfs_read_segment()
264 u64 ofs, seg_ofs = dev_ofs(sb, segno, 0); in logfs_read_segment()
272 err = __read_je_header(sb, ofs, jh); in logfs_read_segment()
277 err = __read_je_payload(sb, ofs, jh); in logfs_read_segment()
294 err = __read_je(sb, ofs, jh); in logfs_read_segment()
303 err = read_je(sb, be64_to_cpu(super->s_je_array[i])); in logfs_read_segment()
311 static u64 read_gec(struct super_block *sb, u32 segno) in read_gec() argument
319 err = wbuf_read(sb, dev_ofs(sb, segno, 0), sizeof(sh), &sh); in read_gec()
331 static int logfs_read_journal(struct super_block *sb) in logfs_read_journal() argument
333 struct logfs_super *super = logfs_super(sb); in logfs_read_journal()
342 gec[i] = read_gec(sb, super->s_journal_seg[i]); in logfs_read_journal()
351 return logfs_read_segment(sb, super->s_journal_seg[max_i]); in logfs_read_journal()
390 struct super_block *sb = area->a_sb; in journal_erase_segment() local
398 err = logfs_erase_segment(sb, area->a_segno, 1); in journal_erase_segment()
408 u.sh.gec = cpu_to_be64(logfs_super(sb)->s_gec); in journal_erase_segment()
414 ofs = dev_ofs(sb, area->a_segno, 0); in journal_erase_segment()
450 static void *logfs_write_erasecount(struct super_block *sb, void *_ec, in logfs_write_erasecount() argument
453 struct logfs_super *super = logfs_super(sb); in logfs_write_erasecount()
468 struct super_block *sb = (void *)_sb; in account_shadow() local
469 struct logfs_super *super = logfs_super(sb); in account_shadow()
481 logfs_set_segment_used(sb, shadow->old_ofs, -shadow->old_len); in account_shadow()
482 logfs_set_segment_used(sb, shadow->new_ofs, shadow->new_len); in account_shadow()
491 static void account_shadows(struct super_block *sb) in account_shadows() argument
493 struct logfs_super *super = logfs_super(sb); in account_shadows()
498 btree_grim_visitor64(&tree->new, (unsigned long)sb, account_shadow); in account_shadows()
499 btree_grim_visitor64(&tree->old, (unsigned long)sb, account_shadow); in account_shadows()
510 li->li_block->ops->free_block(sb, li->li_block); in account_shadows()
515 static void *__logfs_write_anchor(struct super_block *sb, void *_da, in __logfs_write_anchor() argument
518 struct logfs_super *super = logfs_super(sb); in __logfs_write_anchor()
535 static void *logfs_write_dynsb(struct super_block *sb, void *_dynsb, in logfs_write_dynsb() argument
538 struct logfs_super *super = logfs_super(sb); in logfs_write_dynsb()
553 static void write_wbuf(struct super_block *sb, struct logfs_area *area, in write_wbuf() argument
556 struct logfs_super *super = logfs_super(sb); in write_wbuf()
563 ofs = dev_ofs(sb, area->a_segno, in write_wbuf()
574 static void *logfs_write_area(struct super_block *sb, void *_a, in logfs_write_area() argument
577 struct logfs_super *super = logfs_super(sb); in logfs_write_area()
586 write_wbuf(sb, area, a + 1); in logfs_write_area()
593 static void *logfs_write_commit(struct super_block *sb, void *h, in logfs_write_commit() argument
596 struct logfs_super *super = logfs_super(sb); in logfs_write_commit()
603 static size_t __logfs_write_je(struct super_block *sb, void *buf, u16 type, in __logfs_write_je() argument
606 struct logfs_super *super = logfs_super(sb); in __logfs_write_je()
615 compr_len = logfs_compress(buf, data, len, sb->s_blocksize); in __logfs_write_je()
650 static int logfs_write_je_buf(struct super_block *sb, void *buf, u16 type, in logfs_write_je_buf() argument
653 struct logfs_super *super = logfs_super(sb); in logfs_write_je_buf()
660 len = __logfs_write_je(sb, buf, type, buf_len); in logfs_write_je_buf()
673 static int logfs_write_je(struct super_block *sb, in logfs_write_je() argument
674 void* (*write)(struct super_block *sb, void *scratch, in logfs_write_je() argument
681 buf = write(sb, logfs_super(sb)->s_je, &type, &len); in logfs_write_je()
682 return logfs_write_je_buf(sb, buf, type, len); in logfs_write_je()
685 int write_alias_journal(struct super_block *sb, u64 ino, u64 bix, in write_alias_journal() argument
688 struct logfs_super *super = logfs_super(sb); in write_alias_journal()
700 if (fill >= sb->s_blocksize / sizeof(*oa)) { in write_alias_journal()
701 err = logfs_write_je_buf(sb, oa, JE_OBJ_ALIAS, sb->s_blocksize); in write_alias_journal()
709 static int logfs_write_obj_aliases(struct super_block *sb) in logfs_write_obj_aliases() argument
711 struct logfs_super *super = logfs_super(sb); in logfs_write_obj_aliases()
717 err = logfs_write_obj_aliases_pagecache(sb); in logfs_write_obj_aliases()
722 err = logfs_write_je_buf(sb, super->s_je, JE_OBJ_ALIAS, in logfs_write_obj_aliases()
734 void logfs_write_anchor(struct super_block *sb) in logfs_write_anchor() argument
736 struct logfs_super *super = logfs_super(sb); in logfs_write_anchor()
748 logfs_sync_segments(sb); in logfs_write_anchor()
749 account_shadows(sb); in logfs_write_anchor()
757 err = logfs_write_je(sb, logfs_write_area); in logfs_write_anchor()
761 err = logfs_write_obj_aliases(sb); in logfs_write_anchor()
764 err = logfs_write_je(sb, logfs_write_erasecount); in logfs_write_anchor()
767 err = logfs_write_je(sb, __logfs_write_anchor); in logfs_write_anchor()
770 err = logfs_write_je(sb, logfs_write_dynsb); in logfs_write_anchor()
791 super->s_devops->sync(sb); in logfs_write_anchor()
792 err = logfs_write_je(sb, logfs_write_commit); in logfs_write_anchor()
799 super->s_devops->sync(sb); in logfs_write_anchor()
805 void do_logfs_journal_wl_pass(struct super_block *sb) in do_logfs_journal_wl_pass() argument
807 struct logfs_super *super = logfs_super(sb); in do_logfs_journal_wl_pass()
818 logfs_set_segment_unreserved(sb, in do_logfs_journal_wl_pass()
826 segno = get_best_cand(sb, &super->s_reserve_list, &ec); in do_logfs_journal_wl_pass()
829 logfs_set_segment_reserved(sb, segno); in do_logfs_journal_wl_pass()
832 err = logfs_erase_segment(sb, segno, 1); in do_logfs_journal_wl_pass()
836 freeseg(sb, area->a_segno); in do_logfs_journal_wl_pass()
841 logfs_write_anchor(sb); in do_logfs_journal_wl_pass()
843 err = logfs_write_sb(sb); in do_logfs_journal_wl_pass()
853 int logfs_init_journal(struct super_block *sb) in logfs_init_journal() argument
855 struct logfs_super *super = logfs_super(sb); in logfs_init_journal()
856 size_t bufsize = max_t(size_t, sb->s_blocksize, super->s_writesize) in logfs_init_journal()
871 super->s_master_inode = logfs_new_meta_inode(sb, LOGFS_INO_MASTER); in logfs_init_journal()
875 ret = logfs_read_journal(sb); in logfs_init_journal()
879 reserve_sb_and_journal(sb); in logfs_init_journal()
880 logfs_calc_free(sb); in logfs_init_journal()
886 void logfs_cleanup_journal(struct super_block *sb) in logfs_cleanup_journal() argument
888 struct logfs_super *super = logfs_super(sb); in logfs_cleanup_journal()