Lines Matching +full:data +full:- +full:independent
1 // SPDX-License-Identifier: GPL-2.0
18 return sprintf(buf, "%llu\n", iar->sector); in blk_ia_range_sector_show()
25 return sprintf(buf, "%llu\n", iar->nr_sectors); in blk_ia_range_nr_sectors_show()
58 return entry->show(iar, buf); in blk_ia_range_sysfs_show()
66 * Independent access range entries are not freed individually, but alltogether
69 * struct blk_independent_access_ranges, the array of independent access range
71 * So we do not need to do anything here, but still need this no-op release
85 * This will be executed only after all independent access range entries are
102 * disk_register_independent_access_ranges - register with sysfs a set of
103 * independent access ranges
106 * Register with sysfs a set of independent access ranges for @disk.
110 struct blk_independent_access_ranges *iars = disk->ia_ranges; in disk_register_independent_access_ranges()
111 struct request_queue *q = disk->queue; in disk_register_independent_access_ranges()
114 lockdep_assert_held(&q->sysfs_lock); in disk_register_independent_access_ranges()
123 WARN_ON(iars->sysfs_registered); in disk_register_independent_access_ranges()
124 ret = kobject_init_and_add(&iars->kobj, &blk_ia_ranges_ktype, in disk_register_independent_access_ranges()
125 &disk->queue_kobj, "%s", in disk_register_independent_access_ranges()
128 disk->ia_ranges = NULL; in disk_register_independent_access_ranges()
129 kobject_put(&iars->kobj); in disk_register_independent_access_ranges()
133 for (i = 0; i < iars->nr_ia_ranges; i++) { in disk_register_independent_access_ranges()
134 ret = kobject_init_and_add(&iars->ia_range[i].kobj, in disk_register_independent_access_ranges()
135 &blk_ia_range_ktype, &iars->kobj, in disk_register_independent_access_ranges()
138 while (--i >= 0) in disk_register_independent_access_ranges()
139 kobject_del(&iars->ia_range[i].kobj); in disk_register_independent_access_ranges()
140 kobject_del(&iars->kobj); in disk_register_independent_access_ranges()
141 kobject_put(&iars->kobj); in disk_register_independent_access_ranges()
146 iars->sysfs_registered = true; in disk_register_independent_access_ranges()
153 struct request_queue *q = disk->queue; in disk_unregister_independent_access_ranges()
154 struct blk_independent_access_ranges *iars = disk->ia_ranges; in disk_unregister_independent_access_ranges()
157 lockdep_assert_held(&q->sysfs_lock); in disk_unregister_independent_access_ranges()
162 if (iars->sysfs_registered) { in disk_unregister_independent_access_ranges()
163 for (i = 0; i < iars->nr_ia_ranges; i++) in disk_unregister_independent_access_ranges()
164 kobject_del(&iars->ia_range[i].kobj); in disk_unregister_independent_access_ranges()
165 kobject_del(&iars->kobj); in disk_unregister_independent_access_ranges()
166 kobject_put(&iars->kobj); in disk_unregister_independent_access_ranges()
171 disk->ia_ranges = NULL; in disk_unregister_independent_access_ranges()
181 for (i = 0; i < iars->nr_ia_ranges; i++) { in disk_find_ia_range()
182 iar = &iars->ia_range[i]; in disk_find_ia_range()
183 if (sector >= iar->sector && in disk_find_ia_range()
184 sector < iar->sector + iar->nr_sectors) in disk_find_ia_range()
199 if (WARN_ON_ONCE(!iars->nr_ia_ranges)) in disk_check_ia_ranges()
207 for (i = 0; i < iars->nr_ia_ranges; i++) { in disk_check_ia_ranges()
209 if (!tmp || tmp->sector != sector) { in disk_check_ia_ranges()
210 pr_warn("Invalid non-contiguous independent access ranges\n"); in disk_check_ia_ranges()
214 iar = &iars->ia_range[i]; in disk_check_ia_ranges()
216 swap(iar->sector, tmp->sector); in disk_check_ia_ranges()
217 swap(iar->nr_sectors, tmp->nr_sectors); in disk_check_ia_ranges()
220 sector += iar->nr_sectors; in disk_check_ia_ranges()
224 pr_warn("Independent access ranges do not match disk capacity\n"); in disk_check_ia_ranges()
234 struct blk_independent_access_ranges *old = disk->ia_ranges; in disk_ia_ranges_changed()
240 if (old->nr_ia_ranges != new->nr_ia_ranges) in disk_ia_ranges_changed()
243 for (i = 0; i < old->nr_ia_ranges; i++) { in disk_ia_ranges_changed()
244 if (new->ia_range[i].sector != old->ia_range[i].sector || in disk_ia_ranges_changed()
245 new->ia_range[i].nr_sectors != old->ia_range[i].nr_sectors) in disk_ia_ranges_changed()
253 * disk_alloc_independent_access_ranges - Allocate an independent access ranges
254 * data structure
256 * @nr_ia_ranges: Number of independent access ranges
267 GFP_KERNEL, disk->queue->node); in disk_alloc_independent_access_ranges()
269 iars->nr_ia_ranges = nr_ia_ranges; in disk_alloc_independent_access_ranges()
275 * disk_set_independent_access_ranges - Set a disk independent access ranges
277 * @iars: independent access ranges structure
279 * Set the independent access ranges information of the request queue
280 * of @disk to @iars. If @iars is NULL and the independent access ranges
282 * @iars and the independent access ranges structure already set, @iars
288 struct request_queue *q = disk->queue; in disk_set_independent_access_ranges()
290 mutex_lock(&q->sysfs_lock); in disk_set_independent_access_ranges()
303 * set of independent access ranges and register the new set. If the in disk_set_independent_access_ranges()
305 * will register the independent access ranges. in disk_set_independent_access_ranges()
308 disk->ia_ranges = iars; in disk_set_independent_access_ranges()
312 mutex_unlock(&q->sysfs_lock); in disk_set_independent_access_ranges()