From 468749381de1aeec00a0ab45c57c0468d286f293 Mon Sep 17 00:00:00 2001 From: hangyudu Date: Thu, 18 Dec 2025 17:06:10 +0800 Subject: [PATCH 1/2] [ch7][update]optimizing makefile for docker --- Makefile | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 21d01c2..abfa61b 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,58 @@ +CONTAINER_NAME ?= rcore-container DOCKER_NAME ?= rcore-docker -.PHONY: docker build_docker - +.PHONY: docker build_docker attach_docker rebuild_docker fmt + docker: - docker run --network host --rm -it -v ${PWD}:/mnt -w /mnt ${DOCKER_NAME} bash + if ! docker images --format "{{.Repository}}" | grep -q "^${DOCKER_NAME}$$"; then \ + echo "❌ image '${DOCKER_NAME}' not exits,start building..."; \ + make build_docker; \ + else \ + echo "✅ image '${DOCKER_NAME}' was built, skip building..."; \ + fi; \ + if docker ps -a --filter "name=^/${CONTAINER_NAME}$$" --format "{{.Names}}" | grep -q "${CONTAINER_NAME}"; then \ + echo "✅ find existing container: ${CONTAINER_NAME},accessing..."; \ + if ! docker ps --filter "name=^/${CONTAINER_NAME}$$" --format "{{.Names}}" | grep -q "${CONTAINER_NAME}"; then \ + echo "🔧 container isn't running,start launching..."; \ + docker start ${CONTAINER_NAME}; \ + fi; \ + docker exec -it ${CONTAINER_NAME} bash; \ + else \ + echo "🚀 no existing container is found: ${CONTAINER_NAME},start creating new container..."; \ + docker run --network host -it -d \ + --name ${CONTAINER_NAME} \ + -v ${CURDIR}:/mnt \ + -w /mnt \ + ${DOCKER_NAME} \ + bash; \ + docker exec -it ${CONTAINER_NAME} bash; \ + fi -build_docker: +# build docker if container doesn't exist +build_docker: docker build -t ${DOCKER_NAME} . +attach_docker: + @if docker ps -a --filter "name=^/${CONTAINER_NAME}$$" --format "{{.Names}}" | grep -q "${CONTAINER_NAME}"; then \ + if ! docker ps --filter "name=^/${CONTAINER_NAME}$$" --format "{{.Names}}" | grep -q "${CONTAINER_NAME}"; then \ + docker start ${CONTAINER_NAME}; \ + fi; \ + docker exec -it ${CONTAINER_NAME} bash; \ + else \ + echo "❌ no existing container is found: ${CONTAINER_NAME},please run 'make docker' to create container"; \ + fi + +rebuild_docker: + @echo "🗑️ delete existing container ${CONTAINER_NAME}..."; \ + docker rm -f ${CONTAINER_NAME} 2>/dev/null; \ + echo "🚀 start creating container..."; \ + docker run --network host -it -d \ + --name ${CONTAINER_NAME} \ + -v ${CURDIR}:/mnt \ + -w /mnt \ + ${DOCKER_NAME} \ + bash; \ + docker exec -it ${CONTAINER_NAME} bash; + fmt: cd easy-fs; cargo fmt; cd ../easy-fs-fuse cargo fmt; cd ../os ; cargo fmt; cd ../user; cargo fmt; cd .. From b3ed3070ce34169714c2542b131ad892623f45bf Mon Sep 17 00:00:00 2001 From: hangyudu Date: Thu, 18 Dec 2025 17:14:02 +0800 Subject: [PATCH 2/2] [fix]fix round up error during data block allocation --- easy-fs/src/efs.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/easy-fs/src/efs.rs b/easy-fs/src/efs.rs index 82e95ae..5b6f064 100644 --- a/easy-fs/src/efs.rs +++ b/easy-fs/src/efs.rs @@ -29,7 +29,12 @@ impl EasyFileSystem { ((inode_num * core::mem::size_of::() + BLOCK_SZ - 1) / BLOCK_SZ) as u32; let inode_total_blocks = inode_bitmap_blocks + inode_area_blocks; let data_total_blocks = total_blocks - 1 - inode_total_blocks; - let data_bitmap_blocks = (data_total_blocks + 4096) / 4097; + let data_bitmap_blocks = data_total_blocks / 4097; + assert!( + data_bitmap_blocks >= 1, + "Not enough blocks for data bitmap! data_total_blocks={}", + data_total_blocks + ); let data_area_blocks = data_total_blocks - data_bitmap_blocks; let data_bitmap = Bitmap::new( (1 + inode_bitmap_blocks + inode_area_blocks) as usize,