1. A method comprising: detecting a first operation associated with a cache line at a first requestor cache, the cache line being a block of date; detecting that a copy of the cache line exists in a first cache in a modified (M) state; forwarding the copy of the cache line from the first cache to the first requestor cache and storing the copy of the cache line in the first requestor cache in a second modified (M′) state; transitioning the copy of the cache line in the first cache to an invalid (I) state; detecting a second operation associated with the cache line at a second requestor cache; responsively forwarding the copy of the cache line from the first requestor cache to the second requestor cache and storing the copy of the cache line in the second requestor cache in an owned (O) state if the copy of the cache line has not been modified in the first requestor cache; and setting the copy of the cache line to a shared (S) state in the first requestor cache.