diff mbox

[1/4] deblocker: Add a 'write' function

Message ID 1479214972-19153-2-git-send-email-thuth@redhat.com
State Accepted
Headers show

Commit Message

Thomas Huth Nov. 15, 2016, 1:02 p.m. UTC
To support block writes, the deblocker should feature a 'write'
function, too. Since our only client that tries to use write
accesses so far (GRUB2) is always writing whole sectors, we
do not do the complicated read-modify-write dance here yet, but
simply check that the client always tries to write whole sectors.

Reviewed-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 slof/fs/packages/deblocker.fs | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

Alexey Kardashevskiy Dec. 1, 2016, 2:29 a.m. UTC | #1
On 16/11/16 00:02, Thomas Huth wrote:
> To support block writes, the deblocker should feature a 'write'
> function, too. Since our only client that tries to use write
> accesses so far (GRUB2) is always writing whole sectors, we
> do not do the complicated read-modify-write dance here yet, but
> simply check that the client always tries to write whole sectors.
> 
> Reviewed-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
> Signed-off-by: Thomas Huth <thuth@redhat.com>

Thanks, applied all 4 patches.


> ---
>  slof/fs/packages/deblocker.fs | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
> 
> diff --git a/slof/fs/packages/deblocker.fs b/slof/fs/packages/deblocker.fs
> index 83cd712..ebed5cf 100644
> --- a/slof/fs/packages/deblocker.fs
> +++ b/slof/fs/packages/deblocker.fs
> @@ -68,3 +68,24 @@ INSTANCE VARIABLE fail-count
>    my-block @ adr @ len @ move THEN
>  
>    r> ;
> +
> +: write-blocks ( addr block# #blocks -- #writtenblks )
> +    s" write-blocks" $call-parent
> +;
> +
> +: write ( addr len -- actual )
> +    dup block-size @ mod IF
> +        ." ERROR: Can not write partial sector length." cr
> +        2drop 0 EXIT
> +    THEN
> +    block-size @ /                             ( addr #blocks )
> +    offset @                                   ( addr #blocks offset )
> +    dup block-size @ mod IF
> +        ." ERROR: Can not write at partial sector offset." cr
> +        3drop 0 EXIT
> +    THEN
> +    block-size @ / swap                        ( addr block# #blocks )
> +    write-blocks                               ( #writtenblks )
> +    block-size @ *
> +    dup offset +!
> +;
>
diff mbox

Patch

diff --git a/slof/fs/packages/deblocker.fs b/slof/fs/packages/deblocker.fs
index 83cd712..ebed5cf 100644
--- a/slof/fs/packages/deblocker.fs
+++ b/slof/fs/packages/deblocker.fs
@@ -68,3 +68,24 @@  INSTANCE VARIABLE fail-count
   my-block @ adr @ len @ move THEN
 
   r> ;
+
+: write-blocks ( addr block# #blocks -- #writtenblks )
+    s" write-blocks" $call-parent
+;
+
+: write ( addr len -- actual )
+    dup block-size @ mod IF
+        ." ERROR: Can not write partial sector length." cr
+        2drop 0 EXIT
+    THEN
+    block-size @ /                             ( addr #blocks )
+    offset @                                   ( addr #blocks offset )
+    dup block-size @ mod IF
+        ." ERROR: Can not write at partial sector offset." cr
+        3drop 0 EXIT
+    THEN
+    block-size @ / swap                        ( addr block# #blocks )
+    write-blocks                               ( #writtenblks )
+    block-size @ *
+    dup offset +!
+;