2016-04-15 6 views
6

मैं एक लिनक्स ब्लॉक डिवाइस ड्राइवर लिख रहा हूं जो blk_init_queue() के साथ पंजीकृत फ़ंक्शन के माध्यम से अनुरोध प्राप्त करता है।लिनक्स ब्लॉक डिवाइस ड्राइवर अनुरोध आदेश - RaW?

मेरा हार्डवेयर डिवाइस रीडायर्स अनुरोध करता है और इस तरह रीड-आफ-लिखने के संघर्ष से बचने के लिए read(lba x) जारी करने से पहले write(lba x) के पूरा होने की प्रतीक्षा करनी आवश्यक है।

मेरा प्रश्न: लिनक्स ब्लॉक परत कच्चे संघर्ष का हिसाब रखता है और यह जब तक यह एक अनुरोध पूरा होने के एक पूर्ववर्ती write(lba x) के लिए प्राप्त नहीं मुद्दा read(lba x) है (__blk_end_request_all(req r) के माध्यम से), या मुझे क्या करना है कि में है मेरी चालक?

उत्तर

0

नीचे दिए गए लेख के अनुसार, लिनक्स ब्लॉक डिवाइस ड्राइवर अब मनमाने ढंग से अनुरोधों को पुन: व्यवस्थित करने के लिए स्वतंत्र हैं, फाइल सिस्टम परत खतरों से बचने और बाधाओं को लागू करने के लिए ज़िम्मेदार है। https://lwn.net/Articles/400541/

एकमात्र अपवाद उपकरणों कि लिखने-वापस कैश को लागू करने के लिए REQ_FLUSH और REQ_FUA अनुरोध कर रहे हैं। मामले में इन झंडे सेट हैं कुछ निश्चित आवश्यकताओं को ब्लैक डिवाइस ड्राइवर द्वारा लागू करने की आवश्यकता है। https://www.kernel.org/doc/Documentation/block/writeback_cache_control.txt

विशेष रूप से, निम्न आदेश आवश्यकताओं मौजूद हैं:

  • नहीं लिखने डेटा, REQ_FLUSH - किसी भी आदेश बाधा निहित फ्लश आवश्यकता (पहले पूरा लिखते पर होना चाहिए के अलावा अन्य नहीं है फ्लश पूरा करने पर मीडिया)।

  • लिखें डेटा, REQ_FLUSH - फ्लश से पहले लिखने डेटा जारी किया जाता है पूरा किया जाना चाहिए। अर्थात। सभी पिछले लिखने से पहले मीडिया पर डेटा लिखना नहीं चाहिए। यानी -

  • लिखें डेटा, REQ_FUA - इससे पहले कि फ्लश जारी है लिखें पूरा किया जाना चाहिए। लिखने का डेटा जैव पूरा होने पर पहले पूर्ण लेखों के साथ प्लेटर पर होना चाहिए।

  • डेटा लिखें, REQ_FLUSH | REQ_FUA - डेटा लिखें मीडिया को सभी पिछले लिखने से पहले मीडिया पर नहीं लिखा जाना चाहिए & & लिखने डेटा जैव पूर्ण होने पर मीडिया पर होना चाहिए। यह आमतौर पर फ्लश के रूप में अनुक्रमित फ्लश के रूप में अनुक्रमित होता है।

[लिनक्स fsdevel मेलिंग सूची से: http://www.spinics.net/lists/linux-fsdevel/msg45616.html]

संबंधित मुद्दे