Lines Matching refs:ca

231 		for_each_online_member(c, ca) {
232 struct bch_sb_handle *dev_sb = &ca->disk_sb;
235 percpu_ref_put(&ca->io_ref);
536 for_each_member_device(c, ca) {
537 struct bch_member m = bch2_sb_member_get(src, ca->dev_idx);
538 ca->mi = bch2_mi_to_cpu(&m);
616 int bch2_sb_from_fs(struct bch_fs *c, struct bch_dev *ca)
618 return __copy_super(&ca->disk_sb, c->disk_sb.sb);
857 struct bch_dev *ca = bio->bi_private;
861 if (bch2_dev_io_err_on(bio->bi_status, ca,
868 ca->sb_write_error = 1;
870 closure_put(&ca->fs->sb_write);
871 percpu_ref_put(&ca->io_ref);
874 static void read_back_super(struct bch_fs *c, struct bch_dev *ca)
876 struct bch_sb *sb = ca->disk_sb.sb;
877 struct bio *bio = ca->disk_sb.bio;
879 bio_reset(bio, ca->disk_sb.bdev, REQ_OP_READ|REQ_SYNC|REQ_META);
882 bio->bi_private = ca;
883 bch2_bio_map(bio, ca->sb_read_scratch, PAGE_SIZE);
885 this_cpu_add(ca->io_done->sectors[READ][BCH_DATA_sb],
888 percpu_ref_get(&ca->io_ref);
892 static void write_one_super(struct bch_fs *c, struct bch_dev *ca, unsigned idx)
894 struct bch_sb *sb = ca->disk_sb.sb;
895 struct bio *bio = ca->disk_sb.bio;
903 bio_reset(bio, ca->disk_sb.bdev, REQ_OP_WRITE|REQ_SYNC|REQ_META);
906 bio->bi_private = ca;
909 bdev_logical_block_size(ca->disk_sb.bdev)));
911 this_cpu_add(ca->io_done->sectors[WRITE][BCH_DATA_sb],
914 percpu_ref_get(&ca->io_ref);
939 for_each_online_member(c, ca) {
940 ret = darray_push(&online_devices, ca);
942 percpu_ref_put(&ca->io_ref);
945 percpu_ref_get(&ca->io_ref);
955 darray_for_each(online_devices, ca)
956 __bch2_members_v2_get_mut(mi, (*ca)->dev_idx)->seq = c->disk_sb.sb->seq;
972 darray_for_each(online_devices, ca)
973 bch2_sb_from_fs(c, (*ca));
975 darray_for_each(online_devices, ca) {
978 ret = bch2_sb_validate(&(*ca)->disk_sb, BCH_VALIDATE_write, &err);
1007 darray_for_each(online_devices, ca) {
1008 __set_bit((*ca)->dev_idx, sb_written.d);
1009 (*ca)->sb_write_error = 0;
1012 darray_for_each(online_devices, ca)
1013 read_back_super(c, *ca);
1017 struct bch_dev *ca = *cap;
1019 if (ca->sb_write_error)
1022 if (le64_to_cpu(ca->sb_read_scratch->seq) < ca->disk_sb.seq) {
1025 prt_bdevname(&buf, ca->disk_sb.bdev);
1028 le64_to_cpu(ca->sb_read_scratch->seq),
1029 ca->disk_sb.seq);
1035 if (le64_to_cpu(ca->sb_read_scratch->seq) > ca->disk_sb.seq) {
1038 prt_bdevname(&buf, ca->disk_sb.bdev);
1041 le64_to_cpu(ca->sb_read_scratch->seq),
1042 ca->disk_sb.seq);
1055 struct bch_dev *ca = *cap;
1056 if (!ca->sb_write_error &&
1057 sb < ca->disk_sb.sb->layout.nr_superblocks) {
1058 write_one_super(c, ca, sb);
1067 struct bch_dev *ca = *cap;
1068 if (ca->sb_write_error)
1069 __clear_bit(ca->dev_idx, sb_written.d);
1071 ca->disk_sb.seq = le64_to_cpu(ca->disk_sb.sb->seq);
1103 darray_for_each(online_devices, ca)
1104 percpu_ref_put(&(*ca)->io_ref);