Source
1837
1837
return false;
1838
1838
1839
1839
if (!ti->type->iterate_devices ||
1840
1840
ti->type->iterate_devices(ti, device_not_secure_erase_capable, NULL))
1841
1841
return false;
1842
1842
}
1843
1843
1844
1844
return true;
1845
1845
}
1846
1846
1847
+
static int device_requires_stable_pages(struct dm_target *ti,
1848
+
struct dm_dev *dev, sector_t start,
1849
+
sector_t len, void *data)
1850
+
{
1851
+
struct request_queue *q = bdev_get_queue(dev->bdev);
1852
+
1853
+
return q && bdi_cap_stable_pages_required(q->backing_dev_info);
1854
+
}
1855
+
1856
+
/*
1857
+
* If any underlying device requires stable pages, a table must require
1858
+
* them as well. Only targets that support iterate_devices are considered:
1859
+
* don't want error, zero, etc to require stable pages.
1860
+
*/
1861
+
static bool dm_table_requires_stable_pages(struct dm_table *t)
1862
+
{
1863
+
struct dm_target *ti;
1864
+
unsigned i;
1865
+
1866
+
for (i = 0; i < dm_table_get_num_targets(t); i++) {
1867
+
ti = dm_table_get_target(t, i);
1868
+
1869
+
if (ti->type->iterate_devices &&
1870
+
ti->type->iterate_devices(ti, device_requires_stable_pages, NULL))
1871
+
return true;
1872
+
}
1873
+
1874
+
return false;
1875
+
}
1876
+
1847
1877
void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
1848
1878
struct queue_limits *limits)
1849
1879
{
1850
1880
bool wc = false, fua = false;
1851
1881
1852
1882
/*
1853
1883
* Copy table's limits to the DM device's request_queue
1854
1884
*/
1855
1885
q->limits = *limits;
1856
1886
1889
1919
else
1890
1920
blk_queue_flag_clear(QUEUE_FLAG_NONROT, q);
1891
1921
1892
1922
if (!dm_table_supports_write_same(t))
1893
1923
q->limits.max_write_same_sectors = 0;
1894
1924
if (!dm_table_supports_write_zeroes(t))
1895
1925
q->limits.max_write_zeroes_sectors = 0;
1896
1926
1897
1927
dm_table_verify_integrity(t);
1898
1928
1929
+
/*
1930
+
* Some devices don't use blk_integrity but still want stable pages
1931
+
* because they do their own checksumming.
1932
+
*/
1933
+
if (dm_table_requires_stable_pages(t))
1934
+
q->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES;
1935
+
else
1936
+
q->backing_dev_info->capabilities &= ~BDI_CAP_STABLE_WRITES;
1937
+
1899
1938
/*
1900
1939
* Determine whether or not this queue's I/O timings contribute
1901
1940
* to the entropy pool, Only request-based targets use this.
1902
1941
* Clear QUEUE_FLAG_ADD_RANDOM if any underlying device does not
1903
1942
* have it set.
1904
1943
*/
1905
1944
if (blk_queue_add_random(q) && dm_table_all_devices_attribute(t, device_is_not_random))
1906
1945
blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, q);
1907
1946
1908
1947
/*