History

bdi: Provide bdi_register_va() and bdi_alloc()

Add function that registers bdi and takes va_list instead of variable number of arguments. Add bdi_alloc() as simple wrapper for NUMA-unaware users allocating BDI.

Jan Kara committed 9 years ago

Commit baf7a611 parent 2bc19cd2 files · +21 −5Browse files

Unified · Split

2 files
  1. include/linux/backing-dev.h +6 −0
  2. mm/backing-dev.c +15 −5
include/linux/backing-dev.h+6−0
@@ -30,6 +30,8 @@ void bdi_put(struct backing_dev_info *bdi); · 29 unmodified lines
30__printf(3, 4)30__printf(3, 4)
31int bdi_register(struct backing_dev_info *bdi, struct device *parent,31int bdi_register(struct backing_dev_info *bdi, struct device *parent,
32 const char *fmt, ...);32 const char *fmt, ...);
33int bdi_register_va(struct backing_dev_info *bdi, struct device *parent,
34 const char *fmt, va_list args);
33int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);35int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
34int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner);36int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner);
35void bdi_unregister(struct backing_dev_info *bdi);37void bdi_unregister(struct backing_dev_info *bdi);
@@ -37,6 +39,10 @@ void bdi_unregister(struct backing_dev_info *bdi); · 1 unmodified line
37int __must_check bdi_setup_and_register(struct backing_dev_info *, char *);39int __must_check bdi_setup_and_register(struct backing_dev_info *, char *);
38void bdi_destroy(struct backing_dev_info *bdi);40void bdi_destroy(struct backing_dev_info *bdi);
39struct backing_dev_info *bdi_alloc_node(gfp_t gfp_mask, int node_id);41struct backing_dev_info *bdi_alloc_node(gfp_t gfp_mask, int node_id);
42static inline struct backing_dev_info *bdi_alloc(gfp_t gfp_mask)
43{
44 return bdi_alloc_node(gfp_mask, NUMA_NO_NODE);
45}
40 46
41void wb_start_writeback(struct bdi_writeback *wb, long nr_pages,47void wb_start_writeback(struct bdi_writeback *wb, long nr_pages,
42 bool range_cyclic, enum wb_reason reason);48 bool range_cyclic, enum wb_reason reason);
mm/backing-dev.c+15−5
@@ -856,18 +856,15 @@ struct backing_dev_info *bdi_alloc_node(gfp_t gfp_mask, int node_id) · 855 unmodified lines
856 return bdi;856 return bdi;
857}857}
858 858
859int bdi_register(struct backing_dev_info *bdi, struct device *parent,859int bdi_register_va(struct backing_dev_info *bdi, struct device *parent,
860 const char *fmt, ...)860 const char *fmt, va_list args)
861{861{
862 va_list args;
863 struct device *dev;862 struct device *dev;
864 863
865 if (bdi->dev) /* The driver needs to use separate queues per device */864 if (bdi->dev) /* The driver needs to use separate queues per device */
866 return 0;865 return 0;
867 866
868 va_start(args, fmt);
869 dev = device_create_vargs(bdi_class, parent, MKDEV(0, 0), bdi, fmt, args);867 dev = device_create_vargs(bdi_class, parent, MKDEV(0, 0), bdi, fmt, args);
870 va_end(args);
871 if (IS_ERR(dev))868 if (IS_ERR(dev))
872 return PTR_ERR(dev);869 return PTR_ERR(dev);
873 870
@@ -884,6 +881,19 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent, · 10 unmodified lines
884 trace_writeback_bdi_register(bdi);881 trace_writeback_bdi_register(bdi);
885 return 0;882 return 0;
886}883}
884EXPORT_SYMBOL(bdi_register_va);
885
886int bdi_register(struct backing_dev_info *bdi, struct device *parent,
887 const char *fmt, ...)
888{
889 va_list args;
890 int ret;
891
892 va_start(args, fmt);
893 ret = bdi_register_va(bdi, parent, fmt, args);
894 va_end(args);
895 return ret;
896}
887EXPORT_SYMBOL(bdi_register);897EXPORT_SYMBOL(bdi_register);
888 898
889int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev)899int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev)