module_param_named(cache_size, g_cache_size, ulong, 0444);
 MODULE_PARM_DESC(mbps, "Cache size in MiB for memory-backed device. Default: 0 (none)");
 
+static bool g_fua = true;
+module_param_named(fua, g_fua, bool, 0444);
+MODULE_PARM_DESC(zoned, "Enable/disable FUA support when cache_size is used. Default: true");
+
 static unsigned int g_mbps;
 module_param_named(mbps, g_mbps, uint, 0444);
 MODULE_PARM_DESC(mbps, "Limit maximum bandwidth (in MiB/s). Default: 0 (no limit)");
 NULLB_DEVICE_ATTR(no_sched, bool, NULL);
 NULLB_DEVICE_ATTR(shared_tags, bool, NULL);
 NULLB_DEVICE_ATTR(shared_tag_bitmap, bool, NULL);
+NULLB_DEVICE_ATTR(fua, bool, NULL);
 
 static ssize_t nullb_device_power_show(struct config_item *item, char *page)
 {
        &nullb_device_attr_no_sched,
        &nullb_device_attr_shared_tags,
        &nullb_device_attr_shared_tag_bitmap,
+       &nullb_device_attr_fua,
        NULL,
 };
 
 static ssize_t memb_group_features_show(struct config_item *item, char *page)
 {
        return snprintf(page, PAGE_SIZE,
-                       "badblocks,blocking,blocksize,cache_size,"
+                       "badblocks,blocking,blocksize,cache_size,fua,"
                        "completion_nsec,discard,home_node,hw_queue_depth,"
                        "irqmode,max_sectors,mbps,memory_backed,no_sched,"
                        "poll_queues,power,queue_mode,shared_tag_bitmap,"
        dev->no_sched = g_no_sched;
        dev->shared_tags = g_shared_tags;
        dev->shared_tag_bitmap = g_shared_tag_bitmap;
+       dev->fua = g_fua;
+
        return dev;
 }
 
 
        if (dev->cache_size > 0) {
                set_bit(NULLB_DEV_FL_CACHE, &nullb->dev->flags);
-               blk_queue_write_cache(nullb->q, true, true);
+               blk_queue_write_cache(nullb->q, true, dev->fua);
        }
 
        nullb->q->queuedata = nullb;