Lines Matching refs:ds

322 	struct dm_deferred_set *ds;
337 struct dm_deferred_set *ds;
339 ds = kmalloc(sizeof(*ds), GFP_KERNEL);
340 if (!ds)
343 spin_lock_init(&ds->lock);
344 ds->current_entry = 0;
345 ds->sweeper = 0;
347 ds->entries[i].ds = ds;
348 ds->entries[i].count = 0;
349 INIT_LIST_HEAD(&ds->entries[i].work_items);
352 return ds;
356 void dm_deferred_set_destroy(struct dm_deferred_set *ds)
358 kfree(ds);
362 struct dm_deferred_entry *dm_deferred_entry_inc(struct dm_deferred_set *ds)
367 spin_lock_irqsave(&ds->lock, flags);
368 entry = ds->entries + ds->current_entry;
370 spin_unlock_irqrestore(&ds->lock, flags);
381 static void __sweep(struct dm_deferred_set *ds, struct list_head *head)
383 while ((ds->sweeper != ds->current_entry) &&
384 !ds->entries[ds->sweeper].count) {
385 list_splice_init(&ds->entries[ds->sweeper].work_items, head);
386 ds->sweeper = ds_next(ds->sweeper);
389 if ((ds->sweeper == ds->current_entry) && !ds->entries[ds->sweeper].count)
390 list_splice_init(&ds->entries[ds->sweeper].work_items, head);
397 spin_lock_irqsave(&entry->ds->lock, flags);
400 __sweep(entry->ds, head);
401 spin_unlock_irqrestore(&entry->ds->lock, flags);
408 int dm_deferred_set_add_work(struct dm_deferred_set *ds, struct list_head *work)
413 spin_lock_irq(&ds->lock);
414 if ((ds->sweeper == ds->current_entry) &&
415 !ds->entries[ds->current_entry].count)
418 list_add(work, &ds->entries[ds->current_entry].work_items);
419 next_entry = ds_next(ds->current_entry);
420 if (!ds->entries[next_entry].count)
421 ds->current_entry = next_entry;
423 spin_unlock_irq(&ds->lock);