Lines Matching refs:header

395 	struct rbd_image_header	header;
442 /* protects updating the header */
636 struct rbd_image_header *header);
939 /* The header has to start with the magic rbd header text */
954 * The size of a snapshot header has to fit in a size_t, and
964 * header must also be representable in a size_t.
976 static u32 rbd_obj_bytes(struct rbd_image_header *header)
978 return 1U << header->obj_order;
983 if (rbd_dev->header.stripe_unit == 0 ||
984 rbd_dev->header.stripe_count == 0) {
985 rbd_dev->header.stripe_unit = rbd_obj_bytes(&rbd_dev->header);
986 rbd_dev->header.stripe_count = 1;
989 rbd_dev->layout.stripe_unit = rbd_dev->header.stripe_unit;
990 rbd_dev->layout.stripe_count = rbd_dev->header.stripe_count;
991 rbd_dev->layout.object_size = rbd_obj_bytes(&rbd_dev->header);
992 rbd_dev->layout.pool_id = rbd_dev->header.data_pool_id == CEPH_NOPOOL ?
993 rbd_dev->spec->pool_id : rbd_dev->header.data_pool_id;
997 static void rbd_image_header_cleanup(struct rbd_image_header *header)
999 kfree(header->object_prefix);
1000 ceph_put_snap_context(header->snapc);
1001 kfree(header->snap_sizes);
1002 kfree(header->snap_names);
1004 memset(header, 0, sizeof(*header));
1008 * Fill an rbd image header with information from the given format 1
1009 * on-disk header.
1011 static int rbd_header_from_disk(struct rbd_image_header *header,
1054 sizeof(*header->snap_sizes),
1076 /* We won't fail any more, fill in the header */
1079 header->object_prefix = object_prefix;
1080 header->obj_order = ondisk->options.order;
1085 header->image_size = le64_to_cpu(ondisk->image_size);
1086 header->snapc = snapc;
1087 header->snap_names = snap_names;
1088 header->snap_sizes = snap_sizes;
1106 rbd_assert(which < rbd_dev->header.snapc->num_snaps);
1110 snap_name = rbd_dev->header.snap_names;
1143 struct ceph_snap_context *snapc = rbd_dev->header.snapc;
1183 *snap_size = rbd_dev->header.image_size;
1191 *snap_size = rbd_dev->header.snap_sizes[which];
1447 * the same namespace in that pool as the header in its pool.
1453 rbd_dev->header.object_prefix,
1692 * loaded because the header lock isn't acquired. Someone else can
1701 return ((rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP) &&
1811 ret = ceph_start_decoding(p, end, 1, "BitVector header", &struct_v,
2953 if (!(rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP))
3142 if (!(rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP))
3149 if ((rbd_dev->header.features & RBD_FEATURE_FAST_DIFF) &&
3287 if (!(rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP))
3421 if (!(rbd_dev->header.features & RBD_FEATURE_EXCLUSIVE_LOCK))
3429 (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP))
3505 img_req->snapc = ceph_get_snap_context(rbd_dev->header.snapc);
3703 rbd_warn(rbd_dev, "failed to unlock header: %d", ret);
3890 rbd_warn(rbd_dev, "failed to get header lockers: %d", ret);
4002 rbd_warn(rbd_dev, "failed to lock header: %d", ret);
4030 rbd_warn(rbd_dev, "breaking header lock owned by %s%llu",
4045 rbd_warn(rbd_dev, "failed to break header lock: %d",
4069 if (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP) {
4202 if (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)
4435 /* legacy notification for header updates */
4867 * Read the complete header for the given rbd device. On successful
4868 * return, the rbd_dev->header field will contain up-to-date
4872 struct rbd_image_header *header,
4882 * The complete header will include an array of its 64-bit
4906 rbd_warn(rbd_dev, "short header read (want %zd got %d)",
4912 rbd_warn(rbd_dev, "invalid header");
4921 ret = rbd_header_from_disk(header, ondisk, first_time);
5038 return sprintf(buf, "0x%016llx\n", rbd_dev->header.features);
5362 rbd_dev->header.data_pool_id = CEPH_NOPOOL;
5573 * (re)load and not on header refresh.
5921 struct ceph_snap_context *snapc = rbd_dev->header.snapc;
5927 snap_name = rbd_dev->header.snap_names;
5939 struct ceph_snap_context *snapc = rbd_dev->header.snapc;
6168 struct rbd_image_header *header,
6174 first_time ? &header->obj_order : NULL,
6175 &header->image_size);
6180 ret = rbd_dev_v2_header_onetime(rbd_dev, header);
6185 ret = rbd_dev_v2_snap_context(rbd_dev, &header->snapc);
6193 struct rbd_image_header *header,
6197 rbd_assert(!header->object_prefix && !header->snapc);
6200 return rbd_dev_v1_header_info(rbd_dev, header, first_time);
6202 return rbd_dev_v2_header_info(rbd_dev, header, first_time);
6565 if (!(rbd_dev->header.features & RBD_FEATURE_EXCLUSIVE_LOCK)) {
6685 * Undo whatever state changes are made by v1 or v2 header info
6694 /* Free dynamic fields from the header, then zero it out */
6696 rbd_image_header_cleanup(&rbd_dev->header);
6700 struct rbd_image_header *header)
6704 ret = rbd_dev_v2_object_prefix(rbd_dev, &header->object_prefix);
6713 rbd_is_ro(rbd_dev), &header->features);
6719 if (header->features & RBD_FEATURE_STRIPINGV2) {
6720 ret = rbd_dev_v2_striping_info(rbd_dev, &header->stripe_unit,
6721 &header->stripe_count);
6726 if (header->features & RBD_FEATURE_DATA_POOL) {
6727 ret = rbd_dev_v2_data_pool(rbd_dev, &header->data_pool_id);
6845 /* Record the header object name for this rbd image. */
6888 * Probe for the existence of the header object for the given rbd
6890 * parent), initiate a watch on its header object before using that
6927 ret = rbd_dev_header_info(rbd_dev, &rbd_dev->header, true);
6957 (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP)) {
6963 if (rbd_dev->header.features & RBD_FEATURE_LAYERING) {
6973 dout("discovered format %u image, header name is %s\n",
6991 struct rbd_image_header *header)
6994 rbd_assert(rbd_dev->header.object_prefix); /* !first_time */
6996 if (rbd_dev->header.image_size != header->image_size) {
6997 rbd_dev->header.image_size = header->image_size;
7000 rbd_dev->mapping.size = header->image_size;
7005 ceph_put_snap_context(rbd_dev->header.snapc);
7006 rbd_dev->header.snapc = header->snapc;
7007 header->snapc = NULL;
7010 kfree(rbd_dev->header.snap_names);
7011 rbd_dev->header.snap_names = header->snap_names;
7012 header->snap_names = NULL;
7014 kfree(rbd_dev->header.snap_sizes);
7015 rbd_dev->header.snap_sizes = header->snap_sizes;
7016 header->snap_sizes = NULL;
7059 struct rbd_image_header header = { 0 };
7065 ret = rbd_dev_header_info(rbd_dev, &header, false);
7080 rbd_dev_update_header(rbd_dev, &header);
7087 rbd_image_header_cleanup(&header);
7180 rbd_dev->header.features);