Merge git://git.infradead.org/~dwmw2/mtd-2.6.35

* git://git.infradead.org/~dwmw2/mtd-2.6.35:
jffs2: update ctime when changing the file's permission by setfacl
jffs2: Fix NFS race by using insert_inode_locked()
jffs2: Fix in-core inode leaks on error paths
mtd: Fix NAND submenu
mtd/r852: update card detect early.
mtd/r852: Fixes in case of DMA timeout
mtd/r852: register IRQ as last step
drivers/mtd: Use memdup_user
docbook: make mtd nand module init static

+106 -90
+3 -8
drivers/mtd/mtdchar.c
··· 404 if (ops.ooboffs && ops.ooblen > (mtd->oobsize - ops.ooboffs)) 405 return -EINVAL; 406 407 - ops.oobbuf = kmalloc(length, GFP_KERNEL); 408 - if (!ops.oobbuf) 409 - return -ENOMEM; 410 - 411 - if (copy_from_user(ops.oobbuf, ptr, length)) { 412 - kfree(ops.oobbuf); 413 - return -EFAULT; 414 - } 415 416 start &= ~((uint64_t)mtd->oobsize - 1); 417 ret = mtd->write_oob(mtd, start, &ops);
··· 404 if (ops.ooboffs && ops.ooblen > (mtd->oobsize - ops.ooboffs)) 405 return -EINVAL; 406 407 + ops.oobbuf = memdup_user(ptr, length); 408 + if (IS_ERR(ops.oobbuf)) 409 + return PTR_ERR(ops.oobbuf); 410 411 start &= ~((uint64_t)mtd->oobsize - 1); 412 ret = mtd->write_oob(mtd, start, &ops);
+11 -10
drivers/mtd/nand/Kconfig
··· 1 - menuconfig MTD_NAND 2 - tristate "NAND Device Support" 3 - depends on MTD 4 - select MTD_NAND_IDS 5 - select MTD_NAND_ECC 6 - help 7 - This enables support for accessing all type of NAND flash 8 - devices. For further information see 9 - <http://www.linux-mtd.infradead.org/doc/nand.html>. 10 - 11 config MTD_NAND_ECC 12 tristate 13 ··· 8 help 9 Software ECC according to the Smart Media Specification. 10 The original Linux implementation had byte 0 and 1 swapped. 11 12 if MTD_NAND 13
··· 1 config MTD_NAND_ECC 2 tristate 3 ··· 18 help 19 Software ECC according to the Smart Media Specification. 20 The original Linux implementation had byte 0 and 1 swapped. 21 + 22 + 23 + menuconfig MTD_NAND 24 + tristate "NAND Device Support" 25 + depends on MTD 26 + select MTD_NAND_IDS 27 + select MTD_NAND_ECC 28 + help 29 + This enables support for accessing all type of NAND flash 30 + devices. For further information see 31 + <http://www.linux-mtd.infradead.org/doc/nand.html>. 32 33 if MTD_NAND 34
+18 -9
drivers/mtd/nand/r852.c
··· 150 if (dev->phys_dma_addr && dev->phys_dma_addr != dev->phys_bounce_buffer) 151 pci_unmap_single(dev->pci_dev, dev->phys_dma_addr, R852_DMA_LEN, 152 dev->dma_dir ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); 153 - complete(&dev->dma_done); 154 } 155 156 /* ··· 181 /* Set dma direction */ 182 dev->dma_dir = do_read; 183 dev->dma_stage = 1; 184 185 dbg_verbose("doing dma %s ", do_read ? "read" : "write"); 186 ··· 494 if (dev->card_unstable) 495 return 0; 496 497 r852_write_reg(dev, R852_CTL, dev->ctlreg | R852_CTL_ECC_ACCESS); 498 ecc_reg = r852_read_reg_dword(dev, R852_DATALINE); 499 r852_write_reg(dev, R852_CTL, dev->ctlreg); ··· 712 container_of(work, struct r852_device, card_detect_work.work); 713 714 r852_card_update_present(dev); 715 dev->card_unstable = 0; 716 717 /* False alarm */ ··· 728 else 729 r852_unregister_nand_device(dev); 730 exit: 731 - /* Update detection logic */ 732 r852_update_card_detect(dev); 733 } 734 ··· 801 if (dma_status & R852_DMA_IRQ_ERROR) { 802 dbg("recieved dma error IRQ"); 803 r852_dma_done(dev, -EIO); 804 goto out; 805 } 806 ··· 831 r852_dma_enable(dev); 832 833 /* Operation done */ 834 - if (dev->dma_stage == 3) 835 r852_dma_done(dev, 0); 836 goto out; 837 } 838 ··· 948 949 r852_dma_test(dev); 950 951 /*register irq handler*/ 952 error = -ENODEV; 953 if (request_irq(pci_dev->irq, &r852_irq, IRQF_SHARED, 954 DRV_NAME, dev)) 955 goto error10; 956 957 - dev->irq = pci_dev->irq; 958 - spin_lock_init(&dev->irqlock); 959 - 960 /* kick initial present test */ 961 - dev->card_detected = 0; 962 - r852_card_update_present(dev); 963 queue_delayed_work(dev->card_workqueue, 964 &dev->card_detect_work, 0); 965 ··· 1090 dev->card_detected ? "added" : "removed"); 1091 1092 queue_delayed_work(dev->card_workqueue, 1093 - &dev->card_detect_work, 1000); 1094 return 0; 1095 } 1096
··· 150 if (dev->phys_dma_addr && dev->phys_dma_addr != dev->phys_bounce_buffer) 151 pci_unmap_single(dev->pci_dev, dev->phys_dma_addr, R852_DMA_LEN, 152 dev->dma_dir ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); 153 } 154 155 /* ··· 182 /* Set dma direction */ 183 dev->dma_dir = do_read; 184 dev->dma_stage = 1; 185 + INIT_COMPLETION(dev->dma_done); 186 187 dbg_verbose("doing dma %s ", do_read ? "read" : "write"); 188 ··· 494 if (dev->card_unstable) 495 return 0; 496 497 + if (dev->dma_error) { 498 + dev->dma_error = 0; 499 + return -1; 500 + } 501 + 502 r852_write_reg(dev, R852_CTL, dev->ctlreg | R852_CTL_ECC_ACCESS); 503 ecc_reg = r852_read_reg_dword(dev, R852_DATALINE); 504 r852_write_reg(dev, R852_CTL, dev->ctlreg); ··· 707 container_of(work, struct r852_device, card_detect_work.work); 708 709 r852_card_update_present(dev); 710 + r852_update_card_detect(dev); 711 dev->card_unstable = 0; 712 713 /* False alarm */ ··· 722 else 723 r852_unregister_nand_device(dev); 724 exit: 725 r852_update_card_detect(dev); 726 } 727 ··· 796 if (dma_status & R852_DMA_IRQ_ERROR) { 797 dbg("recieved dma error IRQ"); 798 r852_dma_done(dev, -EIO); 799 + complete(&dev->dma_done); 800 goto out; 801 } 802 ··· 825 r852_dma_enable(dev); 826 827 /* Operation done */ 828 + if (dev->dma_stage == 3) { 829 r852_dma_done(dev, 0); 830 + complete(&dev->dma_done); 831 + } 832 goto out; 833 } 834 ··· 940 941 r852_dma_test(dev); 942 943 + dev->irq = pci_dev->irq; 944 + spin_lock_init(&dev->irqlock); 945 + 946 + dev->card_detected = 0; 947 + r852_card_update_present(dev); 948 + 949 /*register irq handler*/ 950 error = -ENODEV; 951 if (request_irq(pci_dev->irq, &r852_irq, IRQF_SHARED, 952 DRV_NAME, dev)) 953 goto error10; 954 955 /* kick initial present test */ 956 queue_delayed_work(dev->card_workqueue, 957 &dev->card_detect_work, 0); 958 ··· 1081 dev->card_detected ? "added" : "removed"); 1082 1083 queue_delayed_work(dev->card_workqueue, 1084 + &dev->card_detect_work, msecs_to_jiffies(1000)); 1085 return 0; 1086 } 1087
+2 -1
fs/jffs2/acl.c
··· 234 if (inode->i_mode != mode) { 235 struct iattr attr; 236 237 - attr.ia_valid = ATTR_MODE; 238 attr.ia_mode = mode; 239 rc = jffs2_do_setattr(inode, &attr); 240 if (rc < 0) 241 return rc;
··· 234 if (inode->i_mode != mode) { 235 struct iattr attr; 236 237 + attr.ia_valid = ATTR_MODE | ATTR_CTIME; 238 attr.ia_mode = mode; 239 + attr.ia_ctime = CURRENT_TIME_SEC; 240 rc = jffs2_do_setattr(inode, &attr); 241 if (rc < 0) 242 return rc;
+66 -61
fs/jffs2/dir.c
··· 222 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(ri->ctime)); 223 224 jffs2_free_raw_inode(ri); 225 - d_instantiate(dentry, inode); 226 227 D1(printk(KERN_DEBUG "jffs2_create: Created ino #%lu with mode %o, nlink %d(%d). nrpages %ld\n", 228 inode->i_ino, inode->i_mode, inode->i_nlink, 229 f->inocache->pino_nlink, inode->i_mapping->nrpages)); 230 return 0; 231 232 fail: 233 make_bad_inode(inode); 234 iput(inode); 235 jffs2_free_raw_inode(ri); 236 return ret; ··· 363 /* Eeek. Wave bye bye */ 364 mutex_unlock(&f->sem); 365 jffs2_complete_reservation(c); 366 - jffs2_clear_inode(inode); 367 - return PTR_ERR(fn); 368 } 369 370 /* We use f->target field to store the target path. */ ··· 373 printk(KERN_WARNING "Can't allocate %d bytes of memory\n", targetlen + 1); 374 mutex_unlock(&f->sem); 375 jffs2_complete_reservation(c); 376 - jffs2_clear_inode(inode); 377 - return -ENOMEM; 378 } 379 380 memcpy(f->target, target, targetlen + 1); ··· 389 jffs2_complete_reservation(c); 390 391 ret = jffs2_init_security(inode, dir_i); 392 - if (ret) { 393 - jffs2_clear_inode(inode); 394 - return ret; 395 - } 396 ret = jffs2_init_acl_post(inode); 397 - if (ret) { 398 - jffs2_clear_inode(inode); 399 - return ret; 400 - } 401 402 ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, 403 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); 404 - if (ret) { 405 - /* Eep. */ 406 - jffs2_clear_inode(inode); 407 - return ret; 408 - } 409 410 rd = jffs2_alloc_raw_dirent(); 411 if (!rd) { 412 /* Argh. Now we treat it like a normal delete */ 413 jffs2_complete_reservation(c); 414 - jffs2_clear_inode(inode); 415 - return -ENOMEM; 416 } 417 418 dir_f = JFFS2_INODE_INFO(dir_i); ··· 434 jffs2_complete_reservation(c); 435 jffs2_free_raw_dirent(rd); 436 mutex_unlock(&dir_f->sem); 437 - jffs2_clear_inode(inode); 438 - return PTR_ERR(fd); 439 } 440 441 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); ··· 450 jffs2_complete_reservation(c); 451 452 d_instantiate(dentry, inode); 453 return 0; 454 } 455 456 ··· 523 /* Eeek. Wave bye bye */ 524 mutex_unlock(&f->sem); 525 jffs2_complete_reservation(c); 526 - jffs2_clear_inode(inode); 527 - return PTR_ERR(fn); 528 } 529 /* No data here. Only a metadata node, which will be 530 obsoleted by the first data write ··· 535 jffs2_complete_reservation(c); 536 537 ret = jffs2_init_security(inode, dir_i); 538 - if (ret) { 539 - jffs2_clear_inode(inode); 540 - return ret; 541 - } 542 ret = jffs2_init_acl_post(inode); 543 - if (ret) { 544 - jffs2_clear_inode(inode); 545 - return ret; 546 - } 547 548 ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, 549 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); 550 - if (ret) { 551 - /* Eep. */ 552 - jffs2_clear_inode(inode); 553 - return ret; 554 - } 555 556 rd = jffs2_alloc_raw_dirent(); 557 if (!rd) { 558 /* Argh. Now we treat it like a normal delete */ 559 jffs2_complete_reservation(c); 560 - jffs2_clear_inode(inode); 561 - return -ENOMEM; 562 } 563 564 dir_f = JFFS2_INODE_INFO(dir_i); ··· 580 jffs2_complete_reservation(c); 581 jffs2_free_raw_dirent(rd); 582 mutex_unlock(&dir_f->sem); 583 - jffs2_clear_inode(inode); 584 - return PTR_ERR(fd); 585 } 586 587 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); ··· 597 jffs2_complete_reservation(c); 598 599 d_instantiate(dentry, inode); 600 return 0; 601 } 602 603 static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry) ··· 698 /* Eeek. Wave bye bye */ 699 mutex_unlock(&f->sem); 700 jffs2_complete_reservation(c); 701 - jffs2_clear_inode(inode); 702 - return PTR_ERR(fn); 703 } 704 /* No data here. Only a metadata node, which will be 705 obsoleted by the first data write ··· 710 jffs2_complete_reservation(c); 711 712 ret = jffs2_init_security(inode, dir_i); 713 - if (ret) { 714 - jffs2_clear_inode(inode); 715 - return ret; 716 - } 717 ret = jffs2_init_acl_post(inode); 718 - if (ret) { 719 - jffs2_clear_inode(inode); 720 - return ret; 721 - } 722 723 ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, 724 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); 725 - if (ret) { 726 - /* Eep. */ 727 - jffs2_clear_inode(inode); 728 - return ret; 729 - } 730 731 rd = jffs2_alloc_raw_dirent(); 732 if (!rd) { 733 /* Argh. Now we treat it like a normal delete */ 734 jffs2_complete_reservation(c); 735 - jffs2_clear_inode(inode); 736 - return -ENOMEM; 737 } 738 739 dir_f = JFFS2_INODE_INFO(dir_i); ··· 758 jffs2_complete_reservation(c); 759 jffs2_free_raw_dirent(rd); 760 mutex_unlock(&dir_f->sem); 761 - jffs2_clear_inode(inode); 762 - return PTR_ERR(fd); 763 } 764 765 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); ··· 774 jffs2_complete_reservation(c); 775 776 d_instantiate(dentry, inode); 777 - 778 return 0; 779 } 780 781 static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
··· 222 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(ri->ctime)); 223 224 jffs2_free_raw_inode(ri); 225 226 D1(printk(KERN_DEBUG "jffs2_create: Created ino #%lu with mode %o, nlink %d(%d). nrpages %ld\n", 227 inode->i_ino, inode->i_mode, inode->i_nlink, 228 f->inocache->pino_nlink, inode->i_mapping->nrpages)); 229 + 230 + d_instantiate(dentry, inode); 231 + unlock_new_inode(inode); 232 return 0; 233 234 fail: 235 make_bad_inode(inode); 236 + unlock_new_inode(inode); 237 iput(inode); 238 jffs2_free_raw_inode(ri); 239 return ret; ··· 360 /* Eeek. Wave bye bye */ 361 mutex_unlock(&f->sem); 362 jffs2_complete_reservation(c); 363 + ret = PTR_ERR(fn); 364 + goto fail; 365 } 366 367 /* We use f->target field to store the target path. */ ··· 370 printk(KERN_WARNING "Can't allocate %d bytes of memory\n", targetlen + 1); 371 mutex_unlock(&f->sem); 372 jffs2_complete_reservation(c); 373 + ret = -ENOMEM; 374 + goto fail; 375 } 376 377 memcpy(f->target, target, targetlen + 1); ··· 386 jffs2_complete_reservation(c); 387 388 ret = jffs2_init_security(inode, dir_i); 389 + if (ret) 390 + goto fail; 391 + 392 ret = jffs2_init_acl_post(inode); 393 + if (ret) 394 + goto fail; 395 396 ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, 397 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); 398 + if (ret) 399 + goto fail; 400 401 rd = jffs2_alloc_raw_dirent(); 402 if (!rd) { 403 /* Argh. Now we treat it like a normal delete */ 404 jffs2_complete_reservation(c); 405 + ret = -ENOMEM; 406 + goto fail; 407 } 408 409 dir_f = JFFS2_INODE_INFO(dir_i); ··· 437 jffs2_complete_reservation(c); 438 jffs2_free_raw_dirent(rd); 439 mutex_unlock(&dir_f->sem); 440 + ret = PTR_ERR(fd); 441 + goto fail; 442 } 443 444 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); ··· 453 jffs2_complete_reservation(c); 454 455 d_instantiate(dentry, inode); 456 + unlock_new_inode(inode); 457 return 0; 458 + 459 + fail: 460 + make_bad_inode(inode); 461 + unlock_new_inode(inode); 462 + iput(inode); 463 + return ret; 464 } 465 466 ··· 519 /* Eeek. Wave bye bye */ 520 mutex_unlock(&f->sem); 521 jffs2_complete_reservation(c); 522 + ret = PTR_ERR(fn); 523 + goto fail; 524 } 525 /* No data here. Only a metadata node, which will be 526 obsoleted by the first data write ··· 531 jffs2_complete_reservation(c); 532 533 ret = jffs2_init_security(inode, dir_i); 534 + if (ret) 535 + goto fail; 536 + 537 ret = jffs2_init_acl_post(inode); 538 + if (ret) 539 + goto fail; 540 541 ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, 542 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); 543 + if (ret) 544 + goto fail; 545 546 rd = jffs2_alloc_raw_dirent(); 547 if (!rd) { 548 /* Argh. Now we treat it like a normal delete */ 549 jffs2_complete_reservation(c); 550 + ret = -ENOMEM; 551 + goto fail; 552 } 553 554 dir_f = JFFS2_INODE_INFO(dir_i); ··· 582 jffs2_complete_reservation(c); 583 jffs2_free_raw_dirent(rd); 584 mutex_unlock(&dir_f->sem); 585 + ret = PTR_ERR(fd); 586 + goto fail; 587 } 588 589 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); ··· 599 jffs2_complete_reservation(c); 600 601 d_instantiate(dentry, inode); 602 + unlock_new_inode(inode); 603 return 0; 604 + 605 + fail: 606 + make_bad_inode(inode); 607 + unlock_new_inode(inode); 608 + iput(inode); 609 + return ret; 610 } 611 612 static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry) ··· 693 /* Eeek. Wave bye bye */ 694 mutex_unlock(&f->sem); 695 jffs2_complete_reservation(c); 696 + ret = PTR_ERR(fn); 697 + goto fail; 698 } 699 /* No data here. Only a metadata node, which will be 700 obsoleted by the first data write ··· 705 jffs2_complete_reservation(c); 706 707 ret = jffs2_init_security(inode, dir_i); 708 + if (ret) 709 + goto fail; 710 + 711 ret = jffs2_init_acl_post(inode); 712 + if (ret) 713 + goto fail; 714 715 ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, 716 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); 717 + if (ret) 718 + goto fail; 719 720 rd = jffs2_alloc_raw_dirent(); 721 if (!rd) { 722 /* Argh. Now we treat it like a normal delete */ 723 jffs2_complete_reservation(c); 724 + ret = -ENOMEM; 725 + goto fail; 726 } 727 728 dir_f = JFFS2_INODE_INFO(dir_i); ··· 759 jffs2_complete_reservation(c); 760 jffs2_free_raw_dirent(rd); 761 mutex_unlock(&dir_f->sem); 762 + ret = PTR_ERR(fd); 763 + goto fail; 764 } 765 766 dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime)); ··· 775 jffs2_complete_reservation(c); 776 777 d_instantiate(dentry, inode); 778 + unlock_new_inode(inode); 779 return 0; 780 + 781 + fail: 782 + make_bad_inode(inode); 783 + unlock_new_inode(inode); 784 + iput(inode); 785 + return ret; 786 } 787 788 static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
+6 -1
fs/jffs2/fs.c
··· 465 inode->i_blocks = 0; 466 inode->i_size = 0; 467 468 - insert_inode_hash(inode); 469 470 return inode; 471 }
··· 465 inode->i_blocks = 0; 466 inode->i_size = 0; 467 468 + if (insert_inode_locked(inode) < 0) { 469 + make_bad_inode(inode); 470 + unlock_new_inode(inode); 471 + iput(inode); 472 + return ERR_PTR(-EINVAL); 473 + } 474 475 return inode; 476 }