History

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()"

Linus Torvalds committed 8 years ago

Commit ca16eb32 parents db44bf4 d5274b38 files · +111 −64Browse files

Showing the changes to include/linux (1 of 8 files). Show all

Unified · Split

include/linux/blk-cgroup.h+44−1
@@ -56,6 +56,7 @@ struct blkcg { · 55 unmodified lines
56 struct list_head all_blkcgs_node;56 struct list_head all_blkcgs_node;
57#ifdef CONFIG_CGROUP_WRITEBACK57#ifdef CONFIG_CGROUP_WRITEBACK
58 struct list_head cgwb_list;58 struct list_head cgwb_list;
59 refcount_t cgwb_refcnt;
59#endif60#endif
60};61};
61 62
@@ -89,7 +90,6 @@ struct blkg_policy_data { · 27 unmodified lines
89 /* the blkg and policy id this per-policy data belongs to */90 /* the blkg and policy id this per-policy data belongs to */
90 struct blkcg_gq *blkg;91 struct blkcg_gq *blkg;
91 int plid;92 int plid;
92 bool offline;
93};93};
94 94
95/*95/*
@@ -387,6 +387,49 @@ static inline struct blkcg *cpd_to_blkcg(struct blkcg_policy_data *cpd) · 291 unmodified lines
387 return cpd ? cpd->blkcg : NULL;387 return cpd ? cpd->blkcg : NULL;
388}388}
389 389
390extern void blkcg_destroy_blkgs(struct blkcg *blkcg);
391
392#ifdef CONFIG_CGROUP_WRITEBACK
393
394/**
395 * blkcg_cgwb_get - get a reference for blkcg->cgwb_list
396 * @blkcg: blkcg of interest
397 *
398 * This is used to track the number of active wb's related to a blkcg.
399 */
400static inline void blkcg_cgwb_get(struct blkcg *blkcg)
401{
402 refcount_inc(&blkcg->cgwb_refcnt);
403}
404
405/**
406 * blkcg_cgwb_put - put a reference for @blkcg->cgwb_list
407 * @blkcg: blkcg of interest
408 *
409 * This is used to track the number of active wb's related to a blkcg.
410 * When this count goes to zero, all active wb has finished so the
411 * blkcg can continue destruction by calling blkcg_destroy_blkgs().
412 * This work may occur in cgwb_release_workfn() on the cgwb_release
413 * workqueue.
414 */
415static inline void blkcg_cgwb_put(struct blkcg *blkcg)
416{
417 if (refcount_dec_and_test(&blkcg->cgwb_refcnt))
418 blkcg_destroy_blkgs(blkcg);
419}
420
421#else
422
423static inline void blkcg_cgwb_get(struct blkcg *blkcg) { }
424
425static inline void blkcg_cgwb_put(struct blkcg *blkcg)
426{
427 /* wb isn't being accounted, so trigger destruction right away */
428 blkcg_destroy_blkgs(blkcg);
429}
430
431#endif
432
390/**433/**
391 * blkg_path - format cgroup path of blkg434 * blkg_path - format cgroup path of blkg
392 * @blkg: blkg of interest435 * @blkg: blkg of interest