Lines Matching refs:data_vio

49 request object (the "data_vio") which will be added to a work queue when
196 The vio and data_vio Structures
208 called a data_vio to track information about their progress. A struct
209 data_vio contain a struct vio and also includes several other fields
210 related to deduplication and other vdo features. The data_vio is the
211 primary unit of application work in vdo. Each data_vio proceeds through a
310 that are required for a data_vio. The recovery journal issues a flush
332 1. A data_vio is obtained from the data_vio pool and associated with the
334 will block until a data_vio is available. This provides back pressure
335 to the application. The data_vio pool is protected by a spin lock.
337 The newly acquired data_vio is reset and the bio's data is copied into
338 the data_vio if it is a write and the data is not all zeroes. The data
340 the data_vio processing is complete, which means later processing steps
342 may also be smaller than 4K, in which case the data_vio will have
346 2. The data_vio places a claim (the "logical lock") on the logical address
350 the logical address and the value is a pointer to the data_vio
353 If a data_vio looks in the hashtable and finds that another data_vio is
356 lock holder that it is waiting. Most notably, a new data_vio waiting
361 This stage requires the data_vio to get an implicit lock on the
366 3. The data_vio traverses the block map tree to ensure that all the
374 data_vio to lock the page-node that needs to be allocated. This
384 The data_vio journals the intent to add the new node to the block
388 updated, the data_vio proceeds down the tree. Any other data_vios
392 allocated, so the data_vio just traverses the tree until it finds
394 slot") is recorded in the data_vio so that later steps do not need
395 to traverse the tree again. The data_vio then releases the implicit
400 data_vio can write its data somewhere even if deduplication and
404 The data_vio will search each slab in a zone until it finds a free
408 free block or runs out of zones to search. The data_vio will acquire a
415 data_vio from considering it free. The reference counters are a
419 5. If an allocation was obtained, the data_vio has all the resources it
422 thread to prevent the application callback from blocking other data_vio
425 If an allocation could not be obtained, the data_vio continues to
430 The data_vio's data is hashed and the hash (the "record name") is
431 recorded in the data_vio.
433 7. The data_vio reserves or joins a struct hash_lock, which manages all of
439 If there is no existing hash lock for this data_vio's record_name, the
440 data_vio obtains a hash lock from the pool, adds it to the hashtable,
444 written. If a hash lock for the data_vio's record_name already exists,
445 and the data_vio's data is the same as the agent's data, the new
446 data_vio will wait for the agent to complete its work and then share
449 In the rare case that a hash lock exists for the data_vio's hash but
450 the data does not match the hash lock's agent, the data_vio skips to
459 require the data_vio to get any locks because the index components
460 manage their own locking. The data_vio waits until it either gets a
463 b. If the deduplication index returns advice, the data_vio attempts to
466 data_vio's data, and that it can accept more references. If the
467 physical address is already locked by another data_vio, the data at
481 to. If the agent does not have an allocation, some other data_vio in
487 compress, the data_vio will continue to step 8h to write its data
498 data_vios into a single data block. This means that a data_vio may
503 flush, device shutdown, or a subsequent data_vio trying to overwrite
504 the same logical block address. A data_vio may also be evicted from
507 data_vio will proceed to step 8h to write its data directly.
514 g. Each data_vio sets the compressed block as its new physical address.
515 The data_vio obtains an implicit lock on the physical zone and
520 h. Any data_vio evicted from the packer will have an allocation from
523 i. After the data is written, if the data_vio is the agent of a hash
526 possible. Each data_vio will then proceed to step 9 to record its
533 9. The data_vio determines the previous mapping of the logical address.
537 data_vio will reserve a slot in the cache and load the desired page
538 into it, possibly evicting an older cached page. The data_vio then
544 10. The data_vio makes an entry in the recovery journal containing the
547 recovery journal lock. The data_vio will wait in the journal until all
551 11. Once the recovery journal entry is stable, the data_vio makes two slab
563 12. Once both of the reference count updates are done, the data_vio
568 13. If the data_vio has a hash lock, it acquires the implicit hash zone
571 The data_vio then acquires the implicit physical zone lock and releases
576 The data_vio then acquires the implicit logical zone lock and releases
580 acknowledged, and the data_vio is returned to the pool.
585 1 and 2 in the write path to obtain a data_vio and lock its logical
586 address. If there is already a write data_vio in progress for that logical
587 address that is guaranteed to complete, the read data_vio will copy the
588 data from the write data_vio and return it. Otherwise, it will look up the
591 physical block address. A read data_vio will not allocate block map tree
594 data_vio will return all zeroes. A read data_vio handles cleanup and
606 operations, and a single data_vio is used throughout this operation.