Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 50 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
@@ -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 ..

7 changes: 6 additions & 1 deletion easy-fs/src/efs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,12 @@ impl EasyFileSystem {
((inode_num * core::mem::size_of::<DiskInode>() + 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,
Expand Down