mirror of https://gitee.com/openkylin/linux.git
Changes since last time:
- Don't leak resources when mount fails - Don't accidentally clobber variables when looking for free inodes -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABCgAGBQJZlfFsAAoJEPh/dxk0SrTrTmQP/1Yga+FXQ1vjsyi0SyPRupwd 6beHGDEyLSmYaZKqye8v/nJlNVT8nmJofM20Hyu04f41K4oShQrzrI7jOOscOaYY jGEpgbx9fpLPD7AupgDvEDcrZyzZD/j3XxoSsOEGe5D6m3t2X0B4RtHz3jtj2s3e wkaBTE7GpzwrhC+9L+3AAtlpNlwkbjcCz0Wfrqlo8DjvRHTlutbYF51fthLJACtz U5XgNlxrjQlxGxn4IRHEqxmxWKz2iF4aQHGIX8OEGyt8J3YEO2t3K+nSalWduiBc mynExqVFIdGddNWoW4au6IKkPEahytsPVAiyt1TQMNvgkOMCO6DfUz+WmyQbd483 2r/xUbMdP78RQsUDXdrIEcTiHs/GEfQmIxUongf/0au3r2wmpQfbqzQuBxhuVbzW 1tQQsDKrO3r+GeEEoBPehtWVF/QPlQvlpT6pfft69kcgp5ukPDvOyOoM0ZEbKy72 zBWEs5O/kHUOBBXXdV2cqazplq3LyLuBMok1y+gUXXOyXfEd2w9LPqmoK3RmqSQ2 FnZc2A6tjko1NDLrSkq/uYRXIGi7ZAfxzqhP0L6XLUnu+kjN/A2Xb6pdfB9Wngl2 8nLVbBL/d28lMVPLJ5M3yxoVcQbIfcNqNA5QmWVCmPUqEwgMQFCsbBdYMKILI0ok B76xb0VyZBP5l9QJ514S =vJe/ -----END PGP SIGNATURE----- Merge tag 'xfs-4.13-fixes-5' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux Pull xfs fixes from Darrick Wong: "A handful more bug fixes for you today. Changes since last time: - Don't leak resources when mount fails - Don't accidentally clobber variables when looking for free inodes" * tag 'xfs-4.13-fixes-5' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux: xfs: don't leak quotacheck dquots when cow recovery xfs: clear MS_ACTIVE after finishing log recovery iomap: fix integer truncation issues in the zeroing and dirtying helpers xfs: fix inobt inode allocation search optimization
This commit is contained in:
commit
cc28fcdc01
|
@ -278,7 +278,7 @@ iomap_dirty_actor(struct inode *inode, loff_t pos, loff_t length, void *data,
|
|||
unsigned long bytes; /* Bytes to write to page */
|
||||
|
||||
offset = (pos & (PAGE_SIZE - 1));
|
||||
bytes = min_t(unsigned long, PAGE_SIZE - offset, length);
|
||||
bytes = min_t(loff_t, PAGE_SIZE - offset, length);
|
||||
|
||||
rpage = __iomap_read_page(inode, pos);
|
||||
if (IS_ERR(rpage))
|
||||
|
@ -373,7 +373,7 @@ iomap_zero_range_actor(struct inode *inode, loff_t pos, loff_t count,
|
|||
unsigned offset, bytes;
|
||||
|
||||
offset = pos & (PAGE_SIZE - 1); /* Within page */
|
||||
bytes = min_t(unsigned, PAGE_SIZE - offset, count);
|
||||
bytes = min_t(loff_t, PAGE_SIZE - offset, count);
|
||||
|
||||
if (IS_DAX(inode))
|
||||
status = iomap_dax_zero(pos, offset, bytes, iomap);
|
||||
|
|
|
@ -1246,13 +1246,13 @@ xfs_dialloc_ag_inobt(
|
|||
|
||||
/* free inodes to the left? */
|
||||
if (useleft && trec.ir_freecount) {
|
||||
rec = trec;
|
||||
xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR);
|
||||
cur = tcur;
|
||||
|
||||
pag->pagl_leftrec = trec.ir_startino;
|
||||
pag->pagl_rightrec = rec.ir_startino;
|
||||
pag->pagl_pagino = pagino;
|
||||
rec = trec;
|
||||
goto alloc_inode;
|
||||
}
|
||||
|
||||
|
|
|
@ -749,9 +749,20 @@ xfs_log_mount_finish(
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* During the second phase of log recovery, we need iget and
|
||||
* iput to behave like they do for an active filesystem.
|
||||
* xfs_fs_drop_inode needs to be able to prevent the deletion
|
||||
* of inodes before we're done replaying log items on those
|
||||
* inodes. Turn it off immediately after recovery finishes
|
||||
* so that we don't leak the quota inodes if subsequent mount
|
||||
* activities fail.
|
||||
*/
|
||||
mp->m_super->s_flags |= MS_ACTIVE;
|
||||
error = xlog_recover_finish(mp->m_log);
|
||||
if (!error)
|
||||
xfs_log_work_queue(mp);
|
||||
mp->m_super->s_flags &= ~MS_ACTIVE;
|
||||
|
||||
return error;
|
||||
}
|
||||
|
|
|
@ -944,15 +944,6 @@ xfs_mountfs(
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* During the second phase of log recovery, we need iget and
|
||||
* iput to behave like they do for an active filesystem.
|
||||
* xfs_fs_drop_inode needs to be able to prevent the deletion
|
||||
* of inodes before we're done replaying log items on those
|
||||
* inodes.
|
||||
*/
|
||||
mp->m_super->s_flags |= MS_ACTIVE;
|
||||
|
||||
/*
|
||||
* Finish recovering the file system. This part needed to be delayed
|
||||
* until after the root and real-time bitmap inodes were consistently
|
||||
|
@ -1028,12 +1019,13 @@ xfs_mountfs(
|
|||
out_quota:
|
||||
xfs_qm_unmount_quotas(mp);
|
||||
out_rtunmount:
|
||||
mp->m_super->s_flags &= ~MS_ACTIVE;
|
||||
xfs_rtunmount_inodes(mp);
|
||||
out_rele_rip:
|
||||
IRELE(rip);
|
||||
cancel_delayed_work_sync(&mp->m_reclaim_work);
|
||||
xfs_reclaim_inodes(mp, SYNC_WAIT);
|
||||
/* Clean out dquots that might be in memory after quotacheck. */
|
||||
xfs_qm_unmount(mp);
|
||||
out_log_dealloc:
|
||||
mp->m_flags |= XFS_MOUNT_UNMOUNTING;
|
||||
xfs_log_mount_cancel(mp);
|
||||
|
|
Loading…
Reference in New Issue