Hi All,

We are trying to make Nilfs work with a SMR Device which adheres to Zoned ATA 
Commands(ZAC) Specification.
One of the restrictions in the specification is reading an unwritten part of 
the Zone(Segment in Nilfs) will cause a read error.

We observe that Nilfs does not write a complete physical segment(we use 256MB 
segment)  always. After digging in the source a while we figured that this
is due to the fact that Nilfs requires a certain number of minimum blocks for 
constructing a partial segment (NILFS_PSEG_MIN_BLOCKS), which currently is 2.
So we see some segments where the last block (in our case a block is 4k)  is 
not being written to.

When some utilities like garbage collector and dump segment reads (May not be 
an exhaustive list)  a segment it tries to read the entire physical segment. 
This causes read errors in the kernel and hence retries for the last unwritten 
block in certain segments.
In an attempt to solve this problem we were trying to figure out if we can 
write some dummy data to the remaining unutilized blocks in the segment. But we 
are not sure what would be the best way to do this.

Another solution we had in mind was to figure out all places where segments are 
read, and modify it to prevent it from reading unwritten blocks. But we feel 
this might be more complex solution and might impact performance more.

Please advise us on the best way to solve the problem. Also what would be 
architecturally a best place to fix the problem.

Thanks,
Benixon
--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to