Differences

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

Link to this comparison view

so2:laboratoare:lab07 [2018/04/09 17:12]
ionel.ghita
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 436: Line 434:
 struct bio { struct bio {
         //...         //...
-        struct ​block_device ​    *bi_bdev;+        struct ​gendisk ​         ​*bi_disk;
         unsigned int            bi_opf; ​         /* bottom bits req flags, top bits REQ_OP. Use accessors. */         unsigned int            bi_opf; ​         /* bottom bits req flags, top bits REQ_OP. Use accessors. */
  //​... ​  //​... ​
Line 481: Line 479:
        ​struct bio *bio = bio_alloc(GFP_NOIO,​ 1);  ​        ​struct bio *bio = bio_alloc(GFP_NOIO,​ 1);  ​
        //...        //...
-       ​bio->​bi_bdev ​= bdev;+       ​bio->​bi_disk ​= bdev->​bd_disk;
        ​bio->​bi_iter.bi_sector = sector;        ​bio->​bi_iter.bi_sector = sector;
        ​bio_set_op_attrs(bio,​ REQ_OP_READ,​ 0);        ​bio_set_op_attrs(bio,​ REQ_OP_READ,​ 0);
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.1523283174.txt.gz · Last modified: 2018/04/09 17:12 by ionel.ghita
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