Changeset f164ae75 in rtems
- Timestamp:
- 05/30/12 11:41:31 (11 years ago)
- Branches:
- 4.11, 5, master
- Children:
- 53f2ca3, e308b3a7
- Parents:
- 73c09b3b
- git-author:
- Sebastian Huber <sebastian.huber@…> (05/30/12 11:41:31)
- git-committer:
- Sebastian Huber <sebastian.huber@…> (05/31/12 09:05:48)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
cpukit/libblock/src/bdbuf.c
r73c09b3b rf164ae75 1781 1781 rtems_status_code sc = RTEMS_SUCCESSFUL; 1782 1782 rtems_bdbuf_buffer *bd = NULL; 1783 rtems_blkdev_bnum media_block = 0; 1783 rtems_blkdev_bnum media_block; 1784 1785 rtems_bdbuf_lock_cache (); 1784 1786 1785 1787 sc = rtems_bdbuf_get_media_block (dd, block, &media_block); 1786 if (sc != RTEMS_SUCCESSFUL) 1787 return sc; 1788 1789 rtems_bdbuf_lock_cache (); 1790 1791 /* 1792 * Print the block index relative to the physical disk. 1793 */ 1794 if (rtems_bdbuf_tracer) 1795 printf ("bdbuf:get: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n", 1796 media_block, block, (unsigned) dd->dev); 1797 1798 bd = rtems_bdbuf_get_buffer_for_access (dd, media_block); 1799 1800 switch (bd->state) 1801 { 1802 case RTEMS_BDBUF_STATE_CACHED: 1803 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED); 1804 break; 1805 case RTEMS_BDBUF_STATE_EMPTY: 1806 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_EMPTY); 1807 break; 1808 case RTEMS_BDBUF_STATE_MODIFIED: 1809 /* 1810 * To get a modified buffer could be considered a bug in the caller 1811 * because you should not be getting an already modified buffer but user 1812 * may have modified a byte in a block then decided to seek the start and 1813 * write the whole block and the file system will have no record of this 1814 * so just gets the block to fill. 1815 */ 1816 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED); 1817 break; 1818 default: 1819 rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_2); 1820 break; 1821 } 1822 1823 if (rtems_bdbuf_tracer) 1824 { 1825 rtems_bdbuf_show_users ("get", bd); 1826 rtems_bdbuf_show_usage (); 1788 if (sc == RTEMS_SUCCESSFUL) 1789 { 1790 /* 1791 * Print the block index relative to the physical disk. 1792 */ 1793 if (rtems_bdbuf_tracer) 1794 printf ("bdbuf:get: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n", 1795 media_block, block, (unsigned) dd->dev); 1796 1797 bd = rtems_bdbuf_get_buffer_for_access (dd, media_block); 1798 1799 switch (bd->state) 1800 { 1801 case RTEMS_BDBUF_STATE_CACHED: 1802 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED); 1803 break; 1804 case RTEMS_BDBUF_STATE_EMPTY: 1805 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_EMPTY); 1806 break; 1807 case RTEMS_BDBUF_STATE_MODIFIED: 1808 /* 1809 * To get a modified buffer could be considered a bug in the caller 1810 * because you should not be getting an already modified buffer but 1811 * user may have modified a byte in a block then decided to seek the 1812 * start and write the whole block and the file system will have no 1813 * record of this so just gets the block to fill. 1814 */ 1815 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED); 1816 break; 1817 default: 1818 rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_2); 1819 break; 1820 } 1821 1822 if (rtems_bdbuf_tracer) 1823 { 1824 rtems_bdbuf_show_users ("get", bd); 1825 rtems_bdbuf_show_usage (); 1826 } 1827 1827 } 1828 1828 … … 1831 1831 *bd_ptr = bd; 1832 1832 1833 return RTEMS_SUCCESSFUL;1833 return sc; 1834 1834 } 1835 1835 … … 1998 1998 rtems_blkdev_request *req = NULL; 1999 1999 rtems_bdbuf_buffer *bd = NULL; 2000 rtems_blkdev_bnum media_block = 0; 2001 2002 sc = rtems_bdbuf_get_media_block (dd, block, &media_block); 2003 if (sc != RTEMS_SUCCESSFUL) 2004 return sc; 2000 rtems_blkdev_bnum media_block; 2005 2001 2006 2002 /* … … 2013 2009 (bdbuf_config.max_read_ahead_blocks + 1)); 2014 2010 2015 if (rtems_bdbuf_tracer)2016 printf ("bdbuf:read: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n",2017 media_block + dd->start, block, (unsigned) dd->dev);2018 2019 2011 rtems_bdbuf_lock_cache (); 2020 rtems_bdbuf_create_read_request (dd, media_block, req, &bd); 2021 2022 if (req->bufnum > 0) 2023 { 2024 sc = rtems_bdbuf_execute_transfer_request (dd, req, true); 2012 2013 sc = rtems_bdbuf_get_media_block (dd, block, &media_block); 2014 if (sc == RTEMS_SUCCESSFUL) 2015 { 2016 if (rtems_bdbuf_tracer) 2017 printf ("bdbuf:read: %" PRIu32 " (%" PRIu32 ") (dev = %08x)\n", 2018 media_block + dd->start, block, (unsigned) dd->dev); 2019 2020 rtems_bdbuf_create_read_request (dd, media_block, req, &bd); 2021 2022 if (req->bufnum > 0) 2023 { 2024 sc = rtems_bdbuf_execute_transfer_request (dd, req, true); 2025 if (sc == RTEMS_SUCCESSFUL) 2026 { 2027 rtems_chain_extract_unprotected (&bd->link); 2028 rtems_bdbuf_group_obtain (bd); 2029 } 2030 } 2031 2025 2032 if (sc == RTEMS_SUCCESSFUL) 2026 2033 { 2027 rtems_chain_extract_unprotected (&bd->link); 2028 rtems_bdbuf_group_obtain (bd); 2029 } 2030 } 2031 2032 if (sc == RTEMS_SUCCESSFUL) 2033 { 2034 switch (bd->state) 2035 { 2036 case RTEMS_BDBUF_STATE_CACHED: 2037 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED); 2038 break; 2039 case RTEMS_BDBUF_STATE_MODIFIED: 2040 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED); 2041 break; 2042 default: 2043 rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_4); 2044 break; 2045 } 2046 2047 if (rtems_bdbuf_tracer) 2048 { 2049 rtems_bdbuf_show_users ("read", bd); 2050 rtems_bdbuf_show_usage (); 2051 } 2052 2053 *bd_ptr = bd; 2054 } 2055 else 2056 *bd_ptr = NULL; 2034 switch (bd->state) 2035 { 2036 case RTEMS_BDBUF_STATE_CACHED: 2037 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED); 2038 break; 2039 case RTEMS_BDBUF_STATE_MODIFIED: 2040 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED); 2041 break; 2042 default: 2043 rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_4); 2044 break; 2045 } 2046 2047 if (rtems_bdbuf_tracer) 2048 { 2049 rtems_bdbuf_show_users ("read", bd); 2050 rtems_bdbuf_show_usage (); 2051 } 2052 } 2053 else 2054 { 2055 bd = NULL; 2056 } 2057 } 2057 2058 2058 2059 rtems_bdbuf_unlock_cache (); 2060 2061 *bd_ptr = bd; 2059 2062 2060 2063 return sc;
Note: See TracChangeset
for help on using the changeset viewer.