/* * Given a file descriptor, clear (zero) the label information. */ int zpool_clear_label(int fd) { struct stat statbuf; int l; vdev_label_t *label; uint64_t size; if (fstat_blk(fd, &statbuf) == -1) return (0); size = P2ALIGN_TYPED(statbuf.st_size, sizeof (vdev_label_t), uint64_t); if ((label = calloc(sizeof (vdev_label_t), 1)) == NULL) return (-1); for (l = 0; l < VDEV_LABELS; l++) { if (pwrite64(fd, label, sizeof (vdev_label_t), label_offset(size, l)) != sizeof (vdev_label_t)) { free(label); return (-1); } } free(label); return (0); }
/* * Given a file descriptor, read the label information and return an nvlist * describing the configuration, if there is one. */ int zpool_read_label(int fd, nvlist_t **config) { struct stat64 statbuf; int l; vdev_label_t *label; uint64_t state, txg, size; *config = NULL; if (fstat64(fd, &statbuf) == -1) return (0); size = P2ALIGN_TYPED(statbuf.st_size, sizeof (vdev_label_t), uint64_t); if ((label = malloc(sizeof (vdev_label_t))) == NULL) return (-1); for (l = 0; l < VDEV_LABELS; l++) { if (pread64(fd, label, sizeof (vdev_label_t), label_offset(size, l)) != sizeof (vdev_label_t)) continue; if (nvlist_unpack(label->vl_vdev_phys.vp_nvlist, sizeof (label->vl_vdev_phys.vp_nvlist), config, 0) != 0) continue; if (nvlist_lookup_uint64(*config, ZPOOL_CONFIG_POOL_STATE, &state) != 0 || state > POOL_STATE_L2CACHE) { nvlist_free(*config); continue; } if (state != POOL_STATE_SPARE && state != POOL_STATE_L2CACHE && (nvlist_lookup_uint64(*config, ZPOOL_CONFIG_POOL_TXG, &txg) != 0 || txg == 0)) { nvlist_free(*config); continue; } free(label); return (0); } free(label); *config = NULL; return (0); }
TYPED_TEST(AccuracyLayerTest, TestForwardWithSpatialAxes) { Caffe::set_mode(Caffe::CPU); this->blob_bottom_data_->Reshape(2, 10, 4, 5); vector<int> label_shape(3); label_shape[0] = 2; label_shape[1] = 4; label_shape[2] = 5; this->blob_bottom_label_->Reshape(label_shape); this->FillBottoms(); LayerParameter layer_param; layer_param.mutable_accuracy_param()->set_axis(1); AccuracyLayer<TypeParam> layer(layer_param); layer.SetUp(this->blob_bottom_vec_, this->blob_top_vec_); layer.Forward(this->blob_bottom_vec_, this->blob_top_vec_); TypeParam max_value; const int num_labels = this->blob_bottom_label_->count(); int max_id; int num_correct_labels = 0; vector<int> label_offset(3); for (int n = 0; n < this->blob_bottom_data_->num(); ++n) { for (int h = 0; h < this->blob_bottom_data_->height(); ++h) { for (int w = 0; w < this->blob_bottom_data_->width(); ++w) { max_value = -FLT_MAX; max_id = 0; for (int c = 0; c < this->blob_bottom_data_->channels(); ++c) { const TypeParam pred_value = this->blob_bottom_data_->data_at(n, c, h, w); if (pred_value > max_value) { max_value = pred_value; max_id = c; } } label_offset[0] = n; label_offset[1] = h; label_offset[2] = w; const int correct_label = static_cast<int>(this->blob_bottom_label_->data_at(label_offset)); if (max_id == correct_label) { ++num_correct_labels; } } } } EXPECT_NEAR(this->blob_top_->data_at(0, 0, 0, 0), num_correct_labels / TypeParam(num_labels), 1e-4); }
/* * Given a file descriptor, read the label information and return an nvlist * describing the configuration, if there is one. * Return 0 on success, or -1 on failure */ int zpool_read_label(int fd, nvlist_t **config, int *num_labels) { struct stat statbuf; int l, count = 0; vdev_label_t *label; nvlist_t *expected_config = NULL; uint64_t expected_guid = 0, size; *config = NULL; if (fstat(fd, &statbuf) == -1) return (-1); size = P2ALIGN_TYPED(statbuf.st_size, sizeof (vdev_label_t), uint64_t); if ((label = malloc(sizeof (vdev_label_t))) == NULL) return (-1); for (l = 0; l < VDEV_LABELS; l++) { uint64_t state, guid, txg; if (pread(fd, label, sizeof (vdev_label_t), label_offset(size, l)) != sizeof (vdev_label_t)) continue; if (nvlist_unpack(label->vl_vdev_phys.vp_nvlist, sizeof (label->vl_vdev_phys.vp_nvlist), config, 0) != 0) continue; if (nvlist_lookup_uint64(*config, ZPOOL_CONFIG_GUID, &guid) != 0 || guid == 0) { nvlist_free(*config); continue; } if (nvlist_lookup_uint64(*config, ZPOOL_CONFIG_POOL_STATE, &state) != 0 || state > POOL_STATE_L2CACHE) { nvlist_free(*config); continue; } if (state != POOL_STATE_SPARE && state != POOL_STATE_L2CACHE && (nvlist_lookup_uint64(*config, ZPOOL_CONFIG_POOL_TXG, &txg) != 0 || txg == 0)) { nvlist_free(*config); continue; } if (expected_guid) { if (expected_guid == guid) count++; nvlist_free(*config); } else { expected_config = *config; expected_guid = guid; count++; } } if (num_labels != NULL) *num_labels = count; free(label); *config = expected_config; return (0); }
void set_label(BinaryAssembler::Label& value) { int_field_put(label_offset(), value._encoding); }
BinaryAssembler::Label label() { BinaryAssembler::Label L; L._encoding = int_field(label_offset()); return L; }