← 테크곳간 목록으로

글루시스 기술 블로그 · 2026. 06. 24.

zfs userspace와 zfs create 사이의 EBUSY 레이스 수정

AI 엔지니어링 브리핑

읽기만 하는 zfs userspace 조회가 데이터셋을 독점하면서 zfs create의 자동 마운트를 간헐적으로 막던 문제를, 읽기 전용 잠금 방식으로 분리하고 잠금 순서까지 조정해 해결한 과정입니다.

문제 & 배경

문제 & 배경: 데이터셋 생성 직후 자동 마운트하는 zfs create와 같은 데이터셋의 사용량을 조회하는 zfs userspace가 동시에 실행되면, 조회 작업이 불필요하게 배타적 소유권을 먼저 차지해 zfs create가 EBUSY로 실패하고 마운트되지 않은 데이터셋이 남았습니다.

기술 & 해결책

기술 & 해결책: 조회 작업에는 데이터셋을 독점하지 않는 dmu_objset_hold()를 사용하는 zfsvfs_create_hold()를 새로 만들고, hold와 own 경로를 구분해 해제하도록 수정했으며, 잠금 순서가 뒤집혀 교착되지 않도록 config 잠금을 필요한 시점에 해제·재획득하고 타입 검사도 추가했습니다.

교훈 & 주의점

교훈 & 주의점: 단순히 잠금 방식을 바꾸는 것만으로 끝나지 않으므로 잠금의 생명주기와 획득 순서를 함께 점검해야 하며, 실제 동시 실행을 반복하는 테스트로 EBUSY 재발과 교착 여부를 검증해야 합니다.

원문 읽기 ↗
내용이 비슷해요

내용이 비슷한 글을 먼저 보여드려요. 같은 문제나 해결책을 다룬다는 뜻은 아니에요.