Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so2:laboratoare:lab07 [2018/04/12 11:13]
elena.sandulescu [Structura bio]
so2:laboratoare:lab07 [2018/05/02 12:31] (current)
theodor.stoican [Structura block_device_operations]
Line 253: Line 253:
 } }
    
-static ​int my_block_release(struct gendisk *gd, fmode_t mode)+static ​void my_block_release(struct gendisk *gd, fmode_t mode)
 { {
         //...         //...
- 
-        return 0; 
 } }
    
Line 384: Line 382:
 Partea centrală a unui driver de tip bloc este metoda de tip [[http://​lxr.free-electrons.com/​source/​include/​linux/​blkdev.h?​v=4.9#​L224 | request_fn_proc]]. În exemplele anterioare, funcția care satisfăcea acest rol era ''​my_block_request''​. După cum s-a precizat și în secțiunea [[#Crearea și ștergerea cozii de cereri | Crearea și ștergerea cozii de cereri]], această funcție este atașată driverului prin apelarea [[http://​lxr.free-electrons.com/​source/​block/​blk-core.c?​v=4.9#​L781 | blk_init_queue]]. Partea centrală a unui driver de tip bloc este metoda de tip [[http://​lxr.free-electrons.com/​source/​include/​linux/​blkdev.h?​v=4.9#​L224 | request_fn_proc]]. În exemplele anterioare, funcția care satisfăcea acest rol era ''​my_block_request''​. După cum s-a precizat și în secțiunea [[#Crearea și ștergerea cozii de cereri | Crearea și ștergerea cozii de cereri]], această funcție este atașată driverului prin apelarea [[http://​lxr.free-electrons.com/​source/​block/​blk-core.c?​v=4.9#​L781 | blk_init_queue]].
  
-Această metodă este apelată atunci când kernel-ul consideră că driverul trebuie să proceseze cereri de I/O. Metoda trebuie să pornească procesarea cererilor din coada, dar nu este obligată să le și termine, cererile putând fi terminate din alte părți ale driverului.+Această metodă este apelată atunci când kernel-ul consideră că driverul trebuie să proceseze cereri de I/O. Metoda trebuie să pornească procesarea cererilor din coadă, dar nu este obligată să le și termine, cererile putând fi terminate din alte părți ale driverului.
  
 Parametrul ''​lock'',​ transmis la crearea unei cozi de cereri, reprezintă un spinlock pe care kernel-ul îl deține atunci când execută metoda ''​request''​. Din acest motiv, metoda ''​request''​ rulează în context atomic și trebuie să respecte regulile pentru cod atomic (nu trebuie să apeleze funcții care pot duce la sleep etc.). Acest lock asigură și faptul că nu vor fi adăugate în coada alte cereri pentru device în timp ce se execută metoda request. Parametrul ''​lock'',​ transmis la crearea unei cozi de cereri, reprezintă un spinlock pe care kernel-ul îl deține atunci când execută metoda ''​request''​. Din acest motiv, metoda ''​request''​ rulează în context atomic și trebuie să respecte regulile pentru cod atomic (nu trebuie să apeleze funcții care pot duce la sleep etc.). Acest lock asigură și faptul că nu vor fi adăugate în coada alte cereri pentru device în timp ce se execută metoda request.
Line 506: Line 504:
 static int my_xfer_bio(struct my_block_dev *dev, struct bio *bio) static int my_xfer_bio(struct my_block_dev *dev, struct bio *bio)
 { {
-    int i; 
     struct bio_vec bvec;     struct bio_vec bvec;
     struct bvec_iter i;     struct bvec_iter i;
so2/laboratoare/lab07.1523520819.txt.gz · Last modified: 2018/04/12 11:13 by elena.sandulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0