1*7dd7cddfSDavid du Colombier typedef struct MLock MLock; 23e12c5d1SDavid du Colombier typedef struct Iosect Iosect; 33e12c5d1SDavid du Colombier typedef struct Iotrack Iotrack; 43e12c5d1SDavid du Colombier typedef struct Track Track; 53e12c5d1SDavid du Colombier typedef struct Xfs Xfs; 63e12c5d1SDavid du Colombier 7*7dd7cddfSDavid du Colombier struct MLock 83e12c5d1SDavid du Colombier { 93e12c5d1SDavid du Colombier char key; 103e12c5d1SDavid du Colombier }; 113e12c5d1SDavid du Colombier 123e12c5d1SDavid du Colombier struct Iosect 133e12c5d1SDavid du Colombier { 143e12c5d1SDavid du Colombier Iosect *next; 153e12c5d1SDavid du Colombier short flags; 16*7dd7cddfSDavid du Colombier MLock lock; 173e12c5d1SDavid du Colombier Iotrack *t; 183e12c5d1SDavid du Colombier uchar * iobuf; 193e12c5d1SDavid du Colombier }; 203e12c5d1SDavid du Colombier 213e12c5d1SDavid du Colombier struct Iotrack 223e12c5d1SDavid du Colombier { 233e12c5d1SDavid du Colombier short flags; 243e12c5d1SDavid du Colombier Xfs * xf; 253e12c5d1SDavid du Colombier long addr; 263e12c5d1SDavid du Colombier Iotrack *next; /* in lru list */ 273e12c5d1SDavid du Colombier Iotrack *prev; 283e12c5d1SDavid du Colombier Iotrack *hnext; /* in hash list */ 293e12c5d1SDavid du Colombier Iotrack *hprev; 30*7dd7cddfSDavid du Colombier MLock lock; 313e12c5d1SDavid du Colombier int ref; 323e12c5d1SDavid du Colombier Track *tp; 333e12c5d1SDavid du Colombier }; 343e12c5d1SDavid du Colombier 353e12c5d1SDavid du Colombier enum{ 363e12c5d1SDavid du Colombier Sectorsize = 512, 373e12c5d1SDavid du Colombier Sect2trk = 9, 383e12c5d1SDavid du Colombier Trksize = Sectorsize*Sect2trk 393e12c5d1SDavid du Colombier }; 403e12c5d1SDavid du Colombier 413e12c5d1SDavid du Colombier struct Track 423e12c5d1SDavid du Colombier { 433e12c5d1SDavid du Colombier Iosect *p[Sect2trk]; 443e12c5d1SDavid du Colombier uchar buf[Sect2trk][Sectorsize]; 453e12c5d1SDavid du Colombier }; 463e12c5d1SDavid du Colombier 473e12c5d1SDavid du Colombier #define BMOD (1<<0) 483e12c5d1SDavid du Colombier #define BIMM (1<<1) 493e12c5d1SDavid du Colombier #define BSTALE (1<<2) 503e12c5d1SDavid du Colombier 513e12c5d1SDavid du Colombier Iosect* getiosect(Xfs*, long, int); 523e12c5d1SDavid du Colombier Iosect* getosect(Xfs*, long); 533e12c5d1SDavid du Colombier Iosect* getsect(Xfs*, long); 543e12c5d1SDavid du Colombier Iosect* newsect(void); 553e12c5d1SDavid du Colombier Iotrack* getiotrack(Xfs*, long); 56*7dd7cddfSDavid du Colombier int canmlock(MLock*); 57219b2ee8SDavid du Colombier int devcheck(Xfs*); 583e12c5d1SDavid du Colombier int devread(Xfs*, long, void*, long); 593e12c5d1SDavid du Colombier int devwrite(Xfs*, long, void*, long); 603e12c5d1SDavid du Colombier int tread(Iotrack*); 613e12c5d1SDavid du Colombier int twrite(Iotrack*); 623e12c5d1SDavid du Colombier void freesect(Iosect*); 633e12c5d1SDavid du Colombier void iotrack_init(void); 64*7dd7cddfSDavid du Colombier void mlock(MLock*); 653e12c5d1SDavid du Colombier void purgebuf(Xfs*); 663e12c5d1SDavid du Colombier void purgetrack(Iotrack*); 673e12c5d1SDavid du Colombier void putsect(Iosect*); 683e12c5d1SDavid du Colombier void sync(void); 69*7dd7cddfSDavid du Colombier void unmlock(MLock*); 70