Commit 8a7deb36 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.dk/linux-block

Pull block layer fixes from Jens Axboe:
 "Sending this off now, as I'm not aware of other current bugs, nor do I
  expect further fixes before 4.1 final.  This contains two fixes:

   - a fix for a bdi unregister warning that gets spewed on md, due to a
     regression introduced earlier in this cycle.  From Neil Brown.

   - a fix for a compile warning for NVMe on 32-bit platforms, also a
     regression introduced in this cycle.  From Arnd Bergmann"

* 'for-linus' of git://git.kernel.dk/linux-block:
  NVMe: fix type warning on 32-bit
  block: discard bdi_unregister() in favour of bdi_destroy()
parents 08602d74 fec558b5
...@@ -653,7 +653,6 @@ void del_gendisk(struct gendisk *disk) ...@@ -653,7 +653,6 @@ void del_gendisk(struct gendisk *disk)
disk->flags &= ~GENHD_FL_UP; disk->flags &= ~GENHD_FL_UP;
sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi"); sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi");
bdi_unregister(&disk->queue->backing_dev_info);
blk_unregister_queue(disk); blk_unregister_queue(disk);
blk_unregister_region(disk_devt(disk), disk->minors); blk_unregister_region(disk_devt(disk), disk->minors);
......
...@@ -1750,6 +1750,7 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio) ...@@ -1750,6 +1750,7 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
struct nvme_iod *iod; struct nvme_iod *iod;
dma_addr_t meta_dma = 0; dma_addr_t meta_dma = 0;
void *meta = NULL; void *meta = NULL;
void __user *metadata;
if (copy_from_user(&io, uio, sizeof(io))) if (copy_from_user(&io, uio, sizeof(io)))
return -EFAULT; return -EFAULT;
...@@ -1763,6 +1764,8 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio) ...@@ -1763,6 +1764,8 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
meta_len = 0; meta_len = 0;
} }
metadata = (void __user *)(unsigned long)io.metadata;
write = io.opcode & 1; write = io.opcode & 1;
switch (io.opcode) { switch (io.opcode) {
...@@ -1786,13 +1789,13 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio) ...@@ -1786,13 +1789,13 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
if (meta_len) { if (meta_len) {
meta = dma_alloc_coherent(&dev->pci_dev->dev, meta_len, meta = dma_alloc_coherent(&dev->pci_dev->dev, meta_len,
&meta_dma, GFP_KERNEL); &meta_dma, GFP_KERNEL);
if (!meta) { if (!meta) {
status = -ENOMEM; status = -ENOMEM;
goto unmap; goto unmap;
} }
if (write) { if (write) {
if (copy_from_user(meta, (void __user *)io.metadata, if (copy_from_user(meta, metadata, meta_len)) {
meta_len)) {
status = -EFAULT; status = -EFAULT;
goto unmap; goto unmap;
} }
...@@ -1819,8 +1822,7 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio) ...@@ -1819,8 +1822,7 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
nvme_free_iod(dev, iod); nvme_free_iod(dev, iod);
if (meta) { if (meta) {
if (status == NVME_SC_SUCCESS && !write) { if (status == NVME_SC_SUCCESS && !write) {
if (copy_to_user((void __user *)io.metadata, meta, if (copy_to_user(metadata, meta, meta_len))
meta_len))
status = -EFAULT; status = -EFAULT;
} }
dma_free_coherent(&dev->pci_dev->dev, meta_len, meta, meta_dma); dma_free_coherent(&dev->pci_dev->dev, meta_len, meta, meta_dma);
......
...@@ -116,7 +116,6 @@ __printf(3, 4) ...@@ -116,7 +116,6 @@ __printf(3, 4)
int bdi_register(struct backing_dev_info *bdi, struct device *parent, int bdi_register(struct backing_dev_info *bdi, struct device *parent,
const char *fmt, ...); const char *fmt, ...);
int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev); int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
void bdi_unregister(struct backing_dev_info *bdi);
int __must_check bdi_setup_and_register(struct backing_dev_info *, char *); int __must_check bdi_setup_and_register(struct backing_dev_info *, char *);
void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages, void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages,
enum wb_reason reason); enum wb_reason reason);
......
...@@ -250,7 +250,6 @@ DEFINE_EVENT(writeback_class, name, \ ...@@ -250,7 +250,6 @@ DEFINE_EVENT(writeback_class, name, \
DEFINE_WRITEBACK_EVENT(writeback_nowork); DEFINE_WRITEBACK_EVENT(writeback_nowork);
DEFINE_WRITEBACK_EVENT(writeback_wake_background); DEFINE_WRITEBACK_EVENT(writeback_wake_background);
DEFINE_WRITEBACK_EVENT(writeback_bdi_register); DEFINE_WRITEBACK_EVENT(writeback_bdi_register);
DEFINE_WRITEBACK_EVENT(writeback_bdi_unregister);
DECLARE_EVENT_CLASS(wbc_class, DECLARE_EVENT_CLASS(wbc_class,
TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi), TP_PROTO(struct writeback_control *wbc, struct backing_dev_info *bdi),
......
...@@ -359,23 +359,6 @@ static void bdi_wb_shutdown(struct backing_dev_info *bdi) ...@@ -359,23 +359,6 @@ static void bdi_wb_shutdown(struct backing_dev_info *bdi)
flush_delayed_work(&bdi->wb.dwork); flush_delayed_work(&bdi->wb.dwork);
} }
/*
* Called when the device behind @bdi has been removed or ejected.
*
* We can't really do much here except for reducing the dirty ratio at
* the moment. In the future we should be able to set a flag so that
* the filesystem can handle errors at mark_inode_dirty time instead
* of only at writeback time.
*/
void bdi_unregister(struct backing_dev_info *bdi)
{
if (WARN_ON_ONCE(!bdi->dev))
return;
bdi_set_min_ratio(bdi, 0);
}
EXPORT_SYMBOL(bdi_unregister);
static void bdi_wb_init(struct bdi_writeback *wb, struct backing_dev_info *bdi) static void bdi_wb_init(struct bdi_writeback *wb, struct backing_dev_info *bdi)
{ {
memset(wb, 0, sizeof(*wb)); memset(wb, 0, sizeof(*wb));
...@@ -443,6 +426,7 @@ void bdi_destroy(struct backing_dev_info *bdi) ...@@ -443,6 +426,7 @@ void bdi_destroy(struct backing_dev_info *bdi)
int i; int i;
bdi_wb_shutdown(bdi); bdi_wb_shutdown(bdi);
bdi_set_min_ratio(bdi, 0);
WARN_ON(!list_empty(&bdi->work_list)); WARN_ON(!list_empty(&bdi->work_list));
WARN_ON(delayed_work_pending(&bdi->wb.dwork)); WARN_ON(delayed_work_pending(&bdi->wb.dwork));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment