mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 14:21:47 +00:00
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()
This commit is contained in:
commit
8a7deb362b
@ -653,7 +653,6 @@ void del_gendisk(struct gendisk *disk)
|
||||
disk->flags &= ~GENHD_FL_UP;
|
||||
|
||||
sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi");
|
||||
bdi_unregister(&disk->queue->backing_dev_info);
|
||||
blk_unregister_queue(disk);
|
||||
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)
|
||||
struct nvme_iod *iod;
|
||||
dma_addr_t meta_dma = 0;
|
||||
void *meta = NULL;
|
||||
void __user *metadata;
|
||||
|
||||
if (copy_from_user(&io, uio, sizeof(io)))
|
||||
return -EFAULT;
|
||||
@ -1763,6 +1764,8 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
|
||||
meta_len = 0;
|
||||
}
|
||||
|
||||
metadata = (void __user *)(unsigned long)io.metadata;
|
||||
|
||||
write = io.opcode & 1;
|
||||
|
||||
switch (io.opcode) {
|
||||
@ -1786,13 +1789,13 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
|
||||
if (meta_len) {
|
||||
meta = dma_alloc_coherent(&dev->pci_dev->dev, meta_len,
|
||||
&meta_dma, GFP_KERNEL);
|
||||
|
||||
if (!meta) {
|
||||
status = -ENOMEM;
|
||||
goto unmap;
|
||||
}
|
||||
if (write) {
|
||||
if (copy_from_user(meta, (void __user *)io.metadata,
|
||||
meta_len)) {
|
||||
if (copy_from_user(meta, metadata, meta_len)) {
|
||||
status = -EFAULT;
|
||||
goto unmap;
|
||||
}
|
||||
@ -1819,8 +1822,7 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
|
||||
nvme_free_iod(dev, iod);
|
||||
if (meta) {
|
||||
if (status == NVME_SC_SUCCESS && !write) {
|
||||
if (copy_to_user((void __user *)io.metadata, meta,
|
||||
meta_len))
|
||||
if (copy_to_user(metadata, meta, meta_len))
|
||||
status = -EFAULT;
|
||||
}
|
||||
dma_free_coherent(&dev->pci_dev->dev, meta_len, meta, meta_dma);
|
||||
|
@ -116,7 +116,6 @@ __printf(3, 4)
|
||||
int bdi_register(struct backing_dev_info *bdi, struct device *parent,
|
||||
const char *fmt, ...);
|
||||
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 *);
|
||||
void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages,
|
||||
enum wb_reason reason);
|
||||
|
@ -250,7 +250,6 @@ DEFINE_EVENT(writeback_class, name, \
|
||||
DEFINE_WRITEBACK_EVENT(writeback_nowork);
|
||||
DEFINE_WRITEBACK_EVENT(writeback_wake_background);
|
||||
DEFINE_WRITEBACK_EVENT(writeback_bdi_register);
|
||||
DEFINE_WRITEBACK_EVENT(writeback_bdi_unregister);
|
||||
|
||||
DECLARE_EVENT_CLASS(wbc_class,
|
||||
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)
|
||||
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)
|
||||
{
|
||||
memset(wb, 0, sizeof(*wb));
|
||||
@ -443,6 +426,7 @@ void bdi_destroy(struct backing_dev_info *bdi)
|
||||
int i;
|
||||
|
||||
bdi_wb_shutdown(bdi);
|
||||
bdi_set_min_ratio(bdi, 0);
|
||||
|
||||
WARN_ON(!list_empty(&bdi->work_list));
|
||||
WARN_ON(delayed_work_pending(&bdi->wb.dwork));
|
||||
|
Loading…
Reference in New Issue
Block a user