Browse Source

xen-blkfront: feature flags handling adjustments

Don't truncate the "feature-persistent" value read from xenstore: Any
non-zero value is supposed to enable the feature, just like is already
being done for feature_secdiscard.

Just like the other feature_* fields, feature_flush and feature_fua are
boolean flags, and hence fit well into a single bit.

Keep all bit fields together to limit gaps.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Jan Beulich 8 years ago
parent
commit
b32728ffef
1 changed files with 5 additions and 5 deletions
  1. 5 5
      drivers/block/xen-blkfront.c

+ 5 - 5
drivers/block/xen-blkfront.c

@@ -197,13 +197,13 @@ struct blkfront_info
 	/* Number of pages per ring buffer. */
 	/* Number of pages per ring buffer. */
 	unsigned int nr_ring_pages;
 	unsigned int nr_ring_pages;
 	struct request_queue *rq;
 	struct request_queue *rq;
-	unsigned int feature_flush;
-	unsigned int feature_fua;
+	unsigned int feature_flush:1;
+	unsigned int feature_fua:1;
 	unsigned int feature_discard:1;
 	unsigned int feature_discard:1;
 	unsigned int feature_secdiscard:1;
 	unsigned int feature_secdiscard:1;
+	unsigned int feature_persistent:1;
 	unsigned int discard_granularity;
 	unsigned int discard_granularity;
 	unsigned int discard_alignment;
 	unsigned int discard_alignment;
-	unsigned int feature_persistent:1;
 	/* Number of 4KB segments handled */
 	/* Number of 4KB segments handled */
 	unsigned int max_indirect_segments;
 	unsigned int max_indirect_segments;
 	int is_ready;
 	int is_ready;
@@ -2323,8 +2323,8 @@ static void blkfront_gather_backend_features(struct blkfront_info *info)
 		blkfront_setup_discard(info);
 		blkfront_setup_discard(info);
 
 
 	info->feature_persistent =
 	info->feature_persistent =
-		xenbus_read_unsigned(info->xbdev->otherend,
-				     "feature-persistent", 0);
+		!!xenbus_read_unsigned(info->xbdev->otherend,
+				       "feature-persistent", 0);
 
 
 	indirect_segments = xenbus_read_unsigned(info->xbdev->otherend,
 	indirect_segments = xenbus_read_unsigned(info->xbdev->otherend,
 					"feature-max-indirect-segments", 0);
 					"feature-max-indirect-segments", 0);