)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"03340aa8a9f2bfb47d441a5b992380264fbdc4d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1ed94de1_e8736e08","updated":"2023-06-29 10:42:52.000000000","message":"Please mainly look at the main BlockDev interface, the rest needs some fixups and tests still.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"}],"metropolis/pkg/blockdev/blockdev.go":[{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":5,"context_line":"\t\"io\""},{"line_number":6,"context_line":")"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"// BlockDev represents a generic block device consisting of lots equally-sized"},{"line_number":9,"context_line":"// blocks. All offsets and intervals must be aligned to BlockSize and are"},{"line_number":10,"context_line":"// recommended to be aligned to OptimalBlockSize if feasible."},{"line_number":11,"context_line":"type BlockDev interface {"}],"source_content_type":"text/x-go","patch_set":6,"id":"844a99ec_330baca2","line":8,"range":{"start_line":8,"start_character":46,"end_line":8,"end_character":64},"updated":"2023-06-29 11:00:41.000000000","message":"```suggestion\n// BlockDev represents a generic block device made up of equally-sized\n```","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":false,"context_lines":[{"line_number":5,"context_line":"\t\"io\""},{"line_number":6,"context_line":")"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"// BlockDev represents a generic block device consisting of lots equally-sized"},{"line_number":9,"context_line":"// blocks. All offsets and intervals must be aligned to BlockSize and are"},{"line_number":10,"context_line":"// recommended to be aligned to OptimalBlockSize if feasible."},{"line_number":11,"context_line":"type BlockDev interface {"}],"source_content_type":"text/x-go","patch_set":6,"id":"0eb83da0_4f913ef7","line":8,"range":{"start_line":8,"start_character":46,"end_line":8,"end_character":64},"in_reply_to":"844a99ec_330baca2","updated":"2023-07-03 12:09:02.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":6,"context_line":")"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"// BlockDev represents a generic block device consisting of lots equally-sized"},{"line_number":9,"context_line":"// blocks. All offsets and intervals must be aligned to BlockSize and are"},{"line_number":10,"context_line":"// recommended to be aligned to OptimalBlockSize if feasible."},{"line_number":11,"context_line":"type BlockDev interface {"},{"line_number":12,"context_line":"\tio.ReaderAt"}],"source_content_type":"text/x-go","patch_set":6,"id":"235ac5db_13550ce8","line":9,"range":{"start_line":9,"start_character":27,"end_line":9,"end_character":36},"updated":"2023-06-29 11:00:41.000000000","message":"... intervals are expressed in bytes and must be aligned to BlockSize ...","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":false,"context_lines":[{"line_number":6,"context_line":")"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"// BlockDev represents a generic block device consisting of lots equally-sized"},{"line_number":9,"context_line":"// blocks. All offsets and intervals must be aligned to BlockSize and are"},{"line_number":10,"context_line":"// recommended to be aligned to OptimalBlockSize if feasible."},{"line_number":11,"context_line":"type BlockDev interface {"},{"line_number":12,"context_line":"\tio.ReaderAt"}],"source_content_type":"text/x-go","patch_set":6,"id":"1383dcec_8ed040a1","line":9,"range":{"start_line":9,"start_character":27,"end_line":9,"end_character":36},"in_reply_to":"235ac5db_13550ce8","updated":"2023-07-03 12:09:02.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":11,"context_line":"type BlockDev interface {"},{"line_number":12,"context_line":"\tio.ReaderAt"},{"line_number":13,"context_line":"\tio.WriterAt"},{"line_number":14,"context_line":"\t// BlockSize returns the block size of the block device. This is commonly"},{"line_number":15,"context_line":"\t// (but not always) a power of two and either 512 or 4096."},{"line_number":16,"context_line":"\tBlockSize() int64"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-go","patch_set":6,"id":"2624c729_3f30a08f","line":14,"range":{"start_line":14,"start_character":50,"end_line":14,"end_character":56},"updated":"2023-06-29 11:00:41.000000000","message":"... in bytes.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":false,"context_lines":[{"line_number":11,"context_line":"type BlockDev interface {"},{"line_number":12,"context_line":"\tio.ReaderAt"},{"line_number":13,"context_line":"\tio.WriterAt"},{"line_number":14,"context_line":"\t// BlockSize returns the block size of the block device. This is commonly"},{"line_number":15,"context_line":"\t// (but not always) a power of two and either 512 or 4096."},{"line_number":16,"context_line":"\tBlockSize() int64"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-go","patch_set":6,"id":"fea59763_b0e13562","line":14,"range":{"start_line":14,"start_character":50,"end_line":14,"end_character":56},"in_reply_to":"2624c729_3f30a08f","updated":"2023-07-03 12:09:02.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":19,"context_line":"\t// is an image with an undefined size."},{"line_number":20,"context_line":"\tBlockCount() int64"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"\t// OptimalBlockSize returns the optimal block size for aligning to as well"},{"line_number":23,"context_line":"\t// as issuing I/O. IO operations with block sizes below this one might incur"},{"line_number":24,"context_line":"\t// read-write overhead. This is the larger of the physical block size and"},{"line_number":25,"context_line":"\t// a device-reported value if available."}],"source_content_type":"text/x-go","patch_set":6,"id":"5b5e8cdb_409c9bae","line":22,"range":{"start_line":22,"start_character":47,"end_line":22,"end_character":51},"updated":"2023-06-29 11:00:41.000000000","message":"... in bytes.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\t// is an image with an undefined size."},{"line_number":20,"context_line":"\tBlockCount() int64"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"\t// OptimalBlockSize returns the optimal block size for aligning to as well"},{"line_number":23,"context_line":"\t// as issuing I/O. IO operations with block sizes below this one might incur"},{"line_number":24,"context_line":"\t// read-write overhead. This is the larger of the physical block size and"},{"line_number":25,"context_line":"\t// a device-reported value if available."}],"source_content_type":"text/x-go","patch_set":6,"id":"9cab634e_e48e5be4","line":22,"range":{"start_line":22,"start_character":47,"end_line":22,"end_character":51},"in_reply_to":"5b5e8cdb_409c9bae","updated":"2023-07-03 12:09:02.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":31,"context_line":"\t// no longer needs to preserve the unused data) as well as bulk erase"},{"line_number":32,"context_line":"\t// operations. This command is advisory and not all implementations support"},{"line_number":33,"context_line":"\t// it. The contents of deallocated blocks are implementation-defined."},{"line_number":34,"context_line":"\tDeallocate(startByte int64, endByte int64) error"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"\t// Zero zeroes a continouous set of blocks. On certain implementations this"},{"line_number":37,"context_line":"\t// can be significantly faster than just calling Write with zeroes."}],"source_content_type":"text/x-go","patch_set":6,"id":"54c74967_f6be61d1","line":34,"range":{"start_line":34,"start_character":29,"end_line":34,"end_character":36},"updated":"2023-06-29 11:00:41.000000000","message":"Are intervals inclusive or exclusive?","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":31,"context_line":"\t// no longer needs to preserve the unused data) as well as bulk erase"},{"line_number":32,"context_line":"\t// operations. This command is advisory and not all implementations support"},{"line_number":33,"context_line":"\t// it. The contents of deallocated blocks are implementation-defined."},{"line_number":34,"context_line":"\tDeallocate(startByte int64, endByte int64) error"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"\t// Zero zeroes a continouous set of blocks. On certain implementations this"},{"line_number":37,"context_line":"\t// can be significantly faster than just calling Write with zeroes."}],"source_content_type":"text/x-go","patch_set":6,"id":"5a22c70a_02a0ebd8","line":34,"range":{"start_line":34,"start_character":1,"end_line":34,"end_character":11},"updated":"2023-06-29 11:00:41.000000000","message":"Mention that this maps to a TRIM/DISCARD operation for ease of Ctrl-f.\n\nI would maybe even consider renaming this to Discard as that seems similarly generic and is a much better-known term?","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":false,"context_lines":[{"line_number":31,"context_line":"\t// no longer needs to preserve the unused data) as well as bulk erase"},{"line_number":32,"context_line":"\t// operations. This command is advisory and not all implementations support"},{"line_number":33,"context_line":"\t// it. The contents of deallocated blocks are implementation-defined."},{"line_number":34,"context_line":"\tDeallocate(startByte int64, endByte int64) error"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"\t// Zero zeroes a continouous set of blocks. On certain implementations this"},{"line_number":37,"context_line":"\t// can be significantly faster than just calling Write with zeroes."}],"source_content_type":"text/x-go","patch_set":6,"id":"209a035c_f35ec1ca","line":34,"range":{"start_line":34,"start_character":29,"end_line":34,"end_character":36},"in_reply_to":"54c74967_f6be61d1","updated":"2023-07-03 12:09:02.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":false,"context_lines":[{"line_number":31,"context_line":"\t// no longer needs to preserve the unused data) as well as bulk erase"},{"line_number":32,"context_line":"\t// operations. This command is advisory and not all implementations support"},{"line_number":33,"context_line":"\t// it. The contents of deallocated blocks are implementation-defined."},{"line_number":34,"context_line":"\tDeallocate(startByte int64, endByte int64) error"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"\t// Zero zeroes a continouous set of blocks. On certain implementations this"},{"line_number":37,"context_line":"\t// can be significantly faster than just calling Write with zeroes."}],"source_content_type":"text/x-go","patch_set":6,"id":"8e9da12d_da88cbae","line":34,"range":{"start_line":34,"start_character":1,"end_line":34,"end_character":11},"in_reply_to":"5a22c70a_02a0ebd8","updated":"2023-07-03 12:09:02.000000000","message":"Noone seems to agree on a term for this. First we had SCSI which called this UNMAP (which was a thing even before SSDs for thin-provisioned SANs). Then came ATA which needed this for SSDs, they called it TRIM in their dataset management spec. Shortly after (2.6.28) Linux came along and implemented their interface to these on their block layer and called the request Discard. A few years later NVMe showed up and called their equivalent command Deallocate. MMC also implemented this, they have both DISCARD and TRIM, but having slightly different behavior.\n\nI think TRIM sucks as a name, but between UNMAP (SCSI), Deallocate (NVMe) and Discard (Linux) there isn\u0027t much difference. There is an argument to be made that Discard is technically more accurate as it doesn\u0027t have the FTL/allocation connotation that UNMAP/Deallocate have.\n\nI switched it to Discard.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":38,"context_line":"\tZero(startByte, endByte int64) error"},{"line_number":39,"context_line":"}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"type ReadWriteSeeker struct {"},{"line_number":42,"context_line":"\tb       BlockDev"},{"line_number":43,"context_line":"\tcurrPos int64"},{"line_number":44,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":6,"id":"9717e607_2a4a8c88","line":41,"range":{"start_line":41,"start_character":5,"end_line":41,"end_character":20},"updated":"2023-06-29 11:00:41.000000000","message":"Do we need to export this?","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4547cff9dab355362ff636336c399f079223bf82","unresolved":true,"context_lines":[{"line_number":38,"context_line":"\tZero(startByte, endByte int64) error"},{"line_number":39,"context_line":"}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"type ReadWriteSeeker struct {"},{"line_number":42,"context_line":"\tb       BlockDev"},{"line_number":43,"context_line":"\tcurrPos int64"},{"line_number":44,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":6,"id":"edd335e1_cd9dcb1c","line":41,"range":{"start_line":41,"start_character":5,"end_line":41,"end_character":20},"in_reply_to":"9717e607_2a4a8c88","updated":"2023-07-19 16:19:00.000000000","message":"Yes, this is extensively used further up the stack.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"36dfefedc3debf84f2088bc6c0836b6c513c16e7","unresolved":false,"context_lines":[{"line_number":38,"context_line":"\tZero(startByte, endByte int64) error"},{"line_number":39,"context_line":"}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"type ReadWriteSeeker struct {"},{"line_number":42,"context_line":"\tb       BlockDev"},{"line_number":43,"context_line":"\tcurrPos int64"},{"line_number":44,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":6,"id":"c9b7bcd7_6d5f3677","line":41,"range":{"start_line":41,"start_character":5,"end_line":41,"end_character":20},"in_reply_to":"edd335e1_cd9dcb1c","updated":"2023-07-20 15:32:49.000000000","message":"Ack","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":85,"context_line":"\tstartBlock, endBlock int64"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"func (s *Section) ReadAt(p []byte, off int64) (n int, err error) {"},{"line_number":89,"context_line":"\treturn s.b.ReadAt(p, off+(s.startBlock*s.b.BlockSize()))"},{"line_number":90,"context_line":"}"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-go","patch_set":6,"id":"878b2008_0142a67e","line":88,"range":{"start_line":88,"start_character":18,"end_line":88,"end_character":24},"updated":"2023-06-29 11:00:41.000000000","message":"Check endBlock.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4547cff9dab355362ff636336c399f079223bf82","unresolved":false,"context_lines":[{"line_number":85,"context_line":"\tstartBlock, endBlock int64"},{"line_number":86,"context_line":"}"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"func (s *Section) ReadAt(p []byte, off int64) (n int, err error) {"},{"line_number":89,"context_line":"\treturn s.b.ReadAt(p, off+(s.startBlock*s.b.BlockSize()))"},{"line_number":90,"context_line":"}"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-go","patch_set":6,"id":"1dfafd4c_9914dc36","line":88,"range":{"start_line":88,"start_character":18,"end_line":88,"end_character":24},"in_reply_to":"878b2008_0142a67e","updated":"2023-07-19 16:19:00.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":89,"context_line":"\treturn s.b.ReadAt(p, off+(s.startBlock*s.b.BlockSize()))"},{"line_number":90,"context_line":"}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"func (s *Section) WriteAt(p []byte, off int64) (n int, err error) {"},{"line_number":93,"context_line":"\treturn s.b.WriteAt(p, off+(s.startBlock*s.b.BlockSize()))"},{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-go","patch_set":6,"id":"46238976_6537846a","line":92,"range":{"start_line":92,"start_character":18,"end_line":92,"end_character":25},"updated":"2023-06-29 11:00:41.000000000","message":"Check endBlock.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4547cff9dab355362ff636336c399f079223bf82","unresolved":false,"context_lines":[{"line_number":89,"context_line":"\treturn s.b.ReadAt(p, off+(s.startBlock*s.b.BlockSize()))"},{"line_number":90,"context_line":"}"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"func (s *Section) WriteAt(p []byte, off int64) (n int, err error) {"},{"line_number":93,"context_line":"\treturn s.b.WriteAt(p, off+(s.startBlock*s.b.BlockSize()))"},{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-go","patch_set":6,"id":"011b2d8b_b94e23af","line":92,"range":{"start_line":92,"start_character":18,"end_line":92,"end_character":25},"in_reply_to":"46238976_6537846a","updated":"2023-07-19 16:19:00.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"func (s *Section) BlockCount() int64 {"},{"line_number":97,"context_line":"\tif s.endBlock \u003d\u003d -1 {"},{"line_number":98,"context_line":"\t\treturn -1"},{"line_number":99,"context_line":"\t}"},{"line_number":100,"context_line":"\treturn s.endBlock - s.startBlock"}],"source_content_type":"text/x-go","patch_set":6,"id":"1ed06d85_80fab139","line":97,"range":{"start_line":97,"start_character":6,"end_line":97,"end_character":14},"updated":"2023-06-29 11:00:41.000000000","message":"What does -1 mean?","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"36dfefedc3debf84f2088bc6c0836b6c513c16e7","unresolved":false,"context_lines":[{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"func (s *Section) BlockCount() int64 {"},{"line_number":97,"context_line":"\tif s.endBlock \u003d\u003d -1 {"},{"line_number":98,"context_line":"\t\treturn -1"},{"line_number":99,"context_line":"\t}"},{"line_number":100,"context_line":"\treturn s.endBlock - s.startBlock"}],"source_content_type":"text/x-go","patch_set":6,"id":"3c714f3f_c92af49d","line":97,"range":{"start_line":97,"start_character":6,"end_line":97,"end_character":14},"in_reply_to":"13aa0306_36f1af6b","updated":"2023-07-20 15:32:49.000000000","message":"Ack","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4547cff9dab355362ff636336c399f079223bf82","unresolved":true,"context_lines":[{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"func (s *Section) BlockCount() int64 {"},{"line_number":97,"context_line":"\tif s.endBlock \u003d\u003d -1 {"},{"line_number":98,"context_line":"\t\treturn -1"},{"line_number":99,"context_line":"\t}"},{"line_number":100,"context_line":"\treturn s.endBlock - s.startBlock"}],"source_content_type":"text/x-go","patch_set":6,"id":"13aa0306_36f1af6b","line":97,"range":{"start_line":97,"start_character":6,"end_line":97,"end_character":14},"in_reply_to":"1ed06d85_80fab139","updated":"2023-07-19 16:19:00.000000000","message":"This was part of a concept which didn\u0027t make this stack. It\u0027s used to dynamically grow block devices based on images. I removed it.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"}],"metropolis/pkg/blockdev/blockdev_linux.go":[{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"// RereadPartitionTable refreshes the kernel\u0027s view of the partition table"},{"line_number":104,"context_line":"// after changes made from userspace."},{"line_number":105,"context_line":"func (d *Device) RereadPartitionTable() error {"},{"line_number":106,"context_line":"\tvar err unix.Errno"},{"line_number":107,"context_line":"\tif ctrlErr :\u003d d.rawConn.Control(func(fd uintptr) {"},{"line_number":108,"context_line":"\t\t_, _, err \u003d unix.Syscall(unix.SYS_IOCTL, fd, unix.BLKRRPART, 0)"}],"source_content_type":"text/x-go","patch_set":6,"id":"8e57cad0_104254db","line":105,"range":{"start_line":105,"start_character":17,"end_line":105,"end_character":37},"updated":"2023-06-29 11:00:41.000000000","message":"RefreshPartitionTable?","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"// RereadPartitionTable refreshes the kernel\u0027s view of the partition table"},{"line_number":104,"context_line":"// after changes made from userspace."},{"line_number":105,"context_line":"func (d *Device) RereadPartitionTable() error {"},{"line_number":106,"context_line":"\tvar err unix.Errno"},{"line_number":107,"context_line":"\tif ctrlErr :\u003d d.rawConn.Control(func(fd uintptr) {"},{"line_number":108,"context_line":"\t\t_, _, err \u003d unix.Syscall(unix.SYS_IOCTL, fd, unix.BLKRRPART, 0)"}],"source_content_type":"text/x-go","patch_set":6,"id":"4ad3ea36_88fb27c0","line":105,"range":{"start_line":105,"start_character":17,"end_line":105,"end_character":37},"in_reply_to":"8e57cad0_104254db","updated":"2023-07-03 12:09:02.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"// OpenDevice opens a block device given a path to its inode."},{"line_number":121,"context_line":"// TODO: Read-only and O_DIRECT"},{"line_number":122,"context_line":"func OpenDevice(path string) (*Device, error) {"},{"line_number":123,"context_line":"\toutFile, err :\u003d os.Open(path)"},{"line_number":124,"context_line":"\tif err !\u003d nil {"},{"line_number":125,"context_line":"\t\treturn nil, fmt.Errorf(\"failed to open block device: %w\", err)"}],"source_content_type":"text/x-go","patch_set":6,"id":"0c215aab_25be9b0b","line":122,"range":{"start_line":122,"start_character":5,"end_line":122,"end_character":15},"updated":"2023-06-29 11:00:41.000000000","message":"Stutter: blockdev.OpenDevice -\u003e blockdev.Open.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"// OpenDevice opens a block device given a path to its inode."},{"line_number":121,"context_line":"// TODO: Read-only and O_DIRECT"},{"line_number":122,"context_line":"func OpenDevice(path string) (*Device, error) {"},{"line_number":123,"context_line":"\toutFile, err :\u003d os.Open(path)"},{"line_number":124,"context_line":"\tif err !\u003d nil {"},{"line_number":125,"context_line":"\t\treturn nil, fmt.Errorf(\"failed to open block device: %w\", err)"}],"source_content_type":"text/x-go","patch_set":6,"id":"f4fa2944_79fc9ea5","line":122,"range":{"start_line":122,"start_character":5,"end_line":122,"end_character":15},"in_reply_to":"0c215aab_25be9b0b","updated":"2023-07-03 12:09:02.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":127,"context_line":"\treturn DeviceFromFile(outFile)"},{"line_number":128,"context_line":"}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"func DeviceFromFile(outFile *os.File) (*Device, error) {"},{"line_number":131,"context_line":"\toutFileC, err :\u003d outFile.SyscallConn()"},{"line_number":132,"context_line":"\tif err !\u003d nil {"},{"line_number":133,"context_line":"\t\treturn nil, fmt.Errorf(\"error getting SyscallConn: %w\", err)"}],"source_content_type":"text/x-go","patch_set":6,"id":"2c6b6c3c_b3def712","line":130,"range":{"start_line":130,"start_character":5,"end_line":130,"end_character":19},"updated":"2023-06-29 11:00:41.000000000","message":"Needs godoc if exported.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":127,"context_line":"\treturn DeviceFromFile(outFile)"},{"line_number":128,"context_line":"}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"func DeviceFromFile(outFile *os.File) (*Device, error) {"},{"line_number":131,"context_line":"\toutFileC, err :\u003d outFile.SyscallConn()"},{"line_number":132,"context_line":"\tif err !\u003d nil {"},{"line_number":133,"context_line":"\t\treturn nil, fmt.Errorf(\"error getting SyscallConn: %w\", err)"}],"source_content_type":"text/x-go","patch_set":6,"id":"b027d9ab_dbd80a77","line":130,"range":{"start_line":130,"start_character":5,"end_line":130,"end_character":19},"updated":"2023-06-29 11:00:41.000000000","message":"Stutter: blockdev.DeviceFromFile -\u003e blockdev.FromFile.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":false,"context_lines":[{"line_number":127,"context_line":"\treturn DeviceFromFile(outFile)"},{"line_number":128,"context_line":"}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"func DeviceFromFile(outFile *os.File) (*Device, error) {"},{"line_number":131,"context_line":"\toutFileC, err :\u003d outFile.SyscallConn()"},{"line_number":132,"context_line":"\tif err !\u003d nil {"},{"line_number":133,"context_line":"\t\treturn nil, fmt.Errorf(\"error getting SyscallConn: %w\", err)"}],"source_content_type":"text/x-go","patch_set":6,"id":"5b6d2718_42fc3f21","line":130,"range":{"start_line":130,"start_character":5,"end_line":130,"end_character":19},"in_reply_to":"2c6b6c3c_b3def712","updated":"2023-07-03 12:09:02.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":false,"context_lines":[{"line_number":127,"context_line":"\treturn DeviceFromFile(outFile)"},{"line_number":128,"context_line":"}"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"func DeviceFromFile(outFile *os.File) (*Device, error) {"},{"line_number":131,"context_line":"\toutFileC, err :\u003d outFile.SyscallConn()"},{"line_number":132,"context_line":"\tif err !\u003d nil {"},{"line_number":133,"context_line":"\t\treturn nil, fmt.Errorf(\"error getting SyscallConn: %w\", err)"}],"source_content_type":"text/x-go","patch_set":6,"id":"27c13902_7a7498cc","line":130,"range":{"start_line":130,"start_character":5,"end_line":130,"end_character":19},"in_reply_to":"b027d9ab_dbd80a77","updated":"2023-07-03 12:09:02.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":139,"context_line":"\tif errors.Is(err, unix.ENOTTY) || errors.Is(err, unix.EINVAL) {"},{"line_number":140,"context_line":"\t\treturn nil, ErrNotBlockDevice"},{"line_number":141,"context_line":"\t} else if err !\u003d nil {"},{"line_number":142,"context_line":"\t\treturn nil, fmt.Errorf(\"failed determining disk block size: %w\", err)"},{"line_number":143,"context_line":"\t}"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"\tvar sizeBytes uint64"}],"source_content_type":"text/x-go","patch_set":6,"id":"e1cfa194_49cc0285","line":142,"range":{"start_line":142,"start_character":26,"end_line":142,"end_character":32},"updated":"2023-06-29 11:00:41.000000000","message":"```suggestion\n\t\treturn nil, fmt.Errorf(\"when determining disk block size: %w\", err)\n```\n\n(also below)","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":false,"context_lines":[{"line_number":139,"context_line":"\tif errors.Is(err, unix.ENOTTY) || errors.Is(err, unix.EINVAL) {"},{"line_number":140,"context_line":"\t\treturn nil, ErrNotBlockDevice"},{"line_number":141,"context_line":"\t} else if err !\u003d nil {"},{"line_number":142,"context_line":"\t\treturn nil, fmt.Errorf(\"failed determining disk block size: %w\", err)"},{"line_number":143,"context_line":"\t}"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"\tvar sizeBytes uint64"}],"source_content_type":"text/x-go","patch_set":6,"id":"fb0bc91d_916e2526","line":142,"range":{"start_line":142,"start_character":26,"end_line":142,"end_character":32},"in_reply_to":"e1cfa194_49cc0285","updated":"2023-07-03 12:09:02.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e7585d6d948490da598bf47c19b01e5075340893","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\t\"golang.org/x/sys/unix\""},{"line_number":14,"context_line":")"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"// TODO(lorenz): Upstream these into x/sys/unix"},{"line_number":17,"context_line":"const ("},{"line_number":18,"context_line":"\tblkdiscard \u003d 0x1277"},{"line_number":19,"context_line":"\tblkzeroout \u003d 0x127f"}],"source_content_type":"text/x-go","patch_set":11,"id":"160eacb4_cbb8d9dc","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":47},"updated":"2023-07-20 14:37:59.000000000","message":"https://go-review.googlesource.com/c/sys/+/511597","commit_id":"e56eda22872c55cec1314a8c63b9f916114d79ee"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"36dfefedc3debf84f2088bc6c0836b6c513c16e7","unresolved":true,"context_lines":[{"line_number":60,"context_line":"\t}); err !\u003d nil {"},{"line_number":61,"context_line":"\t\treturn err"},{"line_number":62,"context_line":"\t}"},{"line_number":63,"context_line":"\tif err \u003d\u003d unix.EOPNOTSUPP {"},{"line_number":64,"context_line":"\t\treturn ErrUnsupported"},{"line_number":65,"context_line":"\t}"},{"line_number":66,"context_line":"\tif err !\u003d unix.Errno(0) {"},{"line_number":67,"context_line":"\t\treturn fmt.Errorf(\"failed to discard: %w\", err)"},{"line_number":68,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":11,"id":"cf344ed6_685c2320","line":65,"range":{"start_line":63,"start_character":1,"end_line":65,"end_character":2},"updated":"2023-07-20 15:32:49.000000000","message":"Will this branch ever be taken? There\u0027s an err check above. Maybe rename that err to `ctrlErr` as elsewhere.","commit_id":"e56eda22872c55cec1314a8c63b9f916114d79ee"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"24941a74225c58ee4371ed924cc86f30c677b074","unresolved":false,"context_lines":[{"line_number":60,"context_line":"\t}); err !\u003d nil {"},{"line_number":61,"context_line":"\t\treturn err"},{"line_number":62,"context_line":"\t}"},{"line_number":63,"context_line":"\tif err \u003d\u003d unix.EOPNOTSUPP {"},{"line_number":64,"context_line":"\t\treturn ErrUnsupported"},{"line_number":65,"context_line":"\t}"},{"line_number":66,"context_line":"\tif err !\u003d unix.Errno(0) {"},{"line_number":67,"context_line":"\t\treturn fmt.Errorf(\"failed to discard: %w\", err)"},{"line_number":68,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":11,"id":"4b6b482a_be09e0b9","line":65,"range":{"start_line":63,"start_character":1,"end_line":65,"end_character":2},"in_reply_to":"5ea6a614_3956cba2","updated":"2023-07-26 10:48:37.000000000","message":"Ack","commit_id":"e56eda22872c55cec1314a8c63b9f916114d79ee"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a05aadd7b92fed0b589a2106ef92ce944a07947c","unresolved":true,"context_lines":[{"line_number":60,"context_line":"\t}); err !\u003d nil {"},{"line_number":61,"context_line":"\t\treturn err"},{"line_number":62,"context_line":"\t}"},{"line_number":63,"context_line":"\tif err \u003d\u003d unix.EOPNOTSUPP {"},{"line_number":64,"context_line":"\t\treturn ErrUnsupported"},{"line_number":65,"context_line":"\t}"},{"line_number":66,"context_line":"\tif err !\u003d unix.Errno(0) {"},{"line_number":67,"context_line":"\t\treturn fmt.Errorf(\"failed to discard: %w\", err)"},{"line_number":68,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":11,"id":"5ea6a614_3956cba2","line":65,"range":{"start_line":63,"start_character":1,"end_line":65,"end_character":2},"in_reply_to":"cf344ed6_685c2320","updated":"2023-07-25 12:08:36.000000000","message":"Technically this works due to scoping, but it\u0027s super confusing. Renamed the other error.","commit_id":"e56eda22872c55cec1314a8c63b9f916114d79ee"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"36dfefedc3debf84f2088bc6c0836b6c513c16e7","unresolved":true,"context_lines":[{"line_number":94,"context_line":"\t\treturn ctrlErr"},{"line_number":95,"context_line":"\t}"},{"line_number":96,"context_line":"\tif err !\u003d nil {"},{"line_number":97,"context_line":"\t\tif err !\u003d nil {"},{"line_number":98,"context_line":"\t\t\treturn fmt.Errorf(\"failed to zero out: %w\", err)"},{"line_number":99,"context_line":"\t\t}"},{"line_number":100,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":11,"id":"7f31b2ce_f40cc3f1","line":97,"range":{"start_line":97,"start_character":2,"end_line":97,"end_character":17},"updated":"2023-07-20 15:32:49.000000000","message":"We probably don\u0027t have to check this twice.","commit_id":"e56eda22872c55cec1314a8c63b9f916114d79ee"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a05aadd7b92fed0b589a2106ef92ce944a07947c","unresolved":false,"context_lines":[{"line_number":94,"context_line":"\t\treturn ctrlErr"},{"line_number":95,"context_line":"\t}"},{"line_number":96,"context_line":"\tif err !\u003d nil {"},{"line_number":97,"context_line":"\t\tif err !\u003d nil {"},{"line_number":98,"context_line":"\t\t\treturn fmt.Errorf(\"failed to zero out: %w\", err)"},{"line_number":99,"context_line":"\t\t}"},{"line_number":100,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":11,"id":"3383141a_d1c98e63","line":97,"range":{"start_line":97,"start_character":2,"end_line":97,"end_character":17},"in_reply_to":"7f31b2ce_f40cc3f1","updated":"2023-07-25 12:08:36.000000000","message":"Done","commit_id":"e56eda22872c55cec1314a8c63b9f916114d79ee"}],"metropolis/pkg/blockdev/memory.go":[{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0192092275646398e72380ead7bacca7a8c2a9b4","unresolved":true,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"// Memory is a memory-backed implementation of BlockDev. It is optimal"},{"line_number":11,"context_line":"// for testing and temporary use, as it is fast and platform-independent."},{"line_number":12,"context_line":"// This implementation ist not by itself concurrency-safe."},{"line_number":13,"context_line":"type Memory struct {"},{"line_number":14,"context_line":"\tblockSize  int64"},{"line_number":15,"context_line":"\tblockCount int64"}],"source_content_type":"text/x-go","patch_set":6,"id":"60e93a2d_44df95af","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":58},"updated":"2023-06-29 11:00:41.000000000","message":"This goes against `io.{Writer,Reader}At` which should be safe to use in parallel as long as the ranges don\u0027t overlap.\n\nhttps://pkg.go.dev/io#WriterAt","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"82d8674394e96e9ecc7ccbb8fa2a8fb79e9b1446","unresolved":true,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"// Memory is a memory-backed implementation of BlockDev. It is optimal"},{"line_number":11,"context_line":"// for testing and temporary use, as it is fast and platform-independent."},{"line_number":12,"context_line":"// This implementation ist not by itself concurrency-safe."},{"line_number":13,"context_line":"type Memory struct {"},{"line_number":14,"context_line":"\tblockSize  int64"},{"line_number":15,"context_line":"\tblockCount int64"}],"source_content_type":"text/x-go","patch_set":6,"id":"6ce64c80_6efae2dd","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":58},"in_reply_to":"60e93a2d_44df95af","updated":"2023-07-03 12:09:02.000000000","message":"Is writing to a preallocated slice in different places from different Goroutines acceptable according to Go\u0027s memory model? If yes, we can just drop this warning.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"ae216911e10b21af1a1d1a008371e40ffcbad497","unresolved":true,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"// Memory is a memory-backed implementation of BlockDev. It is optimal"},{"line_number":11,"context_line":"// for testing and temporary use, as it is fast and platform-independent."},{"line_number":12,"context_line":"// This implementation ist not by itself concurrency-safe."},{"line_number":13,"context_line":"type Memory struct {"},{"line_number":14,"context_line":"\tblockSize  int64"},{"line_number":15,"context_line":"\tblockCount int64"}],"source_content_type":"text/x-go","patch_set":6,"id":"b9526f9f_bc743c32","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":58},"in_reply_to":"6ce64c80_6efae2dd","updated":"2023-07-03 12:13:56.000000000","message":"Yes, as far as I understand it is safe. So you can drop the warning.","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4547cff9dab355362ff636336c399f079223bf82","unresolved":false,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"// Memory is a memory-backed implementation of BlockDev. It is optimal"},{"line_number":11,"context_line":"// for testing and temporary use, as it is fast and platform-independent."},{"line_number":12,"context_line":"// This implementation ist not by itself concurrency-safe."},{"line_number":13,"context_line":"type Memory struct {"},{"line_number":14,"context_line":"\tblockSize  int64"},{"line_number":15,"context_line":"\tblockCount int64"}],"source_content_type":"text/x-go","patch_set":6,"id":"b1d87f99_bbf1a790","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":58},"in_reply_to":"b9526f9f_bc743c32","updated":"2023-07-19 16:19:00.000000000","message":"Done","commit_id":"041ed82354300edbca0d2aa681d353b1be4d218e"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"36dfefedc3debf84f2088bc6c0836b6c513c16e7","unresolved":true,"context_lines":[{"line_number":88,"context_line":"\t\treturn fmt.Errorf(\"startByte (%d) larger than endByte (%d), invalid interval\", startByte, endByte)"},{"line_number":89,"context_line":"\t}"},{"line_number":90,"context_line":"\tdevSize :\u003d m.blockSize * m.blockCount"},{"line_number":91,"context_line":"\tif startByte \u003e devSize || startByte \u003c 0 {"},{"line_number":92,"context_line":"\t\treturn fmt.Errorf(\"startByte (%d) out of range (0-%d)\", endByte, devSize)"},{"line_number":93,"context_line":"\t}"},{"line_number":94,"context_line":"\tif endByte \u003e devSize || endByte \u003c 0 {"}],"source_content_type":"text/x-go","patch_set":11,"id":"2625897b_0e2605c5","line":91,"range":{"start_line":91,"start_character":14,"end_line":91,"end_character":15},"updated":"2023-07-20 15:32:49.000000000","message":"`\u003e\u003d`?","commit_id":"e56eda22872c55cec1314a8c63b9f916114d79ee"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"bcbf68fbef1b358f65c5634f7def4ec7d3db91fe","unresolved":false,"context_lines":[{"line_number":88,"context_line":"\t\treturn fmt.Errorf(\"startByte (%d) larger than endByte (%d), invalid interval\", startByte, endByte)"},{"line_number":89,"context_line":"\t}"},{"line_number":90,"context_line":"\tdevSize :\u003d m.blockSize * m.blockCount"},{"line_number":91,"context_line":"\tif startByte \u003e devSize || startByte \u003c 0 {"},{"line_number":92,"context_line":"\t\treturn fmt.Errorf(\"startByte (%d) out of range (0-%d)\", endByte, devSize)"},{"line_number":93,"context_line":"\t}"},{"line_number":94,"context_line":"\tif endByte \u003e devSize || endByte \u003c 0 {"}],"source_content_type":"text/x-go","patch_set":11,"id":"1d5a920b_5811eacf","line":91,"range":{"start_line":91,"start_character":14,"end_line":91,"end_character":15},"in_reply_to":"2625897b_0e2605c5","updated":"2023-07-26 15:45:40.000000000","message":"Done","commit_id":"e56eda22872c55cec1314a8c63b9f916114d79ee"}]}
