-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Inode::finalize() 만으로 Fstransaction이 열린 상태인지 파악하기 #290
Comments
이 이슈는 다음의 두 문제로 나눌 수 있습니다.
현재 실행 중인
|
2.를 선호합니다. |
제 글은 문제 1, 2가 있다는 것과 각각에 대한 해결책을 이야기한 것인데, 2를 선호하신다는 말씀은 1은 적용하지 않고 2만 적용하면 좋겠다는 뜻인가요? |
@Medowhill 아.. 제가 대충 읽어서 논지를 파악을 잘 못했네요. 기력을 회복한 후 내일 오전 전까진 다시 답변드리겠습니다. 미안합니다... 혹시 더 빨리 논의가 필요하면 전화 부탁드려요 |
지금 2에 대한 해결책을 시도해 보는 중이었는데, 1은 아마 2와 별개로 진행할 수 있을 것 같은데, 급한 이슈는 아니니 교수님께서 편하실 때 보시고 천천히 의견 주셔도 괜찮을 것 같습니다. |
|
@jeehoonkang 교수님,
질문을 드리는 이유는 해당 미팅에 관하여 (a) 제가 유심히 봐야할 주제인지 (b) 만약 봐야할 주제라면 어느정도의 background를 지니고 미팅에 참여해야할지 판단하기 위함입니다. |
(1) 이 이슈에 대한 얘기이고, (2) 이 이슈를 해결하기 위한 방법을 폭넓게 생각해보자는 의미였습니ㅏㄷ. |
@jeehoonkang 오후 세 시에 미팅 만들고 초대해 드렸습니다. 저는 오프라인을 조금 더 선호하지만, 참석할 사람이 다 정해진 후에 온라인/오프라인 여부를 정하면 될 것 같습니다. |
@Medowhill 아직 이슈에 대한 파악이 부족하여 급한 논의라면 저는 제외하고 진행하셔도 좋을 것 같습니다. 추후에 follow up 하겠습니다. @travis1829 @anemoneflower 두 분은 참석하실 계획이신가요? |
@coolofficials 급한 이슈는 아니라고 생각합니다. 어떤 이슈인지도 간단하게 설명할 생각이라서 그냥 가볍게 듣고 가셔도 괜찮습니다. |
@Medowhill 그렇다면 내일 최대한 코드와 이슈를 이해하고 참여하겠습니다. 저는 온라인 오프라인 둘 다 가능합니다. |
@Medowhill 저도 참여하겠습니다. 온라인/오프라인 둘다 가능합니다. |
@Medowhill 그러면 저도 초대해주시면 감사하겠습니다. (온라인/오프라인 모두 가능합니다.) |
@Medowhill 이 이슈 관련 변경점이 있었나요? |
없습니다. |
pub trait ArenaObject {
type Ctx<'a, 'b: 'a>;
fn finalize<'a, 'b: 'a, A: Arena>(&mut self, ctx: Self::Ctx<'a, 'b>);
} 이에 따라 fn dealloc<'id, 'a, 'b>(
self: ArenaRef<'id, &Self>,
handle: Handle<'id, Self::Data>,
ctx: <Self::Data as ArenaObject>::Ctx<'a, 'b>,
) {...}
impl<A: Arena> ArenaRc<A> {
pub fn free(mut self, ctx: <A::Data as ArenaObject>::Ctx<'_, '_>) {...}
}
impl ArenaObject for BufEntry {
type Ctx<'a, 'id: 'a> = ();
fn finalize<'a, 'id: 'a, A: Arena>(&mut self, _: ()) {}
} 그러므로 pub struct DroppableRc<T: for <'a, 'b: 'a> ArenaObject<Ctx<'a, 'b>=()>, A: Arena<Data = T>> {
rc: ManuallyDrop<ArenaRc<A>>
} 하지만 pub struct DroppableRc<'a, 'b: 'a, T: ArenaObject<Ctx<'a, 'b>=()>, A: Arena<Data = T>> {
rc: ManuallyDrop<ArenaRc<A>>
} 하지만 이 경우, 원하지 않는 두 개의 lifetime parameter가 pub struct DroppableRc<T: ArenaObject<Ctx<'static, 'static>=()>, A: Arena<Data = T>> {
rc: ManuallyDrop<ArenaRc<A>>
} 이렇게 하면 컴파일이 잘 되지만, 결과적으로, 컴파일러의 버그로 추정되는 기능을 이용해 원하는 것을 구현했는데, rustfmt의 버그로 인해 포매팅을 하면 코드가 달라지는 상황입니다. |
|
#272 리팩토링 후 해결해야 할 이슈입니다.
impl ArenaObject for Inode
내에서 아래와 같이 finalize를 실행합니다.이 때
InodeGuard
가 아닌Inode::finalize()
만으로Fstransaction
이 열린 상태인지 파악할 수 있어야 합니다. (run-time performance를 위해)즉,
Inode::finalize()
안에서begin_op(), end_op()
를 쓰지 않는 방법을 고민해야 합니다.rv6/kernel-rs/src/fs/inode.rs
Lines 484 to 503 in eb62624
The text was updated successfully, but these errors were encountered: