for-linus-20180906
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEwPw5LcreJtl1+l5K99NY+ylx4KYFAluRkywQHGF4Ym9lQGtl
cm5lbC5kawAKCRD301j7KXHgpm8uEAC8vBFb5tzZ2dOeRbGQ6LaPTToBmRrLtOcP
kDRnfZIw0raNStOpn1dkGLz8IOSjwOGftx9Q4pJed25vynTEq5lYmmLVUlJQ6cJ7
oNpYiCdPxJvbKz5fChGG2nHHa1RLer1d728NZtkeZU/ChPmw56EO5ORghE7zPG7K
Z/0qHYsgwS427o8pUDsymmt6I62IJGrjzqJdC0pqBy6RePQWtlwkmtd7CIgFiffY
tDnk6RSwcihnIalMMLvFXeGf6cSaZvuH4oK1QNdfojAyS8kWeA6gHtjRS8UcuuUY
t6o+hU0vki8bghoNoI40RrLgAmV91BVv1/Voo79dQvDWAigyie51HwFFkqdWzJxJ
g4MCZYpys26w/VUGBFCku0hiRIAhZFO8Sun5zbVCJpyt8hTXF0RrG3CpwmCF7Lc0
m+h8tJanEMCesfYMztTD31L1BOFhJeOgBJr4a5QURy0LbIvC0V52IKiOQ0475E8E
H10rQaRw/7Am+mZugedMUGMgYD/eN33NQoRuTWZdck/58big2SU78zGpR/GqTmy3
w9v2I8ksBTivzEayBV0G4Z5Gxu7QYA7NMsO5RS/wuGfUX8D/1QtQU9Ejh5TESbek
R3WUyhXJJ2S+DWTUlmX7TgPxYxG3sXatQbSAgFJiucxyIRdpdqfeoXmOHvPrWZEq
O3VDm0D6pw==
=qhv7
-----END PGP SIGNATURE-----
Merge tag 'for-linus-20180906' of git://git.kernel.dk/linux-block
Pull block fixes from Jens Axboe:
"Small collection of fixes that should go into this release. This
contains:
- Small series that fixes a race between blkcg teardown and writeback
(Dennis Zhou)
- Fix disallowing invalid block size settings from the nbd ioctl (me)
- BFQ fix for a use-after-free on last release of a bfqg (Konstantin
Khlebnikov)
- Fix for the "don't warn for flush" fix (Mikulas)"
* tag 'for-linus-20180906' of git://git.kernel.dk/linux-block:
block: bfq: swap puts in bfqg_and_blkg_put
block: don't warn when doing fsync on read-only devices
nbd: don't allow invalid blocksize settings
blkcg: use tryget logic when associating a blkg with a bio
blkcg: delay blkg destruction until after writeback has finished
Revert "blk-throttle: fix race between blkcg_bio_issue_check() and cgroup_rmdir()"
This commit is contained in:
commit
ca16eb342e
8 changed files with 111 additions and 64 deletions
|
|
@ -56,6 +56,7 @@ struct blkcg {
|
|||
struct list_head all_blkcgs_node;
|
||||
#ifdef CONFIG_CGROUP_WRITEBACK
|
||||
struct list_head cgwb_list;
|
||||
refcount_t cgwb_refcnt;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
@ -89,7 +90,6 @@ struct blkg_policy_data {
|
|||
/* the blkg and policy id this per-policy data belongs to */
|
||||
struct blkcg_gq *blkg;
|
||||
int plid;
|
||||
bool offline;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -387,6 +387,49 @@ static inline struct blkcg *cpd_to_blkcg(struct blkcg_policy_data *cpd)
|
|||
return cpd ? cpd->blkcg : NULL;
|
||||
}
|
||||
|
||||
extern void blkcg_destroy_blkgs(struct blkcg *blkcg);
|
||||
|
||||
#ifdef CONFIG_CGROUP_WRITEBACK
|
||||
|
||||
/**
|
||||
* blkcg_cgwb_get - get a reference for blkcg->cgwb_list
|
||||
* @blkcg: blkcg of interest
|
||||
*
|
||||
* This is used to track the number of active wb's related to a blkcg.
|
||||
*/
|
||||
static inline void blkcg_cgwb_get(struct blkcg *blkcg)
|
||||
{
|
||||
refcount_inc(&blkcg->cgwb_refcnt);
|
||||
}
|
||||
|
||||
/**
|
||||
* blkcg_cgwb_put - put a reference for @blkcg->cgwb_list
|
||||
* @blkcg: blkcg of interest
|
||||
*
|
||||
* This is used to track the number of active wb's related to a blkcg.
|
||||
* When this count goes to zero, all active wb has finished so the
|
||||
* blkcg can continue destruction by calling blkcg_destroy_blkgs().
|
||||
* This work may occur in cgwb_release_workfn() on the cgwb_release
|
||||
* workqueue.
|
||||
*/
|
||||
static inline void blkcg_cgwb_put(struct blkcg *blkcg)
|
||||
{
|
||||
if (refcount_dec_and_test(&blkcg->cgwb_refcnt))
|
||||
blkcg_destroy_blkgs(blkcg);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static inline void blkcg_cgwb_get(struct blkcg *blkcg) { }
|
||||
|
||||
static inline void blkcg_cgwb_put(struct blkcg *blkcg)
|
||||
{
|
||||
/* wb isn't being accounted, so trigger destruction right away */
|
||||
blkcg_destroy_blkgs(blkcg);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* blkg_path - format cgroup path of blkg
|
||||
* @blkg: blkg of interest
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue