Lines Matching refs:sb
54 static void dump_segfile(struct super_block *sb) in dump_segfile() argument
56 struct logfs_super *super = logfs_super(sb); in dump_segfile()
61 logfs_get_segment_entry(sb, segno, &se); in dump_segfile()
65 logfs_get_segment_entry(sb, segno, &se); in dump_segfile()
70 logfs_get_segment_entry(sb, segno, &se); in dump_segfile()
75 logfs_get_segment_entry(sb, segno, &se); in dump_segfile()
89 void logfs_crash_dump(struct super_block *sb) in logfs_crash_dump() argument
91 dump_segfile(sb); in logfs_crash_dump()
99 struct super_block *sb = dentry->d_sb; in logfs_statfs() local
100 struct logfs_super *super = logfs_super(sb); in logfs_statfs()
103 stats->f_bsize = sb->s_blocksize; in logfs_statfs()
105 stats->f_bfree = super->s_free_bytes >> sb->s_blocksize_bits; in logfs_statfs()
106 stats->f_bavail = super->s_free_bytes >> sb->s_blocksize_bits; in logfs_statfs()
113 static int logfs_sb_set(struct super_block *sb, void *_super) in logfs_sb_set() argument
117 sb->s_fs_info = super; in logfs_sb_set()
118 sb->s_mtd = super->s_mtd; in logfs_sb_set()
119 sb->s_bdev = super->s_bdev; in logfs_sb_set()
121 if (sb->s_bdev) in logfs_sb_set()
122 sb->s_bdi = &bdev_get_queue(sb->s_bdev)->backing_dev_info; in logfs_sb_set()
125 if (sb->s_mtd) in logfs_sb_set()
126 sb->s_bdi = sb->s_mtd->backing_dev_info; in logfs_sb_set()
131 static int logfs_sb_test(struct super_block *sb, void *_super) in logfs_sb_test() argument
136 if (mtd && sb->s_mtd == mtd) in logfs_sb_test()
138 if (super->s_bdev && sb->s_bdev == super->s_bdev) in logfs_sb_test()
155 static void logfs_write_ds(struct super_block *sb, struct logfs_disk_super *ds, in logfs_write_ds() argument
158 struct logfs_super *super = logfs_super(sb); in logfs_write_ds()
169 ds->ds_block_shift = sb->s_blocksize_bits; in logfs_write_ds()
187 static int write_one_sb(struct super_block *sb, in write_one_sb() argument
188 struct page *(*find_sb)(struct super_block *sb, u64 *ofs)) in write_one_sb() argument
190 struct logfs_super *super = logfs_super(sb); in write_one_sb()
198 page = find_sb(sb, &ofs); in write_one_sb()
202 segno = seg_no(sb, ofs); in write_one_sb()
203 logfs_get_segment_entry(sb, segno, &se); in write_one_sb()
206 logfs_set_segment_erased(sb, segno, ec, 0); in write_one_sb()
207 logfs_write_ds(sb, ds, segno, ec); in write_one_sb()
208 err = super->s_devops->write_sb(sb, page); in write_one_sb()
213 int logfs_write_sb(struct super_block *sb) in logfs_write_sb() argument
215 struct logfs_super *super = logfs_super(sb); in logfs_write_sb()
219 err = write_one_sb(sb, super->s_devops->find_first_sb); in logfs_write_sb()
224 err = write_one_sb(sb, super->s_devops->find_last_sb); in logfs_write_sb()
241 static int logfs_recover_sb(struct super_block *sb) in logfs_recover_sb() argument
243 struct logfs_super *super = logfs_super(sb); in logfs_recover_sb()
249 err = wbuf_read(sb, super->s_sb_ofs[0], sizeof(*ds0), ds0); in logfs_recover_sb()
253 err = wbuf_read(sb, super->s_sb_ofs[1], sizeof(*ds1), ds1); in logfs_recover_sb()
261 return write_one_sb(sb, super->s_devops->find_first_sb); in logfs_recover_sb()
265 return write_one_sb(sb, super->s_devops->find_last_sb); in logfs_recover_sb()
269 return logfs_write_sb(sb); in logfs_recover_sb()
277 static int logfs_make_writeable(struct super_block *sb) in logfs_make_writeable() argument
281 err = logfs_open_segfile(sb); in logfs_make_writeable()
286 err = logfs_recover_sb(sb); in logfs_make_writeable()
291 err = logfs_check_areas(sb); in logfs_make_writeable()
296 logfs_gc_pass(sb); in logfs_make_writeable()
300 err = logfs_replay_journal(sb); in logfs_make_writeable()
307 static int logfs_get_sb_final(struct super_block *sb) in logfs_get_sb_final() argument
309 struct logfs_super *super = logfs_super(sb); in logfs_get_sb_final()
314 rootdir = logfs_iget(sb, LOGFS_INO_ROOT); in logfs_get_sb_final()
318 sb->s_root = d_make_root(rootdir); in logfs_get_sb_final()
319 if (!sb->s_root) in logfs_get_sb_final()
329 err = logfs_make_writeable(sb); in logfs_get_sb_final()
359 static struct page *find_super_block(struct super_block *sb) in find_super_block() argument
361 struct logfs_super *super = logfs_super(sb); in find_super_block()
364 first = super->s_devops->find_first_sb(sb, &super->s_sb_ofs[0]); in find_super_block()
367 last = super->s_devops->find_last_sb(sb, &super->s_sb_ofs[1]); in find_super_block()
390 static int __logfs_read_sb(struct super_block *sb) in __logfs_read_sb() argument
392 struct logfs_super *super = logfs_super(sb); in __logfs_read_sb()
397 page = find_super_block(sb); in __logfs_read_sb()
409 sb->s_blocksize = 1 << ds->ds_block_shift; in __logfs_read_sb()
410 sb->s_blocksize_bits = ds->ds_block_shift; in __logfs_read_sb()
414 super->s_no_blocks = super->s_segsize >> sb->s_blocksize_bits; in __logfs_read_sb()
432 static int logfs_read_sb(struct super_block *sb, int read_only) in logfs_read_sb() argument
434 struct logfs_super *super = logfs_super(sb); in logfs_read_sb()
446 ret = logfs_init_mapping(sb); in logfs_read_sb()
450 ret = __logfs_read_sb(sb); in logfs_read_sb()
460 ret = logfs_init_rw(sb); in logfs_read_sb()
464 ret = logfs_init_areas(sb); in logfs_read_sb()
468 ret = logfs_init_gc(sb); in logfs_read_sb()
472 ret = logfs_init_journal(sb); in logfs_read_sb()
479 static void logfs_kill_sb(struct super_block *sb) in logfs_kill_sb() argument
481 struct logfs_super *super = logfs_super(sb); in logfs_kill_sb()
485 sync_filesystem(sb); in logfs_kill_sb()
486 logfs_write_anchor(sb); in logfs_kill_sb()
487 free_areas(sb); in logfs_kill_sb()
494 generic_shutdown_super(sb); in logfs_kill_sb()
499 logfs_cleanup_gc(sb); in logfs_kill_sb()
500 logfs_cleanup_journal(sb); in logfs_kill_sb()
501 logfs_cleanup_areas(sb); in logfs_kill_sb()
502 logfs_cleanup_rw(sb); in logfs_kill_sb()
515 struct super_block *sb; in logfs_get_sb_device() local
522 sb = sget(type, logfs_sb_test, logfs_sb_set, flags | MS_NOATIME, super); in logfs_get_sb_device()
523 if (IS_ERR(sb)) { in logfs_get_sb_device()
526 return ERR_CAST(sb); in logfs_get_sb_device()
529 if (sb->s_root) { in logfs_get_sb_device()
533 return dget(sb->s_root); in logfs_get_sb_device()
542 sb->s_maxbytes = (1ull << 43) - 1; in logfs_get_sb_device()
543 sb->s_max_links = LOGFS_LINK_MAX; in logfs_get_sb_device()
544 sb->s_op = &logfs_super_operations; in logfs_get_sb_device()
546 err = logfs_read_sb(sb, sb->s_flags & MS_RDONLY); in logfs_get_sb_device()
550 sb->s_flags |= MS_ACTIVE; in logfs_get_sb_device()
551 err = logfs_get_sb_final(sb); in logfs_get_sb_device()
553 deactivate_locked_super(sb); in logfs_get_sb_device()
556 return dget(sb->s_root); in logfs_get_sb_device()
563 deactivate_locked_super(sb); in logfs_get_sb_device()