udf: Fix lost writes in udf_adinicb_writepage()
authorJan Kara <jack@suse.cz>
Mon, 27 Feb 2023 18:32:19 +0000 (19:32 +0100)
committerJan Kara <jack@suse.cz>
Mon, 6 Mar 2023 15:38:25 +0000 (16:38 +0100)
The patch converting udf_adinicb_writepage() to avoid manually kmapping
the page used memcpy_to_page() however that copies in the wrong
direction (effectively overwriting file data with the old contents).
What we should be using is memcpy_from_page() to copy data from the page
into the inode and then mark inode dirty to store the data.

Fixes: 5cfc45321a6d ("udf: Convert udf_adinicb_writepage() to memcpy_to_page()")
Signed-off-by: Jan Kara <jack@suse.cz>
fs/udf/inode.c

index f7a9607c2b9578ce459dee3ebc87360ea834f327..facaf3a2062516690db615efcc777299c59907c7 100644 (file)
@@ -193,7 +193,7 @@ static int udf_adinicb_writepage(struct folio *folio,
        struct udf_inode_info *iinfo = UDF_I(inode);
 
        BUG_ON(!PageLocked(page));
-       memcpy_to_page(page, 0, iinfo->i_data + iinfo->i_lenEAttr,
+       memcpy_from_page(iinfo->i_data + iinfo->i_lenEAttr, page, 0,
                       i_size_read(inode));
        unlock_page(page);
        mark_inode_dirty(inode);