To improve the performance of the original disk writes, the map block and snapshot blocks corresponding to a COW transaction are cached in buffer cache. These blocks can be cached till the log is completely full. In our case, we flush the cached snapshot disk blocks if the log disk is full or if the system free memory falls below certain limit. This limit can be a input parameter. ll_rw_block() code has been changed to calculate the time taken for disk writes. Field b_dev_id in struct buffer_head is used for this performance calculation. Table 1 shows the delays introduced for the original disk writes by the pseudo layer with and without snapshots and with ordered writes and with logging. Disk writes that result in COW pushes were selected in evaluating performance. Access patterns of the data in all the methods are almost similar. The delays for original disk writes due to snapshots with logging are much smaller compared to snapshots with ordered writes, since log writes are fast (as they are sequential writes). The delay time has been averaged over 30 block writes.