]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ocfs2: handle a symlink read error correctly
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Thu, 5 Dec 2024 17:16:29 +0000 (17:16 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Mar 2025 11:47:12 +0000 (12:47 +0100)
commit 2b4c2094da6d84e69b843dd3317902e977bf64bd upstream.

Patch series "Convert ocfs2 to use folios".

Mark did a conversion of ocfs2 to use folios and sent it to me as a
giant patch for review ;-)

So I've redone it as individual patches, and credited Mark for the patches
where his code is substantially the same.  It's not a bad way to do it;
his patch had some bugs and my patches had some bugs.  Hopefully all our
bugs were different from each other.  And hopefully Mark likes all the
changes I made to his code!

This patch (of 23):

If we can't read the buffer, be sure to unlock the page before returning.

Link: https://lkml.kernel.org/r/20241205171653.3179945-1-willy@infradead.org
Link: https://lkml.kernel.org/r/20241205171653.3179945-2-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
Cc: Mark Fasheh <mark@fasheh.com>
Cc: Joel Becker <jlbec@evilplan.org>
Cc: Junxiao Bi <junxiao.bi@oracle.com>
Cc: Changwei Ge <gechangwei@live.cn>
Cc: Jun Piao <piaojun@huawei.com>
Cc: Mark Tinguely <mark.tinguely@oracle.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/ocfs2/symlink.c

index 94cfacc9bad70ce0745c14d982a840453aaf6e44..f3e80c00ca694020a8a8dbeae3b3b1dffd51931d 100644 (file)
@@ -66,7 +66,7 @@ static int ocfs2_fast_symlink_readpage(struct file *unused, struct page *page)
 
        if (status < 0) {
                mlog_errno(status);
-               return status;
+               goto out;
        }
 
        fe = (struct ocfs2_dinode *) bh->b_data;
@@ -77,9 +77,10 @@ static int ocfs2_fast_symlink_readpage(struct file *unused, struct page *page)
        memcpy(kaddr, link, len + 1);
        kunmap_atomic(kaddr);
        SetPageUptodate(page);
+out:
        unlock_page(page);
        brelse(bh);
-       return 0;
+       return status;
 }
 
 const struct address_space_operations ocfs2_fast_symlink_aops = {