Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[linux-block.git] / drivers / scsi / sd_zbc.c
index 03adb39293c2d897f6e6968a1414c8ee9800b4dd..ee558675eab4aa862850dd86a620570e1e4fe98a 100644 (file)
@@ -704,6 +704,7 @@ int sd_zbc_revalidate_zones(struct scsi_disk *sdkp)
        unsigned int nr_zones = sdkp->rev_nr_zones;
        u32 max_append;
        int ret = 0;
+       unsigned int flags;
 
        /*
         * For all zoned disks, initialize zone append emulation data if not
@@ -736,16 +737,19 @@ int sd_zbc_revalidate_zones(struct scsi_disk *sdkp)
            disk->queue->nr_zones == nr_zones)
                goto unlock;
 
+       flags = memalloc_noio_save();
        sdkp->zone_blocks = zone_blocks;
        sdkp->nr_zones = nr_zones;
-       sdkp->rev_wp_offset = kvcalloc(nr_zones, sizeof(u32), GFP_NOIO);
+       sdkp->rev_wp_offset = kvcalloc(nr_zones, sizeof(u32), GFP_KERNEL);
        if (!sdkp->rev_wp_offset) {
                ret = -ENOMEM;
+               memalloc_noio_restore(flags);
                goto unlock;
        }
 
        ret = blk_revalidate_disk_zones(disk, sd_zbc_revalidate_zones_cb);
 
+       memalloc_noio_restore(flags);
        kvfree(sdkp->rev_wp_offset);
        sdkp->rev_wp_offset = NULL;