Changes for 5.8-rc4:
- Fix a use-after-free bug when the fs shuts down. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEUzaAxoMeQq6m2jMV+H93GTRKtOsFAl77c9oACgkQ+H93GTRK tOvYow/+O61y32kJzJ6xJ5QoGE5K10CXp4cpBwOgG/6POERIDBirgAMqKAx8rEu2 go36qUVzwyveaB4iyuIkw5K+odZbHpGiuQqiGu8Aw4XBEAEhDqPPsnHhllSi/VOq 4AjvfYefmj0ALQay1pzGpR2h5+03JwOw0ZFcmBl5QSTMLwZQZ1PoU8ujiYPSxsUr m9dcGZtGU16mmDgORzYTDnSYSKruhJDSD5IxsID+QST0wK4MuPkJr0T+ZQmziWb1 xmHE1aTGDZcrYG4+x2Pzop822mrnuMBnMaX8KOOtiZAhtKb19sAf0OUWBkWOQYvb Vk3mIDDz910vd/szw3B5KMVNkeYoRtHAQztpLyfJ3Gtxmt5g/4ZX2fEX/KWJbV5D 82GLf4gB4GhTQFUwcTmgtmCCd87aH0ABiCEnURN6R04tOCXgc7bYn0XXvZL6Axd/ 25bkhlDdmOfveAZrZ1WKWSEYN/at9R5iqYsbWH1FmoE6h82OvZDxweB7P4r66KwT pMhYRqKrRrwNtarPmn6bC/8Ci5h6vl8MOP3+mTYx2eXU0aFe8OCYpPNFsSufxx+e hHTHUKxCSQDfYHbIqXVF5F8G7msh4ue+687UIo7seWyzTU4PaphH0kaHKV/+fiY1 zU9+GNjk0iVZy6cG+25ZcMPQmYv7qdrvm6XuxciywFim7l2wq0s= =BnJO -----END PGP SIGNATURE----- Merge tag 'xfs-5.8-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux Pull xfs fix from Darrick Wong: "Fix a use-after-free bug when the fs shuts down" * tag 'xfs-5.8-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux: xfs: fix use-after-free on CIL context on shutdown
This commit is contained in:
Коммит
0c7d7d1fad
|
@ -671,7 +671,8 @@ xlog_cil_push_work(
|
|||
/*
|
||||
* Wake up any background push waiters now this context is being pushed.
|
||||
*/
|
||||
wake_up_all(&ctx->push_wait);
|
||||
if (ctx->space_used >= XLOG_CIL_BLOCKING_SPACE_LIMIT(log))
|
||||
wake_up_all(&cil->xc_push_wait);
|
||||
|
||||
/*
|
||||
* Check if we've anything to push. If there is nothing, then we don't
|
||||
|
@ -743,13 +744,12 @@ xlog_cil_push_work(
|
|||
|
||||
/*
|
||||
* initialise the new context and attach it to the CIL. Then attach
|
||||
* the current context to the CIL committing lsit so it can be found
|
||||
* the current context to the CIL committing list so it can be found
|
||||
* during log forces to extract the commit lsn of the sequence that
|
||||
* needs to be forced.
|
||||
*/
|
||||
INIT_LIST_HEAD(&new_ctx->committing);
|
||||
INIT_LIST_HEAD(&new_ctx->busy_extents);
|
||||
init_waitqueue_head(&new_ctx->push_wait);
|
||||
new_ctx->sequence = ctx->sequence + 1;
|
||||
new_ctx->cil = cil;
|
||||
cil->xc_ctx = new_ctx;
|
||||
|
@ -937,7 +937,7 @@ xlog_cil_push_background(
|
|||
if (cil->xc_ctx->space_used >= XLOG_CIL_BLOCKING_SPACE_LIMIT(log)) {
|
||||
trace_xfs_log_cil_wait(log, cil->xc_ctx->ticket);
|
||||
ASSERT(cil->xc_ctx->space_used < log->l_logsize);
|
||||
xlog_wait(&cil->xc_ctx->push_wait, &cil->xc_push_lock);
|
||||
xlog_wait(&cil->xc_push_wait, &cil->xc_push_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1216,12 +1216,12 @@ xlog_cil_init(
|
|||
INIT_LIST_HEAD(&cil->xc_committing);
|
||||
spin_lock_init(&cil->xc_cil_lock);
|
||||
spin_lock_init(&cil->xc_push_lock);
|
||||
init_waitqueue_head(&cil->xc_push_wait);
|
||||
init_rwsem(&cil->xc_ctx_lock);
|
||||
init_waitqueue_head(&cil->xc_commit_wait);
|
||||
|
||||
INIT_LIST_HEAD(&ctx->committing);
|
||||
INIT_LIST_HEAD(&ctx->busy_extents);
|
||||
init_waitqueue_head(&ctx->push_wait);
|
||||
ctx->sequence = 1;
|
||||
ctx->cil = cil;
|
||||
cil->xc_ctx = ctx;
|
||||
|
|
|
@ -240,7 +240,6 @@ struct xfs_cil_ctx {
|
|||
struct xfs_log_vec *lv_chain; /* logvecs being pushed */
|
||||
struct list_head iclog_entry;
|
||||
struct list_head committing; /* ctx committing list */
|
||||
wait_queue_head_t push_wait; /* background push throttle */
|
||||
struct work_struct discard_endio_work;
|
||||
};
|
||||
|
||||
|
@ -274,6 +273,7 @@ struct xfs_cil {
|
|||
wait_queue_head_t xc_commit_wait;
|
||||
xfs_lsn_t xc_current_sequence;
|
||||
struct work_struct xc_push_work;
|
||||
wait_queue_head_t xc_push_wait; /* background push throttle */
|
||||
} ____cacheline_aligned_in_smp;
|
||||
|
||||
/*
|
||||
|
|
Загрузка…
Ссылка в новой задаче