}
EXPORT_SYMBOL_GPL(__nvdimm_bus_register);
+static void set_badblock(struct gendisk *disk, sector_t s, int num)
+{
+ struct device *dev = disk->driverfs_dev;
+
+ dev_dbg(dev, "Found a poison range (0x%llx, 0x%llx)\n",
+ (u64) s * 512, (u64) num * 512);
+ /* this isn't an error as the hardware will still throw an exception */
+ if (disk_set_badblocks(disk, s, num))
+ dev_info_once(dev, "%s: failed for sector %llx\n",
+ __func__, (u64) s);
+}
+
/**
* __add_badblock_range() - Convert a physical address range to bad sectors
* @disk: the disk associated with the namespace
while (remaining) {
int done = min_t(u64, remaining, INT_MAX);
- rc = disk_set_badblocks(disk, s, done);
- if (rc)
- return rc;
+ set_badblock(disk, s, done);
remaining -= done;
s += done;
}
- return 0;
} else
- return disk_set_badblocks(disk, start_sector, num_sectors);
+ set_badblock(disk, start_sector, num_sectors);
+
+ return 0;
}
/**
rc = __add_badblock_range(disk, start - ns_start, len);
if (rc)
return rc;
- dev_info(&nvdimm_bus->dev,
- "Found a poison range (0x%llx, 0x%llx)\n",
- start, len);
continue;
}
/* Deal with overlap for poison starting before the namespace */
rc = __add_badblock_range(disk, 0, len);
if (rc)
return rc;
- dev_info(&nvdimm_bus->dev,
- "Found a poison range (0x%llx, 0x%llx)\n",
- pl->start, len);
}
}