<p><br>
On Jan 6, 2014 11:34 PM, &quot;neha naik&quot; &lt;<a href="mailto:nehanaik27@gmail.com">nehanaik27@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; Hi All,<br>
&gt;   I figured out the method by some trial and error and looking at the<br>
&gt; linux source code.<br>
&gt;   We can do something like this :<br>
&gt;       Say we want to read pages of bvec in 512 chunks. Create bio with<br>
&gt; a single page and read 512 chunk of data from wherever you want to (it<br>
&gt; can be different disks).<br>
&gt;<br>
&gt;            dst = kmap_atomic(bvec-&gt;bv_page, KM_USER0); ---&gt; bvec is of<br>
&gt; original bio<br>
&gt;            src = kmap_atomic(page, KM_USER0); ---&gt; page we read by<br>
&gt; creating new bio<br>
&gt;            memcpy(dst+offset, src, 512);<br>
&gt;            kunmap_atomic(src, KM_USER0);<br>
&gt;            kunmap_atomic(dst, KM_USER0);<br>
&gt;<br>
How this solves the problem of data being on different disks?</p>
<p>&gt; My difficulty was not being able to access the high memory page in<br>
&gt; kernel. I was earlier trying to increment the offset of the bvec and<br>
&gt; pass the page to the layer below assuming that it would read in the<br>
&gt; data at correct offset but of course it was resulting in panic. The<br>
&gt; above solves that. Of course, if there is some other method which<br>
&gt; involves not creating any bio i would love to know.<br>
&gt;<br>
&gt; Regards,<br>
&gt; Neha<br>
&gt;<br>
&gt;<br>
&gt; On Sat, Jan 4, 2014 at 9:32 AM, Pranay Srivastava &lt;<a href="mailto:pranjas@gmail.com">pranjas@gmail.com</a>&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt; On 04-Jan-2014 5:18 AM, &quot;neha naik&quot; &lt;<a href="mailto:nehanaik27@gmail.com">nehanaik27@gmail.com</a>&gt; wrote:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Hi All,<br>
&gt; &gt;&gt;    I am getting a request with bvec-&gt;bv_len &gt; 512. Now, the<br>
&gt; &gt;&gt; information to be read is scattered across the entire disk in 512<br>
&gt; &gt;&gt; chunks. So that, information on disk can be : sector 8, sector 100,<br>
&gt; &gt;&gt; sector 9.<br>
&gt; &gt;&gt;  Now if i get a request to read with the bvec-&gt;bv_len &gt; 512 i need to<br>
&gt; &gt;&gt; pull in the information from<br>
&gt; &gt;&gt; multiple places on disk since the data is not sequentially located.<br>
&gt; &gt;&gt;  I tried to look at the linux source code because i think raid must be<br>
&gt; &gt;&gt; doing it all the time. (eg : on disk 1 we may be storing sector 6 and<br>
&gt; &gt;&gt; on disk 2 we may be storing sector 7 and so on).<br>
&gt; &gt;<br>
&gt; &gt; You are right. Perhaps you need to clone the bio and set them properly. I<br>
&gt; &gt; guess you ought to check dm driver&#39;s make_request function. It does clone<br>
&gt; &gt; bio.<br>
&gt; &gt;<br>
&gt; &gt; I don&#39;t know if you can split that request while handling it. Perhaps<br>
&gt; &gt; reinserting that request could work.<br>
&gt; &gt;<br>
&gt; &gt;&gt;   However, i have not really got any useful information from it. Also<br>
&gt; &gt;&gt; scouring through articles on<br>
&gt; &gt;&gt; google has not helped much.<br>
&gt; &gt;&gt;    I am hoping somebody points me in the right direction.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Thanks in advance,<br>
&gt; &gt;&gt; Neha<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; _______________________________________________<br>
&gt; &gt;&gt; Kernelnewbies mailing list<br>
&gt; &gt;&gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt; &gt;&gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt; &gt;<br>
&gt; &gt;       ---P.K.S<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Kernelnewbies mailing list<br>
&gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a></p>