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