forked from Imagelibrary/rtems
RFS: Use unprotected chain operations
This area is protected by the RFS file system instance lock.
This commit is contained in:
@@ -61,7 +61,7 @@ rtems_rfs_scan_chain (rtems_chain_control* chain,
|
|||||||
((intptr_t)(buffer->user)));
|
((intptr_t)(buffer->user)));
|
||||||
|
|
||||||
(*count)--;
|
(*count)--;
|
||||||
rtems_chain_extract (node);
|
rtems_chain_extract_unprotected (node);
|
||||||
rtems_chain_set_off_chain (node);
|
rtems_chain_set_off_chain (node);
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
@@ -181,7 +181,8 @@ rtems_rfs_buffer_handle_request (rtems_rfs_file_system* fs,
|
|||||||
* Increase the reference count of the buffer.
|
* Increase the reference count of the buffer.
|
||||||
*/
|
*/
|
||||||
rtems_rfs_buffer_refs_up (handle);
|
rtems_rfs_buffer_refs_up (handle);
|
||||||
rtems_chain_append (&fs->buffers, rtems_rfs_buffer_link (handle));
|
rtems_chain_append_unprotected (&fs->buffers,
|
||||||
|
rtems_rfs_buffer_link (handle));
|
||||||
fs->buffers_count++;
|
fs->buffers_count++;
|
||||||
|
|
||||||
handle->buffer->user = (void*) ((intptr_t) block);
|
handle->buffer->user = (void*) ((intptr_t) block);
|
||||||
@@ -215,7 +216,7 @@ rtems_rfs_buffer_handle_release (rtems_rfs_file_system* fs,
|
|||||||
|
|
||||||
if (rtems_rfs_buffer_refs (handle) == 0)
|
if (rtems_rfs_buffer_refs (handle) == 0)
|
||||||
{
|
{
|
||||||
rtems_chain_extract (rtems_rfs_buffer_link (handle));
|
rtems_chain_extract_unprotected (rtems_rfs_buffer_link (handle));
|
||||||
fs->buffers_count--;
|
fs->buffers_count--;
|
||||||
|
|
||||||
if (rtems_rfs_fs_no_local_cache (fs))
|
if (rtems_rfs_fs_no_local_cache (fs))
|
||||||
@@ -247,14 +248,15 @@ rtems_rfs_buffer_handle_release (rtems_rfs_file_system* fs,
|
|||||||
|
|
||||||
if (fs->release_count > fs->release_modified_count)
|
if (fs->release_count > fs->release_modified_count)
|
||||||
{
|
{
|
||||||
buffer = (rtems_rfs_buffer*) rtems_chain_get (&fs->release);
|
buffer = (rtems_rfs_buffer*)
|
||||||
|
rtems_chain_get_unprotected (&fs->release);
|
||||||
fs->release_count--;
|
fs->release_count--;
|
||||||
modified = false;
|
modified = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buffer =
|
buffer = (rtems_rfs_buffer*)
|
||||||
(rtems_rfs_buffer*) rtems_chain_get (&fs->release_modified);
|
rtems_chain_get_unprotected (&fs->release_modified);
|
||||||
fs->release_modified_count--;
|
fs->release_modified_count--;
|
||||||
modified = true;
|
modified = true;
|
||||||
}
|
}
|
||||||
@@ -264,13 +266,14 @@ rtems_rfs_buffer_handle_release (rtems_rfs_file_system* fs,
|
|||||||
|
|
||||||
if (rtems_rfs_buffer_dirty (handle))
|
if (rtems_rfs_buffer_dirty (handle))
|
||||||
{
|
{
|
||||||
rtems_chain_append (&fs->release_modified,
|
rtems_chain_append_unprotected (&fs->release_modified,
|
||||||
rtems_rfs_buffer_link (handle));
|
rtems_rfs_buffer_link (handle));
|
||||||
fs->release_modified_count++;
|
fs->release_modified_count++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rtems_chain_append (&fs->release, rtems_rfs_buffer_link (handle));
|
rtems_chain_append_unprotected (&fs->release,
|
||||||
|
rtems_rfs_buffer_link (handle));
|
||||||
fs->release_count++;
|
fs->release_count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -447,7 +450,7 @@ rtems_rfs_release_chain (rtems_chain_control* chain,
|
|||||||
|
|
||||||
while (!rtems_chain_is_empty (chain))
|
while (!rtems_chain_is_empty (chain))
|
||||||
{
|
{
|
||||||
buffer = (rtems_rfs_buffer*) rtems_chain_get (chain);
|
buffer = (rtems_rfs_buffer*) rtems_chain_get_unprotected (chain);
|
||||||
(*count)--;
|
(*count)--;
|
||||||
|
|
||||||
buffer->user = (void*) 0;
|
buffer->user = (void*) 0;
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ rtems_rfs_file_open (rtems_rfs_file_system* fs,
|
|||||||
shared->ctime = rtems_rfs_inode_get_ctime (&shared->inode);
|
shared->ctime = rtems_rfs_inode_get_ctime (&shared->inode);
|
||||||
shared->fs = fs;
|
shared->fs = fs;
|
||||||
|
|
||||||
rtems_chain_append (&fs->file_shares, &shared->link);
|
rtems_chain_append_unprotected (&fs->file_shares, &shared->link);
|
||||||
|
|
||||||
rtems_rfs_inode_unload (fs, &shared->inode, false);
|
rtems_rfs_inode_unload (fs, &shared->inode, false);
|
||||||
|
|
||||||
@@ -197,7 +197,7 @@ rtems_rfs_file_close (rtems_rfs_file_system* fs,
|
|||||||
rrc = rc;
|
rrc = rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
rtems_chain_extract (&handle->shared->link);
|
rtems_chain_extract_unprotected (&handle->shared->link);
|
||||||
free (handle->shared);
|
free (handle->shared);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user