{"record":{"id":"1b30064e48005451","repo":"uutils/coreutils","slug":"internal-dd-error-seek-amount-greater-than-signed","errorCode":null,"errorMessage":"Internal dd Error: Seek amount greater than signed 64-bit integer","messagePattern":"Internal dd Error: Seek amount greater than signed 64-bit integer","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/uu/dd/src/dd.rs","lineNumber":747,"sourceCode":"}\n\n/// Decide whether the given buffer is all zeros.\nfn is_sparse(buf: &[u8]) -> bool {\n    buf.iter().all(|&e| e == 0u8)\n}\n\n/// Handle O_DIRECT write errors by temporarily removing the flag and retrying.\n/// This follows GNU dd behavior for partial block writes with O_DIRECT.\n#[cfg(any(target_os = \"linux\", target_os = \"android\"))]\nfn handle_o_direct_write(f: &mut File, buf: &[u8], original_error: io::Error) -> io::Result<usize> {\n    use rustix::fs::{OFlags, fcntl_getfl, fcntl_setfl};\n\n    // Get current flags\n    let Ok(oflags) = fcntl_getfl(&*f) else {\n        return Err(original_error);\n    };\n\n    // If O_DIRECT is set, try removing it temporarily\n    if oflags.contains(OFlags::DIRECT) {\n        let flags_without_direct = oflags & !OFlags::DIRECT;\n\n        // Remove O_DIRECT flag\n        fcntl_setfl(&*f, flags_without_direct).map_err(|_| original_error)?;\n\n        // Retry the write without O_DIRECT\n        let write_result = f.write(buf);\n\n        // Restore O_DIRECT flag (GNU doesn't restore it, but we'll be safer)\n        // Log any restoration errors without failing the operation\n        if let Err(e) = fcntl_setfl(&*f, oflags).map_err(io::Error::from) {\n            // Just log the error, don't fail the whole operation\n            show_error!(\"Failed to restore O_DIRECT flag: {e}\");\n        }\n\n        write_result\n    } else {","sourceCodeStart":729,"sourceCodeEnd":765,"githubUrl":"https://github.com/uutils/coreutils/blob/9ff4114e82c8fb80420fd4fb6a319bd3227095e0/src/uu/dd/src/dd.rs#L729-L765","documentation":"Error \"Internal dd Error: Seek amount greater than signed 64-bit integer\" thrown in uutils/coreutils.","triggerScenarios":"Occurs when dd computes a seek amount exceeding the range of a signed 64-bit integer.","commonSituations":"Using enormous seek/skip values multiplied by a large block size, overflowing i64.","solutions":["Use seek/skip values that fit in a signed 64-bit integer.","Split very large offsets into multiple smaller seek operations."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9ff4114e82c8fb80420fd4fb6a319bd3227095e0","analyzedAt":"2026-08-19T21:43:27.871Z","contentChangedAt":"2026-08-19T21:43:27.871Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}