Skip to content

Lab09 filesystems2#9

Open
maranicolae wants to merge 7 commits intomasterfrom
lab09_filesystems2
Open

Lab09 filesystems2#9
maranicolae wants to merge 7 commits intomasterfrom
lab09_filesystems2

Conversation

@maranicolae
Copy link
Owner

Laborator 9

myfs

Exercitiul 1

Am identificat versiunea de kernel de pe masina pentru a gasi versiunea corecta a ramfs pe care am folosit-o ca model.

root@qemux86:~# cat /proc/version
Linux version 5.10.14+

Am completat structura struct inode_operations cu operatii specifice inode-ului de tip director: mknod, create si mkdir; aceste functii au fost apoi implementate dupa modelul din ramfs. Pentru celelalte functii am folosit varianta generica din VFS.

Exercitiul 2

Completand structura struct file_operations am adaugat operatiile specifice lucrului cu structura file asociata inode-ului folosind tot implementarile generice din VFS. Am adaugat in structura inode_operations operatiile pentru manipulare inode-ului si structura address_space_operations. Dupa initializare am asignat structurile completate anterior campurilor potrivite din structura de inode.

Am testat corectitudinea implementarii astfel:

root@qemux86:~/skels/filesystems/myfs# insmod myfs.ko
myfs: loading out-of-tree module taints kernel.
root@qemux86:~/skels/filesystems/myfs# mkdir -p /mnt/myfs
root@qemux86:~/skels/filesystems/myfs# mount -t myfs none /mnt/myfs
root inode has 2 link(s)
root@qemux86:~/skels/filesystems/myfs# touch /mnt/myfs/peanuts.txt
mknod begin
mknod end
root@qemux86:~/skels/filesystems/myfs# mkdir -p /mnt/myfs/mountain/forest
mknod begin
mknod end
mknod begin
mknod end
root@qemux86:~/skels/filesystems/myfs# touch /mnt/myfs/mountain/forest/tree.txt
mknod begin
mknod end
root@qemux86:~/skels/filesystems/myfs# rm /mnt/myfs/mountain/forest/tree.txt
root@qemux86:~/skels/filesystems/myfs# rmdir /mnt/myfs/mountain/forest
root@qemux86:~/skels/filesystems/myfs# echo "chocolate" > /mnt/myfs/peanuts.txt
root@qemux86:~/skels/filesystems/myfs# cat /mnt/myfs/peanuts.txt
chocolate
root@qemux86:~/skels/filesystems/myfs# cat /mnt/myfs/peanuts.txt

minfs

Exercitiul 1

Implementam functia minix_readdir. Am atribuit campurilor i_op (operatii ale inode-ului) si i_fop (operatii ale strucurii file a inode-ului) structurile minfs_dir_inode_operations si minfs_dir_operations.

Am completat variabilele inode si mii conform implementarii minix. Apoi am citit folosind sb_bread data block-ul din minfs_inode_info , acesta va contine un vector de dentry-uri deoarece lucram cu un inode de tip director. Am iterat prin acest vector si pentru fiecare dentry am verificat ca membrul ino sa nu fie nul si am afisat numele.

Testare: Comanda ls esueaza pentru ca functia lookup nu este implementata.

Exercitiul 2

Am extras inode-ul parinte pentru dentry-ul curent (adica directorul din care face parte) si am iterat prin lista de dentry-uri a acestuia incercand sa gasim acel dentry al carui nume se potriveste cu name.

Exercitiul 3

Completam campurile inode-ului cu structurile pentru address space (address_space_operations), operatii ale inode-ului (inode_operations) si operatiile structurii file asociate inode-ului (file_operations). Folosind bitmap operations identificam primul bit neocupat din imap (find_first_zero_bit) si il marcam ca ocupat. Apoi alocam si initializam un nou inode si il inseram in hashmap.

Continuam prin implementarea functiei minfs_add_link gasind inode-ul parinte asociat dentry-ului (directorul) si extragem data block-ul. Iteram prin lista de dentry-uri si cautam pe primul ce are valoarea ino nula. In cazul in care nu este gasita nicio intrare libera, se va return -ENOSPC.

ChinYikMing and others added 7 commits March 30, 2022 21:25
This documents serves as a guideline for working inside a team.

It encourages members to use git and PR, work on a common design,
split the work into smaller tasks and then doing peer review.

The final result should be the code together with git history logs.

Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Signed-off-by: Mara-Ioana Nicolae <maraioana9967@gmail.com>
Signed-off-by: Mara-Ioana Nicolae <maraioana9967@gmail.com>
Signed-off-by: Mara-Ioana Nicolae <maraioana9967@gmail.com>
Signed-off-by: Mara-Ioana Nicolae <maraioana9967@gmail.com>
Signed-off-by: Mara-Ioana Nicolae <maraioana9967@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants