[pso] [Tema4] Actualizare dmap

Oprescu Bogdan bcoprescu at yahoo.com
Sat May 7 17:30:20 EEST 2011





________________________________
From: Oprescu Bogdan <bcoprescu at yahoo.com>
To: "pso at cursuri.cs.pub.ro" <pso at cursuri.cs.pub.ro>
Sent: Friday, May 6, 2011 12:32 PM
Subject: Re: [pso] Fw:  [Tema] Actualizare dmap


From: Vlad Dogaru <ddvlad at rosedu.org>

To: Oprescu Bogdan <bcoprescu at yahoo.com>; Proiectarea Sistemelor de Operare <pso at cursuri.cs.pub.ro>
Sent: Friday, May 6, 2011 10:56 AM
Subject: Re: [pso] [Tema] Actualizare dmap

On Wed, May 04, 2011 at 09:54:55AM -0700, Oprescu Bogdan wrote:
> Am urmatoarea problema:
>      - fac alocarea blocurilor in functia get_block. Get block e apelata la scrire si la
>           citire in writepage si readpage. Tot aici fac si actualizarea dmap. 
>      - atunci cand scriu intr-un fisier, functia de scriere este apelata mai tarziu de sistem,
>           astfel incat dmap se actualizeaza dupa cam 30 de secunde sau cand dau cat pe fisier.

Ce funcție folosești pentru a scrie/citi în fișier? do_sync_read nu ar
trebui să se comporte cum descrii tu.

Vlad

Am asa:
struct file_operations pitix_file_operations = {
    .read   
               = do_sync_read,
    .aio_read              = generic_file_aio_read,    
    .write                  = do_sync_write,
    .aio_write              = generic_file_aio_write,
    .mmap                  = generic_file_mmap,
    .fsync   
               = generic_file_fsync,
    .splice_read         = generic_file_splice_read,
    .splice_write         = generic_file_splice_write,
    .llseek                   = generic_file_llseek,
};

writepage, readpage, bmap, write_begin sunt implementata ca in minix.
Comportamentul la scriete este urmatorul:
root at spook:/tmp/pitix.mnt# echo abc > a
root at spook:/tmp/pitix.mnt# ls -l
total 4
-rw-r--r-- 2 root root   4 2011-05-06 12:11 a
drwxrwxrwx 1 root root 512 2011-05-06 12:11 lots_of_files
root at spook:/tmp/pitix.mnt# dmesg
 | grep 'pitix writepage'
root at spook:/tmp/pitix.mnt# cat a
abc
root at spook:/tmp/pitix.mnt# dmesg | grep 'pitix writepage'
root at spook:/tmp/pitix.mnt# dmesg | grep 'pitix writepage'
root at spook:/tmp/pitix.mnt# dmesg | grep 'pitix writepage'
[58861.469694] pitix writepage
[58861.471796] pitix writepage
root at spook:/tmp/pitix.mnt#

dupa cum se vede writepage se apeleaza tarziu, iar daca se face unmount intre timp datele nu se mai scriu pe disc.
Multumesc, 
     Bogdan



Bucuresti, 7 mai 2011. Temperatura afara 16 grade, cer innorat. Azi m-am trezit la 11:20.
Continui sa va tin la curent cu evolutia problemei. In caz mai incerac cineva sa ii afle cauza, mai pot sa ofer un indiciu. 
Nici write_node nu se apeleaza daca nu il apelez eu explicit in destroy, chiar daca marchez nodurile cu dirty.
Intre timp am gasit o rezolvare mai putin eleganta, dar care fucntioneaza. Apelez explicit write_inode in destroy.
Tot in destroy apelez writeback_inodes_sb, funtie din writeback.h, care forteaza screirile pe disc. 
Eu abandonez aici investigatiile. Daca se mai loveste cineva de problema asta si ii afla si cauzam, mail me. 
Multumesc,     
     Bogdan

_______________________________________________
http://elf.cs.pub.ro/so2/wiki/resurse/lista-discutii
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20110507/c3231204/attachment.htm>


More information about the pso mailing list