<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML ><HEAD ><TITLE >ll_rw_block</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="HOME" TITLE="The Linux Kernel API" HREF="book1.html"><LINK REL="UP" TITLE="Block Devices" HREF="c11504.html"><LINK REL="PREVIOUS" TITLE="submit_bh" HREF="r11705.html"><LINK REL="NEXT" TITLE="end_that_request_first" HREF="r11801.html"></HEAD ><BODY CLASS="REFENTRY" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >The Linux Kernel API</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="r11705.html" ACCESSKEY="P" ><<< Previous</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="r11801.html" ACCESSKEY="N" >Next >>></A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><H1 ><A NAME="AEN11744" ></A ><SPAN CLASS="phrase" ><SPAN CLASS="PHRASE" >ll_rw_block</SPAN ></SPAN ></H1 ><DIV CLASS="REFNAMEDIV" ><A NAME="AEN11748" ></A ><H2 >Name</H2 >ll_rw_block -- level access to block devices </DIV ><DIV CLASS="REFSYNOPSISDIV" ><A NAME="AEN11751" ></A ><H2 >Synopsis</H2 ><DIV CLASS="FUNCSYNOPSIS" ><A NAME="AEN11753" ></A ><P ></P ><P ><CODE ><CODE CLASS="FUNCDEF" >void <TT CLASS="FUNCTION" >ll_rw_block </TT ></CODE >(int <TT CLASS="PARAMETER" ><I >rw</I ></TT >, int <TT CLASS="PARAMETER" ><I >nr</I ></TT >, struct buffer_head * * <TT CLASS="PARAMETER" ><I >bhs</I ></TT >);</CODE ></P ><P ></P ></DIV ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN11763" ></A ><H2 >Arguments</H2 ><P ></P ><DIV CLASS="VARIABLELIST" ><DL ><DT ><TT CLASS="PARAMETER" ><I >rw</I ></TT ></DT ><DD ><P > whether to <TT CLASS="CONSTANT" >READ</TT > or <TT CLASS="CONSTANT" >WRITE</TT > or maybe <TT CLASS="CONSTANT" >READA</TT > (readahead) </P ></DD ><DT ><TT CLASS="PARAMETER" ><I >nr</I ></TT ></DT ><DD ><P > number of &struct buffer_heads in the array </P ></DD ><DT ><TT CLASS="PARAMETER" ><I >bhs</I ></TT ></DT ><DD ><P > array of pointers to &struct buffer_head </P ></DD ></DL ></DIV ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN11784" ></A ><H2 >Description</H2 ><P > <TT CLASS="FUNCTION" >ll_rw_block</TT > takes an array of pointers to &struct buffer_heads, and requests an I/O operation on them, either a <TT CLASS="CONSTANT" >READ</TT > or a <TT CLASS="CONSTANT" >WRITE</TT >. The third <TT CLASS="CONSTANT" >READA</TT > option is described in the documentation for <TT CLASS="FUNCTION" >generic_make_request</TT > which <TT CLASS="FUNCTION" >ll_rw_block</TT > calls. </P ><P > This function provides extra functionality that is not in <TT CLASS="FUNCTION" >generic_make_request</TT > that is relevant to buffers in the buffer cache or page cache. In particular it drops any buffer that it cannot get a lock on (with the BH_Lock state bit), any buffer that appears to be clean when doing a write request, and any buffer that appears to be up-to-date when doing read request. Further it marks as clean buffers that are processed for writing (the buffer cache wont assume that they are actually clean until the buffer gets unlocked). </P ><P > ll_rw_block sets b_end_io to simple completion handler that marks the buffer up-to-date (if approriate), unlocks the buffer and wakes any waiters. As client that needs a more interesting completion routine should call <TT CLASS="FUNCTION" >submit_bh</TT > (or <TT CLASS="FUNCTION" >generic_make_request</TT >) directly. </P ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN11798" ></A ><H2 >Caveat</H2 ><P > All of the buffers must be for the same device, and must also be </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="r11705.html" ACCESSKEY="P" ><<< Previous</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="book1.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="r11801.html" ACCESSKEY="N" >Next >>></A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><SPAN CLASS="phrase" ><SPAN CLASS="PHRASE" >submit_bh</SPAN ></SPAN ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="c11504.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><SPAN CLASS="phrase" ><SPAN CLASS="PHRASE" >end_that_request_first</SPAN ></SPAN ></TD ></TR ></TABLE ></DIV ></BODY ></HTML >