]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/xfs/xfs_symlink.c
ext4: fix race between writepages and enabling EXT4_EXTENTS_FL
[linux.git] / fs / xfs / xfs_symlink.c
index a25502bc2071c2b9d8b730259d81bac459bbb169..d762d42ed0ff976aa0e276c3688a114c1354fdc9 100644 (file)
@@ -53,20 +53,10 @@ xfs_readlink_bmap_ilocked(
                d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock);
                byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount);
 
-               bp = xfs_buf_read(mp->m_ddev_targp, d, BTOBB(byte_cnt), 0,
-                                 &xfs_symlink_buf_ops);
-               if (!bp)
-                       return -ENOMEM;
-               error = bp->b_error;
-               if (error) {
-                       xfs_buf_ioerror_alert(bp, __func__);
-                       xfs_buf_relse(bp);
-
-                       /* bad CRC means corrupted metadata */
-                       if (error == -EFSBADCRC)
-                               error = -EFSCORRUPTED;
-                       goto out;
-               }
+               error = xfs_buf_read(mp->m_ddev_targp, d, BTOBB(byte_cnt), 0,
+                               &bp, &xfs_symlink_buf_ops);
+               if (error)
+                       return error;
                byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt);
                if (pathlen < byte_cnt)
                        byte_cnt = pathlen;
@@ -290,12 +280,10 @@ xfs_symlink(
 
                        d = XFS_FSB_TO_DADDR(mp, mval[n].br_startblock);
                        byte_cnt = XFS_FSB_TO_B(mp, mval[n].br_blockcount);
-                       bp = xfs_trans_get_buf(tp, mp->m_ddev_targp, d,
-                                              BTOBB(byte_cnt), 0);
-                       if (!bp) {
-                               error = -ENOMEM;
+                       error = xfs_trans_get_buf(tp, mp->m_ddev_targp, d,
+                                              BTOBB(byte_cnt), 0, &bp);
+                       if (error)
                                goto out_trans_cancel;
-                       }
                        bp->b_ops = &xfs_symlink_buf_ops;
 
                        byte_cnt = XFS_SYMLINK_BUF_SPACE(mp, byte_cnt);
@@ -433,13 +421,12 @@ xfs_inactive_symlink_rmt(
         * Invalidate the block(s). No validation is done.
         */
        for (i = 0; i < nmaps; i++) {
-               bp = xfs_trans_get_buf(tp, mp->m_ddev_targp,
-                       XFS_FSB_TO_DADDR(mp, mval[i].br_startblock),
-                       XFS_FSB_TO_BB(mp, mval[i].br_blockcount), 0);
-               if (!bp) {
-                       error = -ENOMEM;
+               error = xfs_trans_get_buf(tp, mp->m_ddev_targp,
+                               XFS_FSB_TO_DADDR(mp, mval[i].br_startblock),
+                               XFS_FSB_TO_BB(mp, mval[i].br_blockcount), 0,
+                               &bp);
+               if (error)
                        goto error_trans_cancel;
-               }
                xfs_trans_binval(tp, bp);
        }
        /*