static bool faulty_make_request(struct mddev *mddev, struct bio *bio) { struct faulty_conf *conf = mddev->private; int failit = 0; if (bio_data_dir(bio) == WRITE) { /* write request */ if (atomic_read(&conf->counters[WriteAll])) { /* special case - don't decrement, don't generic_make_request, * just fail immediately */ bio_io_error(bio); return true; } if (check_sector(conf, bio->bi_iter.bi_sector, bio_end_sector(bio), WRITE)) failit = 1; if (check_mode(conf, WritePersistent)) { add_sector(conf, bio->bi_iter.bi_sector, WritePersistent); failit = 1; } if (check_mode(conf, WriteTransient)) failit = 1; } else { /* read request */ if (check_sector(conf, bio->bi_iter.bi_sector, bio_end_sector(bio), READ)) failit = 1; if (check_mode(conf, ReadTransient)) failit = 1; if (check_mode(conf, ReadPersistent)) { add_sector(conf, bio->bi_iter.bi_sector, ReadPersistent); failit = 1; } if (check_mode(conf, ReadFixable)) { add_sector(conf, bio->bi_iter.bi_sector, ReadFixable); failit = 1; } } if (failit) { struct bio *b = bio_clone_fast(bio, GFP_NOIO, mddev->bio_set); bio_set_dev(b, conf->rdev->bdev); b->bi_private = bio; b->bi_end_io = faulty_fail; bio = b; } else bio_set_dev(bio, conf->rdev->bdev); generic_make_request(bio); return true; }
void EditorSectorsMenu::create_sector() { auto level = Editor::current()->get_level(); auto new_sector = SectorParser::from_nothing(*level); if (!new_sector) { log_warning << "Failed to create a new sector." << std::endl; return; } // Find an unique name std::string sector_name; int num = 2; do { sector_name = "sector" + std::to_string(num); num++; } while ( level->get_sector(sector_name) ); new_sector->set_name(sector_name); level->add_sector(std::move(new_sector)); Editor::current()->load_sector(sector_name); MenuManager::instance().clear_menu_stack(); Editor::current()->m_reactivate_request = true; }
void World::load(std::string const &filename) { std::ifstream map; map.open(filename, std::fstream::in); if (!map.is_open()) { throw std::runtime_error(filename + " does not exist"); } std::string line; std::vector<Vertex> vertices; sectors.clear(); while (std::getline(map, line)) { std::istringstream ss(line); std::string type; ss >> type; if (type == "vertex") { add_vertices(ss, vertices); } else if (type == "sector") { add_sector(ss, vertices); } else if (type == "player") { player = create_player(ss); } else { throw std::runtime_error("Could not load map. Invalid data format found in " + filename); } } map.close(); }