A method, performed by a computing system having one or more processors, for snapshot space accounting in a storage system by maintaining an expiration data structure and a count data structure that can be used to determine the amount of storage space that will be recovered if a snapshot is deleted, the method comprising: receiving a request to write to a plurality of blocks of data within the storage system; and in response to receiving the request to write to the plurality of blocks of data, determining a current value for an epoch counter, wherein the epoch counter represents the current epoch number each time a new snapshot is created; for each block of the plurality of blocks of data, determining a previous birthdate associated with the block, the previous birthdate corresponding to the value for the epoch counter when the block was last modified, adding an expiration entry to the expiration data structure, wherein the expiration entry includes: the determined previous birthdate for the block, the current value for the epoch counter, and an identifier for the block; and determining that the count data structure includes an entry for a pair of snapshot values, the first snapshot value in the pair of snapshot values corresponding to the determined previous birthdate for the block and the second snapshot value in the pair of snapshot values corresponding to the current value for the epoch counter, and in response to determining that the count data structure includes an entry for the pair of snapshot values, increasing a size value associated with the entry by a size of the block of data. receiving a request to write to a plurality of blocks of data within the storage system; and in response to receiving the request to write to the plurality of blocks of data, determining a current value for an epoch counter, wherein the epoch counter represents the current epoch number each time a new snapshot is created; for each block of the plurality of blocks of data, determining a previous birthdate associated with the block, the previous birthdate corresponding to the value for the epoch counter when the block was last modified, adding an expiration entry to the expiration data structure, wherein the expiration entry includes: the determined previous birthdate for the block, the current value for the epoch counter, and an identifier for the block; and determining that the count data structure includes an entry for a pair of snapshot values, the first snapshot value in the pair of snapshot values corresponding to the determined previous birthdate for the block and the second snapshot value in the pair of snapshot values corresponding to the current value for the epoch counter, and in response to determining that the count data structure includes an entry for the pair of snapshot values, increasing a size value associated with the entry by a size of the block of data. determining a current value for an epoch counter, wherein the epoch counter represents the current epoch number each time a new snapshot is created; for each block of the plurality of blocks of data, determining a previous birthdate associated with the block, the previous birthdate corresponding to the value for the epoch counter when the block was last modified, adding an expiration entry to the expiration data structure, wherein the expiration entry includes: the determined previous birthdate for the block, the current value for the epoch counter, and an identifier for the block; and determining a previous birthdate associated with the block, the previous birthdate corresponding to the value for the epoch counter when the block was last modified, adding an expiration entry to the expiration data structure, wherein the expiration entry includes: the determined previous birthdate for the block, the current value for the epoch counter, and an identifier for the block; and the determined previous birthdate for the block, the current value for the epoch counter, and an identifier for the block; and determining that the count data structure includes an entry for a pair of snapshot values, the first snapshot value in the pair of snapshot values corresponding to the determined previous birthdate for the block and the second snapshot value in the pair of snapshot values corresponding to the current value for the epoch counter, and in response to determining that the count data structure includes an entry for the pair of snapshot values, increasing a size value associated with the entry by a size of the block of data.