⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 super.c

📁 linux0.11 version(301k)
💻 C
📖 第 1 页 / 共 2 页
字号:
<a name=L132 href="source/fs/super.c#L132">132</a>         if (s-&gt;s_magic != <a href="ident?i=SUPER_MAGIC">SUPER_MAGIC</a>) {<a name=L133 href="source/fs/super.c#L133">133</a>                 s-&gt;s_dev = 0;<a name=L134 href="source/fs/super.c#L134">134</a>                 <a href="ident?i=free_super">free_super</a>(s);<a name=L135 href="source/fs/super.c#L135">135</a>                 return <a href="ident?i=NULL">NULL</a>;<a name=L136 href="source/fs/super.c#L136">136</a>         }<a name=L137 href="source/fs/super.c#L137">137</a>         for (i=0;i&lt;<a href="ident?i=I_MAP_SLOTS">I_MAP_SLOTS</a>;i++)<a name=L138 href="source/fs/super.c#L138">138</a>                 s-&gt;s_imap[i] = <a href="ident?i=NULL">NULL</a>;<a name=L139 href="source/fs/super.c#L139">139</a>         for (i=0;i&lt;<a href="ident?i=Z_MAP_SLOTS">Z_MAP_SLOTS</a>;i++)<a name=L140 href="source/fs/super.c#L140">140</a>                 s-&gt;s_zmap[i] = <a href="ident?i=NULL">NULL</a>;<a name=L141 href="source/fs/super.c#L141">141</a>         block=2;<a name=L142 href="source/fs/super.c#L142">142</a>         for (i=0 ; i &lt; s-&gt;s_imap_blocks ; i++)<a name=L143 href="source/fs/super.c#L143">143</a>                 if (s-&gt;s_imap[i]=<a href="ident?i=bread">bread</a>(dev,block))<a name=L144 href="source/fs/super.c#L144">144</a>                         block++;<a name=L145 href="source/fs/super.c#L145">145</a>                 else<a name=L146 href="source/fs/super.c#L146">146</a>                         break;<a name=L147 href="source/fs/super.c#L147">147</a>         for (i=0 ; i &lt; s-&gt;s_zmap_blocks ; i++)<a name=L148 href="source/fs/super.c#L148">148</a>                 if (s-&gt;s_zmap[i]=<a href="ident?i=bread">bread</a>(dev,block))<a name=L149 href="source/fs/super.c#L149">149</a>                         block++;<a name=L150 href="source/fs/super.c#L150">150</a>                 else<a name=L151 href="source/fs/super.c#L151">151</a>                         break;<a name=L152 href="source/fs/super.c#L152">152</a>         if (block != 2+s-&gt;s_imap_blocks+s-&gt;s_zmap_blocks) {<a name=L153 href="source/fs/super.c#L153">153</a>                 for(i=0;i&lt;<a href="ident?i=I_MAP_SLOTS">I_MAP_SLOTS</a>;i++)<a name=L154 href="source/fs/super.c#L154">154</a>                         <a href="ident?i=brelse">brelse</a>(s-&gt;s_imap[i]);<a name=L155 href="source/fs/super.c#L155">155</a>                 for(i=0;i&lt;<a href="ident?i=Z_MAP_SLOTS">Z_MAP_SLOTS</a>;i++)<a name=L156 href="source/fs/super.c#L156">156</a>                         <a href="ident?i=brelse">brelse</a>(s-&gt;s_zmap[i]);<a name=L157 href="source/fs/super.c#L157">157</a>                 s-&gt;s_dev=0;<a name=L158 href="source/fs/super.c#L158">158</a>                 <a href="ident?i=free_super">free_super</a>(s);<a name=L159 href="source/fs/super.c#L159">159</a>                 return <a href="ident?i=NULL">NULL</a>;<a name=L160 href="source/fs/super.c#L160">160</a>         }<a name=L161 href="source/fs/super.c#L161">161</a>         s-&gt;s_imap[0]-&gt;b_data[0] |= 1;<a name=L162 href="source/fs/super.c#L162">162</a>         s-&gt;s_zmap[0]-&gt;b_data[0] |= 1;<a name=L163 href="source/fs/super.c#L163">163</a>         <a href="ident?i=free_super">free_super</a>(s);<a name=L164 href="source/fs/super.c#L164">164</a>         return s;<a name=L165 href="source/fs/super.c#L165">165</a> }<a name=L166 href="source/fs/super.c#L166">166</a> <a name=L167 href="source/fs/super.c#L167">167</a> int <a href="ident?i=sys_umount">sys_umount</a>(char * dev_name)<a name=L168 href="source/fs/super.c#L168">168</a> {<a name=L169 href="source/fs/super.c#L169">169</a>         struct <a href="ident?i=m_inode">m_inode</a> * inode;<a name=L170 href="source/fs/super.c#L170">170</a>         struct <a href="ident?i=super_block">super_block</a> * sb;<a name=L171 href="source/fs/super.c#L171">171</a>         int dev;<a name=L172 href="source/fs/super.c#L172">172</a> <a name=L173 href="source/fs/super.c#L173">173</a>         if (!(inode=<a href="ident?i=namei">namei</a>(dev_name)))<a name=L174 href="source/fs/super.c#L174">174</a>                 return -<a href="ident?i=ENOENT">ENOENT</a>;<a name=L175 href="source/fs/super.c#L175">175</a>         dev = inode-&gt;i_zone[0];<a name=L176 href="source/fs/super.c#L176">176</a>         if (!<a href="ident?i=S_ISBLK">S_ISBLK</a>(inode-&gt;i_mode)) {<a name=L177 href="source/fs/super.c#L177">177</a>                 <a href="ident?i=iput">iput</a>(inode);<a name=L178 href="source/fs/super.c#L178">178</a>                 return -<a href="ident?i=ENOTBLK">ENOTBLK</a>;<a name=L179 href="source/fs/super.c#L179">179</a>         }<a name=L180 href="source/fs/super.c#L180">180</a>         <a href="ident?i=iput">iput</a>(inode);<a name=L181 href="source/fs/super.c#L181">181</a>         if (dev==<a href="ident?i=ROOT_DEV">ROOT_DEV</a>)<a name=L182 href="source/fs/super.c#L182">182</a>                 return -<a href="ident?i=EBUSY">EBUSY</a>;<a name=L183 href="source/fs/super.c#L183">183</a>         if (!(sb=<a href="ident?i=get_super">get_super</a>(dev)) || !(sb-&gt;s_imount))<a name=L184 href="source/fs/super.c#L184">184</a>                 return -<a href="ident?i=ENOENT">ENOENT</a>;<a name=L185 href="source/fs/super.c#L185">185</a>         if (!sb-&gt;s_imount-&gt;i_mount)<a name=L186 href="source/fs/super.c#L186">186</a>                 <a href="ident?i=printk">printk</a>(<i>"Mounted inode has i_mount=0\n"</i>);<a name=L187 href="source/fs/super.c#L187">187</a>         for (inode=<a href="ident?i=inode_table">inode_table</a>+0 ; inode&lt;<a href="ident?i=inode_table">inode_table</a>+<a href="ident?i=NR_INODE">NR_INODE</a> ; inode++)<a name=L188 href="source/fs/super.c#L188">188</a>                 if (inode-&gt;i_dev==dev &amp;&amp; inode-&gt;i_count)<a name=L189 href="source/fs/super.c#L189">189</a>                                 return -<a href="ident?i=EBUSY">EBUSY</a>;<a name=L190 href="source/fs/super.c#L190">190</a>         sb-&gt;s_imount-&gt;i_mount=0;<a name=L191 href="source/fs/super.c#L191">191</a>         <a href="ident?i=iput">iput</a>(sb-&gt;s_imount);<a name=L192 href="source/fs/super.c#L192">192</a>         sb-&gt;s_imount = <a href="ident?i=NULL">NULL</a>;<a name=L193 href="source/fs/super.c#L193">193</a>         <a href="ident?i=iput">iput</a>(sb-&gt;s_isup);<a name=L194 href="source/fs/super.c#L194">194</a>         sb-&gt;s_isup = <a href="ident?i=NULL">NULL</a>;<a name=L195 href="source/fs/super.c#L195">195</a>         <a href="ident?i=put_super">put_super</a>(dev);<a name=L196 href="source/fs/super.c#L196">196</a>         <a href="ident?i=sync_dev">sync_dev</a>(dev);<a name=L197 href="source/fs/super.c#L197">197</a>         return 0;<a name=L198 href="source/fs/super.c#L198">198</a> }<a name=L199 href="source/fs/super.c#L199">199</a> <a name=L200 href="source/fs/super.c#L200">200</a> int <a href="ident?i=sys_mount">sys_mount</a>(char * dev_name, char * dir_name, int rw_flag)<a name=L201 href="source/fs/super.c#L201">201</a> {<a name=L202 href="source/fs/super.c#L202">202</a>         struct <a href="ident?i=m_inode">m_inode</a> * dev_i, * dir_i;<a name=L203 href="source/fs/super.c#L203">203</a>         struct <a href="ident?i=super_block">super_block</a> * sb;<a name=L204 href="source/fs/super.c#L204">204</a>         int dev;<a name=L205 href="source/fs/super.c#L205">205</a> <a name=L206 href="source/fs/super.c#L206">206</a>         if (!(dev_i=<a href="ident?i=namei">namei</a>(dev_name)))<a name=L207 href="source/fs/super.c#L207">207</a>                 return -<a href="ident?i=ENOENT">ENOENT</a>;<a name=L208 href="source/fs/super.c#L208">208</a>         dev = dev_i-&gt;i_zone[0];<a name=L209 href="source/fs/super.c#L209">209</a>         if (!<a href="ident?i=S_ISBLK">S_ISBLK</a>(dev_i-&gt;i_mode)) {<a name=L210 href="source/fs/super.c#L210">210</a>                 <a href="ident?i=iput">iput</a>(dev_i);<a name=L211 href="source/fs/super.c#L211">211</a>                 return -<a href="ident?i=EPERM">EPERM</a>;<a name=L212 href="source/fs/super.c#L212">212</a>         }<a name=L213 href="source/fs/super.c#L213">213</a>         <a href="ident?i=iput">iput</a>(dev_i);<a name=L214 href="source/fs/super.c#L214">214</a>         if (!(dir_i=<a href="ident?i=namei">namei</a>(dir_name)))<a name=L215 href="source/fs/super.c#L215">215</a>                 return -<a href="ident?i=ENOENT">ENOENT</a>;<a name=L216 href="source/fs/super.c#L216">216</a>         if (dir_i-&gt;i_count != 1 || dir_i-&gt;i_num == <a href="ident?i=ROOT_INO">ROOT_INO</a>) {<a name=L217 href="source/fs/super.c#L217">217</a>                 <a href="ident?i=iput">iput</a>(dir_i);<a name=L218 href="source/fs/super.c#L218">218</a>                 return -<a href="ident?i=EBUSY">EBUSY</a>;<a name=L219 href="source/fs/super.c#L219">219</a>         }<a name=L220 href="source/fs/super.c#L220">220</a>         if (!<a href="ident?i=S_ISDIR">S_ISDIR</a>(dir_i-&gt;i_mode)) {<a name=L221 href="source/fs/super.c#L221">221</a>                 <a href="ident?i=iput">iput</a>(dir_i);<a name=L222 href="source/fs/super.c#L222">222</a>                 return -<a href="ident?i=EPERM">EPERM</a>;<a name=L223 href="source/fs/super.c#L223">223</a>         }<a name=L224 href="source/fs/super.c#L224">224</a>         if (!(sb=<a href="ident?i=read_super">read_super</a>(dev))) {<a name=L225 href="source/fs/super.c#L225">225</a>                 <a href="ident?i=iput">iput</a>(dir_i);<a name=L226 href="source/fs/super.c#L226">226</a>                 return -<a href="ident?i=EBUSY">EBUSY</a>;<a name=L227 href="source/fs/super.c#L227">227</a>         }<a name=L228 href="source/fs/super.c#L228">228</a>         if (sb-&gt;s_imount) {<a name=L229 href="source/fs/super.c#L229">229</a>                 <a href="ident?i=iput">iput</a>(dir_i);<a name=L230 href="source/fs/super.c#L230">230</a>                 return -<a href="ident?i=EBUSY">EBUSY</a>;<a name=L231 href="source/fs/super.c#L231">231</a>         }<a name=L232 href="source/fs/super.c#L232">232</a>         if (dir_i-&gt;i_mount) {<a name=L233 href="source/fs/super.c#L233">233</a>                 <a href="ident?i=iput">iput</a>(dir_i);<a name=L234 href="source/fs/super.c#L234">234</a>                 return -<a href="ident?i=EPERM">EPERM</a>;<a name=L235 href="source/fs/super.c#L235">235</a>         }<a name=L236 href="source/fs/super.c#L236">236</a>         sb-&gt;s_imount=dir_i;<a name=L237 href="source/fs/super.c#L237">237</a>         dir_i-&gt;i_mount=1;<a name=L238 href="source/fs/super.c#L238">238</a>         dir_i-&gt;i_dirt=1;                <b><i>/* NOTE! we don't iput(dir_i) */</i></b><a name=L239 href="source/fs/super.c#L239">239</a>         return 0;                       <b><i>/* we do that in umount */</i></b><a name=L240 href="source/fs/super.c#L240">240</a> }<a name=L241 href="source/fs/super.c#L241">241</a> <a name=L242 href="source/fs/super.c#L242">242</a> void <a href="ident?i=mount_root">mount_root</a>(void)<a name=L243 href="source/fs/super.c#L243">243</a> {<a name=L244 href="source/fs/super.c#L244">244</a>         int i,<a href="ident?i=free">free</a>;<a name=L245 href="source/fs/super.c#L245">245</a>         struct <a href="ident?i=super_block">super_block</a> * p;<a name=L246 href="source/fs/super.c#L246">246</a>         struct <a href="ident?i=m_inode">m_inode</a> * mi;<a name=L247 href="source/fs/super.c#L247">247</a> <a name=L248 href="source/fs/super.c#L248">248</a>         if (32 != sizeof (struct <a href="ident?i=d_inode">d_inode</a>))<a name=L249 href="source/fs/super.c#L249">249</a>                 <a href="ident?i=panic">panic</a>(<i>"bad i-node size"</i>);<a name=L250 href="source/fs/super.c#L250">250</a>         for(i=0;i&lt;<a href="ident?i=NR_FILE">NR_FILE</a>;i++)<a name=L251 href="source/fs/super.c#L251">251</a>                 <a href="ident?i=file_table">file_table</a>[i].f_count=0;<a name=L252 href="source/fs/super.c#L252">252</a>         if (<a href="ident?i=MAJOR">MAJOR</a>(<a href="ident?i=ROOT_DEV">ROOT_DEV</a>) == 2) {<a name=L253 href="source/fs/super.c#L253">253</a>                 <a href="ident?i=printk">printk</a>(<i>"Insert root floppy and press ENTER"</i>);<a name=L254 href="source/fs/super.c#L254">254</a>                 <a href="ident?i=wait_for_keypress">wait_for_keypress</a>();<a name=L255 href="source/fs/super.c#L255">255</a>         }<a name=L256 href="source/fs/super.c#L256">256</a>         for(p = &amp;<a href="ident?i=super_block">super_block</a>[0] ; p &lt; &amp;<a href="ident?i=super_block">super_block</a>[<a href="ident?i=NR_SUPER">NR_SUPER</a>] ; p++) {<a name=L257 href="source/fs/super.c#L257">257</a>                 p-&gt;s_dev = 0;<a name=L258 href="source/fs/super.c#L258">258</a>                 p-&gt;s_lock = 0;<a name=L259 href="source/fs/super.c#L259">259</a>                 p-&gt;s_wait = <a href="ident?i=NULL">NULL</a>;<a name=L260 href="source/fs/super.c#L260">260</a>         }<a name=L261 href="source/fs/super.c#L261">261</a>         if (!(p=<a href="ident?i=read_super">read_super</a>(<a href="ident?i=ROOT_DEV">ROOT_DEV</a>)))<a name=L262 href="source/fs/super.c#L262">262</a>                 <a href="ident?i=panic">panic</a>(<i>"Unable to mount root"</i>);<a name=L263 href="source/fs/super.c#L263">263</a>         if (!(mi=<a href="ident?i=iget">iget</a>(<a href="ident?i=ROOT_DEV">ROOT_DEV</a>,<a href="ident?i=ROOT_INO">ROOT_INO</a>)))<a name=L264 href="source/fs/super.c#L264">264</a>                 <a href="ident?i=panic">panic</a>(<i>"Unable to read root i-node"</i>);<a name=L265 href="source/fs/super.c#L265">265</a>         mi-&gt;i_count += 3 ;      <b><i>/* NOTE! it is logically used 4 times, not 1 */</i></b><a name=L266 href="source/fs/super.c#L266">266</a>         p-&gt;s_isup = p-&gt;s_imount = mi;<a name=L267 href="source/fs/super.c#L267">267</a>         <a href="ident?i=current">current</a>-&gt;pwd = mi;<a name=L268 href="source/fs/super.c#L268">268</a>         <a href="ident?i=current">current</a>-&gt;root = mi;<a name=L269 href="source/fs/super.c#L269">269</a>         <a href="ident?i=free">free</a>=0;<a name=L270 href="source/fs/super.c#L270">270</a>         i=p-&gt;s_nzones;<a name=L271 href="source/fs/super.c#L271">271</a>         while (-- i &gt;= 0)<a name=L272 href="source/fs/super.c#L272">272</a>                 if (!<a href="ident?i=set_bit">set_bit</a>(i&amp;8191,p-&gt;s_zmap[i&gt;&gt;13]-&gt;b_data))<a name=L273 href="source/fs/super.c#L273">273</a>                         <a href="ident?i=free">free</a>++;<a name=L274 href="source/fs/super.c#L274">274</a>         <a href="ident?i=printk">printk</a>(<i>"%d/%d free blocks\n\r"</i>,<a href="ident?i=free">free</a>,p-&gt;s_nzones);<a name=L275 href="source/fs/super.c#L275">275</a>         <a href="ident?i=free">free</a>=0;<a name=L276 href="source/fs/super.c#L276">276</a>         i=p-&gt;s_ninodes+1;<a name=L277 href="source/fs/super.c#L277">277</a>         while (-- i &gt;= 0)<a name=L278 href="source/fs/super.c#L278">278</a>                 if (!<a href="ident?i=set_bit">set_bit</a>(i&amp;8191,p-&gt;s_imap[i&gt;&gt;13]-&gt;b_data))<a name=L279 href="source/fs/super.c#L279">279</a>                         <a href="ident?i=free">free</a>++;<a name=L280 href="source/fs/super.c#L280">280</a>         <a href="ident?i=printk">printk</a>(<i>"%d/%d free inodes\n\r"</i>,<a href="ident?i=free">free</a>,p-&gt;s_ninodes);<a name=L281 href="source/fs/super.c#L281">281</a> }<a name=L282 href="source/fs/super.c#L282">282</a> </pre><hr><div align=center>   [<b><i>源代码浏览</i></b>] [<a href="diff/fs/super.c">区别标定</a>] [<a href="ident">标识符搜索</a>] [<a href="search">文本搜索</a>] [<a href="find">文件搜索</a>] </div><hr>本网页由 <a href="http:blurb.html">LXR引擎</a> 自动生成.<br></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -