Lines Matching refs:ds
291 struct dm_deferred_set *ds; member
306 struct dm_deferred_set *ds; in dm_deferred_set_create() local
308 ds = kmalloc(sizeof(*ds), GFP_KERNEL); in dm_deferred_set_create()
309 if (!ds) in dm_deferred_set_create()
312 spin_lock_init(&ds->lock); in dm_deferred_set_create()
313 ds->current_entry = 0; in dm_deferred_set_create()
314 ds->sweeper = 0; in dm_deferred_set_create()
316 ds->entries[i].ds = ds; in dm_deferred_set_create()
317 ds->entries[i].count = 0; in dm_deferred_set_create()
318 INIT_LIST_HEAD(&ds->entries[i].work_items); in dm_deferred_set_create()
321 return ds; in dm_deferred_set_create()
325 void dm_deferred_set_destroy(struct dm_deferred_set *ds) in dm_deferred_set_destroy() argument
327 kfree(ds); in dm_deferred_set_destroy()
331 struct dm_deferred_entry *dm_deferred_entry_inc(struct dm_deferred_set *ds) in dm_deferred_entry_inc() argument
336 spin_lock_irqsave(&ds->lock, flags); in dm_deferred_entry_inc()
337 entry = ds->entries + ds->current_entry; in dm_deferred_entry_inc()
339 spin_unlock_irqrestore(&ds->lock, flags); in dm_deferred_entry_inc()
350 static void __sweep(struct dm_deferred_set *ds, struct list_head *head) in __sweep() argument
352 while ((ds->sweeper != ds->current_entry) && in __sweep()
353 !ds->entries[ds->sweeper].count) { in __sweep()
354 list_splice_init(&ds->entries[ds->sweeper].work_items, head); in __sweep()
355 ds->sweeper = ds_next(ds->sweeper); in __sweep()
358 if ((ds->sweeper == ds->current_entry) && !ds->entries[ds->sweeper].count) in __sweep()
359 list_splice_init(&ds->entries[ds->sweeper].work_items, head); in __sweep()
366 spin_lock_irqsave(&entry->ds->lock, flags); in dm_deferred_entry_dec()
369 __sweep(entry->ds, head); in dm_deferred_entry_dec()
370 spin_unlock_irqrestore(&entry->ds->lock, flags); in dm_deferred_entry_dec()
377 int dm_deferred_set_add_work(struct dm_deferred_set *ds, struct list_head *work) in dm_deferred_set_add_work() argument
383 spin_lock_irqsave(&ds->lock, flags); in dm_deferred_set_add_work()
384 if ((ds->sweeper == ds->current_entry) && in dm_deferred_set_add_work()
385 !ds->entries[ds->current_entry].count) in dm_deferred_set_add_work()
388 list_add(work, &ds->entries[ds->current_entry].work_items); in dm_deferred_set_add_work()
389 next_entry = ds_next(ds->current_entry); in dm_deferred_set_add_work()
390 if (!ds->entries[next_entry].count) in dm_deferred_set_add_work()
391 ds->current_entry = next_entry; in dm_deferred_set_add_work()
393 spin_unlock_irqrestore(&ds->lock, flags); in dm_deferred_set_add_work()