diff options
| -rw-r--r-- | arch/powerpc/Makefile | 16 | ||||
| -rw-r--r-- | arch/powerpc/mm/hugetlbpage.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/platforms/iseries/iommu.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/platforms/pseries/iommu.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/dart.h | 2 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/u3_iommu.c | 4 | ||||
| -rw-r--r-- | drivers/video/fbmem.c | 6 | ||||
| -rw-r--r-- | fs/nfs/inode.c | 26 | ||||
| -rw-r--r-- | fs/nfs/nfs4proc.c | 6 | ||||
| -rw-r--r-- | fs/nfs/nfs4state.c | 20 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 13 | ||||
| -rw-r--r-- | fs/xfs/xfs_attr_leaf.c | 11 | ||||
| -rw-r--r-- | fs/xfs/xfs_fsops.c | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_iomap.h | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_log_priv.h | 36 | ||||
| -rw-r--r-- | fs/xfs/xfs_vnodeops.c | 5 | ||||
| -rw-r--r-- | include/asm-arm/arch-iop3xx/timex.h | 2 | ||||
| -rw-r--r-- | include/asm-powerpc/iommu.h | 2 | ||||
| -rw-r--r-- | include/asm-powerpc/page_64.h | 17 | ||||
| -rw-r--r-- | include/asm-powerpc/tce.h | 2 | ||||
| -rw-r--r-- | net/sunrpc/rpc_pipe.c | 26 |
21 files changed, 106 insertions, 98 deletions
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 98f67c78d1bd..a13eb575f834 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile | |||
| @@ -61,15 +61,17 @@ endif | |||
| 61 | LDFLAGS_vmlinux := -Bstatic | 61 | LDFLAGS_vmlinux := -Bstatic |
| 62 | 62 | ||
| 63 | # The -Iarch/$(ARCH)/include is temporary while we are merging | 63 | # The -Iarch/$(ARCH)/include is temporary while we are merging |
| 64 | CPPFLAGS += -Iarch/$(ARCH) -Iarch/$(ARCH)/include | 64 | CPPFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) -Iarch/$(ARCH)/include |
| 65 | AFLAGS += -Iarch/$(ARCH) | 65 | AFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) |
| 66 | CFLAGS += -Iarch/$(ARCH) -msoft-float -pipe | ||
| 67 | CFLAGS-$(CONFIG_PPC64) := -mminimal-toc -mtraceback=none -mcall-aixdesc | 66 | CFLAGS-$(CONFIG_PPC64) := -mminimal-toc -mtraceback=none -mcall-aixdesc |
| 68 | CFLAGS-$(CONFIG_PPC32) := -ffixed-r2 -mmultiple | 67 | CFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) -ffixed-r2 -mmultiple |
| 69 | CFLAGS += $(CFLAGS-y) | 68 | CPPFLAGS += $(CPPFLAGS-y) |
| 69 | AFLAGS += $(AFLAGS-y) | ||
| 70 | CFLAGS += -msoft-float -pipe $(CFLAGS-y) | ||
| 70 | CPP = $(CC) -E $(CFLAGS) | 71 | CPP = $(CC) -E $(CFLAGS) |
| 71 | # Temporary hack until we have migrated to asm-powerpc | 72 | # Temporary hack until we have migrated to asm-powerpc |
| 72 | LINUXINCLUDE += -Iarch/$(ARCH)/include | 73 | LINUXINCLUDE-$(CONFIG_PPC32) := -Iarch/$(ARCH)/include |
| 74 | LINUXINCLUDE += $(LINUXINCLUDE-y) | ||
| 73 | 75 | ||
| 74 | CHECKFLAGS += -m$(SZ) -D__powerpc__ -D__powerpc$(SZ)__ | 76 | CHECKFLAGS += -m$(SZ) -D__powerpc__ -D__powerpc$(SZ)__ |
| 75 | 77 | ||
| @@ -173,11 +175,13 @@ archclean: | |||
| 173 | 175 | ||
| 174 | archprepare: checkbin | 176 | archprepare: checkbin |
| 175 | 177 | ||
| 178 | ifeq ($(CONFIG_PPC32),y) | ||
| 176 | # Temporary hack until we have migrated to asm-powerpc | 179 | # Temporary hack until we have migrated to asm-powerpc |
| 177 | include/asm: arch/$(ARCH)/include/asm | 180 | include/asm: arch/$(ARCH)/include/asm |
| 178 | arch/$(ARCH)/include/asm: FORCE | 181 | arch/$(ARCH)/include/asm: FORCE |
| 179 | $(Q)if [ ! -d arch/$(ARCH)/include ]; then mkdir -p arch/$(ARCH)/include; fi | 182 | $(Q)if [ ! -d arch/$(ARCH)/include ]; then mkdir -p arch/$(ARCH)/include; fi |
| 180 | $(Q)ln -fsn $(srctree)/include/asm-$(OLDARCH) arch/$(ARCH)/include/asm | 183 | $(Q)ln -fsn $(srctree)/include/asm-$(OLDARCH) arch/$(ARCH)/include/asm |
| 184 | endif | ||
| 181 | 185 | ||
| 182 | # Use the file '.tmp_gas_check' for binutils tests, as gas won't output | 186 | # Use the file '.tmp_gas_check' for binutils tests, as gas won't output |
| 183 | # to stdout and these checks are run even on install targets. | 187 | # to stdout and these checks are run even on install targets. |
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c index f867bba893ca..6bc9dbad7dea 100644 --- a/arch/powerpc/mm/hugetlbpage.c +++ b/arch/powerpc/mm/hugetlbpage.c | |||
| @@ -295,7 +295,7 @@ int prepare_hugepage_range(unsigned long addr, unsigned long len) | |||
| 295 | if (addr < 0x100000000UL) | 295 | if (addr < 0x100000000UL) |
| 296 | err = open_low_hpage_areas(current->mm, | 296 | err = open_low_hpage_areas(current->mm, |
| 297 | LOW_ESID_MASK(addr, len)); | 297 | LOW_ESID_MASK(addr, len)); |
| 298 | if ((addr + len) >= 0x100000000UL) | 298 | if ((addr + len) > 0x100000000UL) |
| 299 | err = open_high_hpage_areas(current->mm, | 299 | err = open_high_hpage_areas(current->mm, |
| 300 | HTLB_AREA_MASK(addr, len)); | 300 | HTLB_AREA_MASK(addr, len)); |
| 301 | if (err) { | 301 | if (err) { |
diff --git a/arch/powerpc/platforms/iseries/iommu.c b/arch/powerpc/platforms/iseries/iommu.c index bf081b345820..2b54eeb2c899 100644 --- a/arch/powerpc/platforms/iseries/iommu.c +++ b/arch/powerpc/platforms/iseries/iommu.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | * Rewrite, cleanup: | 4 | * Rewrite, cleanup: |
| 5 | * | 5 | * |
| 6 | * Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation | 6 | * Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation |
| 7 | * | 7 | * |
| 8 | * Dynamic DMA mapping support, iSeries-specific parts. | 8 | * Dynamic DMA mapping support, iSeries-specific parts. |
| 9 | * | 9 | * |
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c index 97ba5214417f..c78f2b290a73 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | * | 5 | * |
| 6 | * Rewrite, cleanup: | 6 | * Rewrite, cleanup: |
| 7 | * | 7 | * |
| 8 | * Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation | 8 | * Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation |
| 9 | * | 9 | * |
| 10 | * Dynamic DMA mapping support, pSeries-specific parts, both SMP and LPAR. | 10 | * Dynamic DMA mapping support, pSeries-specific parts, both SMP and LPAR. |
| 11 | * | 11 | * |
diff --git a/arch/powerpc/sysdev/dart.h b/arch/powerpc/sysdev/dart.h index ea8f0d9eed8a..33ed9ed7fc1e 100644 --- a/arch/powerpc/sysdev/dart.h +++ b/arch/powerpc/sysdev/dart.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation | 2 | * Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation |
| 3 | * | 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify | 4 | * This program is free software; you can redistribute it and/or modify |
| 5 | * it under the terms of the GNU General Public License as published by | 5 | * it under the terms of the GNU General Public License as published by |
diff --git a/arch/powerpc/sysdev/u3_iommu.c b/arch/powerpc/sysdev/u3_iommu.c index f32baf7f4693..5c1a26a6d00c 100644 --- a/arch/powerpc/sysdev/u3_iommu.c +++ b/arch/powerpc/sysdev/u3_iommu.c | |||
| @@ -1,11 +1,11 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * arch/powerpc/sysdev/u3_iommu.c | 2 | * arch/powerpc/sysdev/u3_iommu.c |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation | 4 | * Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation |
| 5 | * | 5 | * |
| 6 | * Based on pSeries_iommu.c: | 6 | * Based on pSeries_iommu.c: |
| 7 | * Copyright (C) 2001 Mike Corrigan & Dave Engebretsen, IBM Corporation | 7 | * Copyright (C) 2001 Mike Corrigan & Dave Engebretsen, IBM Corporation |
| 8 | * Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation | 8 | * Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation |
| 9 | * | 9 | * |
| 10 | * Dynamic DMA mapping support, Apple U3 & IBM CPC925 "DART" iommu. | 10 | * Dynamic DMA mapping support, Apple U3 & IBM CPC925 "DART" iommu. |
| 11 | * | 11 | * |
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index 9f180096c896..6240aedb4154 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c | |||
| @@ -452,13 +452,17 @@ int fb_prepare_logo(struct fb_info *info, int rotate) | |||
| 452 | 452 | ||
| 453 | /* Return if no suitable logo was found */ | 453 | /* Return if no suitable logo was found */ |
| 454 | fb_logo.logo = fb_find_logo(depth); | 454 | fb_logo.logo = fb_find_logo(depth); |
| 455 | |||
| 456 | if (!fb_logo.logo) { | ||
| 457 | return 0; | ||
| 458 | } | ||
| 455 | 459 | ||
| 456 | if (rotate == FB_ROTATE_UR || rotate == FB_ROTATE_UD) | 460 | if (rotate == FB_ROTATE_UR || rotate == FB_ROTATE_UD) |
| 457 | yres = info->var.yres; | 461 | yres = info->var.yres; |
| 458 | else | 462 | else |
| 459 | yres = info->var.xres; | 463 | yres = info->var.xres; |
| 460 | 464 | ||
| 461 | if (fb_logo.logo && fb_logo.logo->height > yres) { | 465 | if (fb_logo.logo->height > yres) { |
| 462 | fb_logo.logo = NULL; | 466 | fb_logo.logo = NULL; |
| 463 | return 0; | 467 | return 0; |
| 464 | } | 468 | } |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 6391d8964214..aaab1a5ac461 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
| @@ -643,14 +643,11 @@ static int nfs_show_options(struct seq_file *m, struct vfsmount *mnt) | |||
| 643 | /* | 643 | /* |
| 644 | * Invalidate the local caches | 644 | * Invalidate the local caches |
| 645 | */ | 645 | */ |
| 646 | void | 646 | static void nfs_zap_caches_locked(struct inode *inode) |
| 647 | nfs_zap_caches(struct inode *inode) | ||
| 648 | { | 647 | { |
| 649 | struct nfs_inode *nfsi = NFS_I(inode); | 648 | struct nfs_inode *nfsi = NFS_I(inode); |
| 650 | int mode = inode->i_mode; | 649 | int mode = inode->i_mode; |
| 651 | 650 | ||
| 652 | spin_lock(&inode->i_lock); | ||
| 653 | |||
| 654 | NFS_ATTRTIMEO(inode) = NFS_MINATTRTIMEO(inode); | 651 | NFS_ATTRTIMEO(inode) = NFS_MINATTRTIMEO(inode); |
| 655 | NFS_ATTRTIMEO_UPDATE(inode) = jiffies; | 652 | NFS_ATTRTIMEO_UPDATE(inode) = jiffies; |
| 656 | 653 | ||
| @@ -659,7 +656,12 @@ nfs_zap_caches(struct inode *inode) | |||
| 659 | nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; | 656 | nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; |
| 660 | else | 657 | else |
| 661 | nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; | 658 | nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE; |
| 659 | } | ||
| 662 | 660 | ||
| 661 | void nfs_zap_caches(struct inode *inode) | ||
| 662 | { | ||
| 663 | spin_lock(&inode->i_lock); | ||
| 664 | nfs_zap_caches_locked(inode); | ||
| 663 | spin_unlock(&inode->i_lock); | 665 | spin_unlock(&inode->i_lock); |
| 664 | } | 666 | } |
| 665 | 667 | ||
| @@ -676,16 +678,13 @@ static void nfs_zap_acl_cache(struct inode *inode) | |||
| 676 | } | 678 | } |
| 677 | 679 | ||
| 678 | /* | 680 | /* |
| 679 | * Invalidate, but do not unhash, the inode | 681 | * Invalidate, but do not unhash, the inode. |
| 682 | * NB: must be called with inode->i_lock held! | ||
| 680 | */ | 683 | */ |
| 681 | static void | 684 | static void nfs_invalidate_inode(struct inode *inode) |
| 682 | nfs_invalidate_inode(struct inode *inode) | ||
| 683 | { | 685 | { |
| 684 | umode_t save_mode = inode->i_mode; | 686 | set_bit(NFS_INO_STALE, &NFS_FLAGS(inode)); |
| 685 | 687 | nfs_zap_caches_locked(inode); | |
| 686 | make_bad_inode(inode); | ||
| 687 | inode->i_mode = save_mode; | ||
| 688 | nfs_zap_caches(inode); | ||
| 689 | } | 688 | } |
| 690 | 689 | ||
| 691 | struct nfs_find_desc { | 690 | struct nfs_find_desc { |
| @@ -1528,14 +1527,13 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr, unsign | |||
| 1528 | printk(KERN_DEBUG "%s: inode %ld mode changed, %07o to %07o\n", | 1527 | printk(KERN_DEBUG "%s: inode %ld mode changed, %07o to %07o\n", |
| 1529 | __FUNCTION__, inode->i_ino, inode->i_mode, fattr->mode); | 1528 | __FUNCTION__, inode->i_ino, inode->i_mode, fattr->mode); |
| 1530 | #endif | 1529 | #endif |
| 1530 | out_err: | ||
| 1531 | /* | 1531 | /* |
| 1532 | * No need to worry about unhashing the dentry, as the | 1532 | * No need to worry about unhashing the dentry, as the |
| 1533 | * lookup validation will know that the inode is bad. | 1533 | * lookup validation will know that the inode is bad. |
| 1534 | * (But we fall through to invalidate the caches.) | 1534 | * (But we fall through to invalidate the caches.) |
| 1535 | */ | 1535 | */ |
| 1536 | nfs_invalidate_inode(inode); | 1536 | nfs_invalidate_inode(inode); |
| 1537 | out_err: | ||
| 1538 | set_bit(NFS_INO_STALE, &NFS_FLAGS(inode)); | ||
| 1539 | return -ESTALE; | 1537 | return -ESTALE; |
| 1540 | } | 1538 | } |
| 1541 | 1539 | ||
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 21482b2518f6..60e0dd800cc3 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
| @@ -3071,15 +3071,15 @@ static int _nfs4_proc_setlk(struct nfs4_state *state, int cmd, struct file_lock | |||
| 3071 | struct nfs4_client *clp = state->owner->so_client; | 3071 | struct nfs4_client *clp = state->owner->so_client; |
| 3072 | int status; | 3072 | int status; |
| 3073 | 3073 | ||
| 3074 | down_read(&clp->cl_sem); | ||
| 3075 | /* Is this a delegated open? */ | 3074 | /* Is this a delegated open? */ |
| 3076 | if (test_bit(NFS_DELEGATED_STATE, &state->flags)) { | 3075 | if (NFS_I(state->inode)->delegation_state != 0) { |
| 3077 | /* Yes: cache locks! */ | 3076 | /* Yes: cache locks! */ |
| 3078 | status = do_vfs_lock(request->fl_file, request); | 3077 | status = do_vfs_lock(request->fl_file, request); |
| 3079 | /* ...but avoid races with delegation recall... */ | 3078 | /* ...but avoid races with delegation recall... */ |
| 3080 | if (status < 0 || test_bit(NFS_DELEGATED_STATE, &state->flags)) | 3079 | if (status < 0 || test_bit(NFS_DELEGATED_STATE, &state->flags)) |
| 3081 | goto out; | 3080 | return status; |
| 3082 | } | 3081 | } |
| 3082 | down_read(&clp->cl_sem); | ||
| 3083 | status = nfs4_set_lock_state(state, request); | 3083 | status = nfs4_set_lock_state(state, request); |
| 3084 | if (status != 0) | 3084 | if (status != 0) |
| 3085 | goto out; | 3085 | goto out; |
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 0675f3215e0a..5ef4c57618fe 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c | |||
| @@ -644,12 +644,15 @@ void nfs4_copy_stateid(nfs4_stateid *dst, struct nfs4_state *state, fl_owner_t f | |||
| 644 | 644 | ||
| 645 | struct nfs_seqid *nfs_alloc_seqid(struct nfs_seqid_counter *counter) | 645 | struct nfs_seqid *nfs_alloc_seqid(struct nfs_seqid_counter *counter) |
| 646 | { | 646 | { |
| 647 | struct rpc_sequence *sequence = counter->sequence; | ||
| 647 | struct nfs_seqid *new; | 648 | struct nfs_seqid *new; |
| 648 | 649 | ||
| 649 | new = kmalloc(sizeof(*new), GFP_KERNEL); | 650 | new = kmalloc(sizeof(*new), GFP_KERNEL); |
| 650 | if (new != NULL) { | 651 | if (new != NULL) { |
| 651 | new->sequence = counter; | 652 | new->sequence = counter; |
| 652 | INIT_LIST_HEAD(&new->list); | 653 | spin_lock(&sequence->lock); |
| 654 | list_add_tail(&new->list, &sequence->list); | ||
| 655 | spin_unlock(&sequence->lock); | ||
| 653 | } | 656 | } |
| 654 | return new; | 657 | return new; |
| 655 | } | 658 | } |
| @@ -658,12 +661,10 @@ void nfs_free_seqid(struct nfs_seqid *seqid) | |||
| 658 | { | 661 | { |
| 659 | struct rpc_sequence *sequence = seqid->sequence->sequence; | 662 | struct rpc_sequence *sequence = seqid->sequence->sequence; |
| 660 | 663 | ||
| 661 | if (!list_empty(&seqid->list)) { | 664 | spin_lock(&sequence->lock); |
| 662 | spin_lock(&sequence->lock); | 665 | list_del(&seqid->list); |
| 663 | list_del(&seqid->list); | 666 | spin_unlock(&sequence->lock); |
| 664 | spin_unlock(&sequence->lock); | 667 | rpc_wake_up(&sequence->wait); |
| 665 | } | ||
| 666 | rpc_wake_up_next(&sequence->wait); | ||
| 667 | kfree(seqid); | 668 | kfree(seqid); |
| 668 | } | 669 | } |
| 669 | 670 | ||
| @@ -722,11 +723,10 @@ int nfs_wait_on_sequence(struct nfs_seqid *seqid, struct rpc_task *task) | |||
| 722 | if (sequence->list.next == &seqid->list) | 723 | if (sequence->list.next == &seqid->list) |
| 723 | goto out; | 724 | goto out; |
| 724 | spin_lock(&sequence->lock); | 725 | spin_lock(&sequence->lock); |
| 725 | if (!list_empty(&sequence->list)) { | 726 | if (sequence->list.next != &seqid->list) { |
| 726 | rpc_sleep_on(&sequence->wait, task, NULL, NULL); | 727 | rpc_sleep_on(&sequence->wait, task, NULL, NULL); |
| 727 | status = -EAGAIN; | 728 | status = -EAGAIN; |
| 728 | } else | 729 | } |
| 729 | list_add(&seqid->list, &sequence->list); | ||
| 730 | spin_unlock(&sequence->lock); | 730 | spin_unlock(&sequence->lock); |
| 731 | out: | 731 | out: |
| 732 | return status; | 732 | return status; |
diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index c6108971b4e6..94d3cdfbf9b8 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c | |||
| @@ -941,13 +941,12 @@ __linvfs_get_block( | |||
| 941 | int retpbbm = 1; | 941 | int retpbbm = 1; |
| 942 | int error; | 942 | int error; |
| 943 | 943 | ||
| 944 | if (blocks) { | ||
| 945 | offset = blocks << inode->i_blkbits; /* 64 bit goodness */ | ||
| 946 | size = (ssize_t) min_t(xfs_off_t, offset, LONG_MAX); | ||
| 947 | } else { | ||
| 948 | size = 1 << inode->i_blkbits; | ||
| 949 | } | ||
| 950 | offset = (xfs_off_t)iblock << inode->i_blkbits; | 944 | offset = (xfs_off_t)iblock << inode->i_blkbits; |
| 945 | if (blocks) | ||
| 946 | size = (ssize_t) min_t(xfs_off_t, LONG_MAX, | ||
| 947 | (xfs_off_t)blocks << inode->i_blkbits); | ||
| 948 | else | ||
| 949 | size = 1 << inode->i_blkbits; | ||
| 951 | 950 | ||
| 952 | VOP_BMAP(vp, offset, size, | 951 | VOP_BMAP(vp, offset, size, |
| 953 | create ? flags : BMAPI_READ, &iomap, &retpbbm, error); | 952 | create ? flags : BMAPI_READ, &iomap, &retpbbm, error); |
| @@ -1007,7 +1006,7 @@ __linvfs_get_block( | |||
| 1007 | ASSERT(iomap.iomap_bsize - iomap.iomap_delta > 0); | 1006 | ASSERT(iomap.iomap_bsize - iomap.iomap_delta > 0); |
| 1008 | offset = min_t(xfs_off_t, | 1007 | offset = min_t(xfs_off_t, |
| 1009 | iomap.iomap_bsize - iomap.iomap_delta, | 1008 | iomap.iomap_bsize - iomap.iomap_delta, |
| 1010 | blocks << inode->i_blkbits); | 1009 | (xfs_off_t)blocks << inode->i_blkbits); |
| 1011 | bh_result->b_size = (u32) min_t(xfs_off_t, UINT_MAX, offset); | 1010 | bh_result->b_size = (u32) min_t(xfs_off_t, UINT_MAX, offset); |
| 1012 | } | 1011 | } |
| 1013 | 1012 | ||
diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c index 35e557b00db2..1c7421840c18 100644 --- a/fs/xfs/xfs_attr_leaf.c +++ b/fs/xfs/xfs_attr_leaf.c | |||
| @@ -310,7 +310,8 @@ xfs_attr_shortform_remove(xfs_da_args_t *args) | |||
| 310 | * Fix up the start offset of the attribute fork | 310 | * Fix up the start offset of the attribute fork |
| 311 | */ | 311 | */ |
| 312 | totsize -= size; | 312 | totsize -= size; |
| 313 | if (totsize == sizeof(xfs_attr_sf_hdr_t) && !args->addname) { | 313 | if (totsize == sizeof(xfs_attr_sf_hdr_t) && !args->addname && |
| 314 | !(mp->m_flags & XFS_MOUNT_COMPAT_ATTR)) { | ||
| 314 | /* | 315 | /* |
| 315 | * Last attribute now removed, revert to original | 316 | * Last attribute now removed, revert to original |
| 316 | * inode format making all literal area available | 317 | * inode format making all literal area available |
| @@ -328,7 +329,8 @@ xfs_attr_shortform_remove(xfs_da_args_t *args) | |||
| 328 | xfs_idata_realloc(dp, -size, XFS_ATTR_FORK); | 329 | xfs_idata_realloc(dp, -size, XFS_ATTR_FORK); |
| 329 | dp->i_d.di_forkoff = xfs_attr_shortform_bytesfit(dp, totsize); | 330 | dp->i_d.di_forkoff = xfs_attr_shortform_bytesfit(dp, totsize); |
| 330 | ASSERT(dp->i_d.di_forkoff); | 331 | ASSERT(dp->i_d.di_forkoff); |
| 331 | ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) || args->addname); | 332 | ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) || args->addname || |
| 333 | (mp->m_flags & XFS_MOUNT_COMPAT_ATTR)); | ||
| 332 | dp->i_afp->if_ext_max = | 334 | dp->i_afp->if_ext_max = |
| 333 | XFS_IFORK_ASIZE(dp) / (uint)sizeof(xfs_bmbt_rec_t); | 335 | XFS_IFORK_ASIZE(dp) / (uint)sizeof(xfs_bmbt_rec_t); |
| 334 | dp->i_df.if_ext_max = | 336 | dp->i_df.if_ext_max = |
| @@ -737,7 +739,8 @@ xfs_attr_shortform_allfit(xfs_dabuf_t *bp, xfs_inode_t *dp) | |||
| 737 | + name_loc->namelen | 739 | + name_loc->namelen |
| 738 | + INT_GET(name_loc->valuelen, ARCH_CONVERT); | 740 | + INT_GET(name_loc->valuelen, ARCH_CONVERT); |
| 739 | } | 741 | } |
| 740 | if (bytes == sizeof(struct xfs_attr_sf_hdr)) | 742 | if (!(dp->i_mount->m_flags & XFS_MOUNT_COMPAT_ATTR) && |
| 743 | (bytes == sizeof(struct xfs_attr_sf_hdr))) | ||
| 741 | return(-1); | 744 | return(-1); |
| 742 | return(xfs_attr_shortform_bytesfit(dp, bytes)); | 745 | return(xfs_attr_shortform_bytesfit(dp, bytes)); |
| 743 | } | 746 | } |
| @@ -775,6 +778,8 @@ xfs_attr_leaf_to_shortform(xfs_dabuf_t *bp, xfs_da_args_t *args, int forkoff) | |||
| 775 | goto out; | 778 | goto out; |
| 776 | 779 | ||
| 777 | if (forkoff == -1) { | 780 | if (forkoff == -1) { |
| 781 | ASSERT(!(dp->i_mount->m_flags & XFS_MOUNT_COMPAT_ATTR)); | ||
| 782 | |||
| 778 | /* | 783 | /* |
| 779 | * Last attribute was removed, revert to original | 784 | * Last attribute was removed, revert to original |
| 780 | * inode format making all literal area available | 785 | * inode format making all literal area available |
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 7ceabd0e2d9d..d1236d6f4045 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c | |||
| @@ -550,7 +550,7 @@ xfs_fs_goingdown( | |||
| 550 | struct vfs *vfsp = XFS_MTOVFS(mp); | 550 | struct vfs *vfsp = XFS_MTOVFS(mp); |
| 551 | struct super_block *sb = freeze_bdev(vfsp->vfs_super->s_bdev); | 551 | struct super_block *sb = freeze_bdev(vfsp->vfs_super->s_bdev); |
| 552 | 552 | ||
| 553 | if (sb) { | 553 | if (sb && !IS_ERR(sb)) { |
| 554 | xfs_force_shutdown(mp, XFS_FORCE_UMOUNT); | 554 | xfs_force_shutdown(mp, XFS_FORCE_UMOUNT); |
| 555 | thaw_bdev(sb->s_bdev, sb); | 555 | thaw_bdev(sb->s_bdev, sb); |
| 556 | } | 556 | } |
diff --git a/fs/xfs/xfs_iomap.h b/fs/xfs/xfs_iomap.h index fcd6d63bb68b..3ce204a524b0 100644 --- a/fs/xfs/xfs_iomap.h +++ b/fs/xfs/xfs_iomap.h | |||
| @@ -69,7 +69,7 @@ typedef struct xfs_iomap { | |||
| 69 | xfs_buftarg_t *iomap_target; | 69 | xfs_buftarg_t *iomap_target; |
| 70 | xfs_off_t iomap_offset; /* offset of mapping, bytes */ | 70 | xfs_off_t iomap_offset; /* offset of mapping, bytes */ |
| 71 | xfs_off_t iomap_bsize; /* size of mapping, bytes */ | 71 | xfs_off_t iomap_bsize; /* size of mapping, bytes */ |
| 72 | size_t iomap_delta; /* offset into mapping, bytes */ | 72 | xfs_off_t iomap_delta; /* offset into mapping, bytes */ |
| 73 | iomap_flags_t iomap_flags; | 73 | iomap_flags_t iomap_flags; |
| 74 | } xfs_iomap_t; | 74 | } xfs_iomap_t; |
| 75 | 75 | ||
diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h index 8f285149681f..4518b188ade6 100644 --- a/fs/xfs/xfs_log_priv.h +++ b/fs/xfs/xfs_log_priv.h | |||
| @@ -494,10 +494,8 @@ typedef struct log { | |||
| 494 | 494 | ||
| 495 | #define XLOG_FORCED_SHUTDOWN(log) ((log)->l_flags & XLOG_IO_ERROR) | 495 | #define XLOG_FORCED_SHUTDOWN(log) ((log)->l_flags & XLOG_IO_ERROR) |
| 496 | 496 | ||
| 497 | #define XLOG_GRANT_SUB_SPACE(log,bytes,type) \ | 497 | #define XLOG_GRANT_SUB_SPACE(log,bytes,type) \ |
| 498 | xlog_grant_sub_space(log,bytes,type) | 498 | { \ |
| 499 | static inline void xlog_grant_sub_space(struct log *log, int bytes, int type) | ||
| 500 | { | ||
| 501 | if (type == 'w') { \ | 499 | if (type == 'w') { \ |
| 502 | (log)->l_grant_write_bytes -= (bytes); \ | 500 | (log)->l_grant_write_bytes -= (bytes); \ |
| 503 | if ((log)->l_grant_write_bytes < 0) { \ | 501 | if ((log)->l_grant_write_bytes < 0) { \ |
| @@ -511,13 +509,9 @@ static inline void xlog_grant_sub_space(struct log *log, int bytes, int type) | |||
| 511 | (log)->l_grant_reserve_cycle--; \ | 509 | (log)->l_grant_reserve_cycle--; \ |
| 512 | } \ | 510 | } \ |
| 513 | } \ | 511 | } \ |
| 514 | } | 512 | } |
| 515 | 513 | #define XLOG_GRANT_ADD_SPACE(log,bytes,type) \ | |
| 516 | #define XLOG_GRANT_ADD_SPACE(log,bytes,type) \ | 514 | { \ |
| 517 | xlog_grant_add_space(log,bytes,type) | ||
| 518 | static inline void | ||
| 519 | xlog_grant_add_space(struct log *log, int bytes, int type) | ||
| 520 | { | ||
| 521 | if (type == 'w') { \ | 515 | if (type == 'w') { \ |
| 522 | (log)->l_grant_write_bytes += (bytes); \ | 516 | (log)->l_grant_write_bytes += (bytes); \ |
| 523 | if ((log)->l_grant_write_bytes > (log)->l_logsize) { \ | 517 | if ((log)->l_grant_write_bytes > (log)->l_logsize) { \ |
| @@ -531,12 +525,9 @@ xlog_grant_add_space(struct log *log, int bytes, int type) | |||
| 531 | (log)->l_grant_reserve_cycle++; \ | 525 | (log)->l_grant_reserve_cycle++; \ |
| 532 | } \ | 526 | } \ |
| 533 | } \ | 527 | } \ |
| 534 | } | 528 | } |
| 535 | 529 | #define XLOG_INS_TICKETQ(q, tic) \ | |
| 536 | #define XLOG_INS_TICKETQ(q, tic) xlog_ins_ticketq(q, tic) | 530 | { \ |
| 537 | static inline void | ||
| 538 | xlog_ins_ticketq(struct xlog_ticket *q, struct xlog_ticket *tic) | ||
| 539 | { \ | ||
| 540 | if (q) { \ | 531 | if (q) { \ |
| 541 | (tic)->t_next = (q); \ | 532 | (tic)->t_next = (q); \ |
| 542 | (tic)->t_prev = (q)->t_prev; \ | 533 | (tic)->t_prev = (q)->t_prev; \ |
| @@ -547,12 +538,9 @@ xlog_ins_ticketq(struct xlog_ticket *q, struct xlog_ticket *tic) | |||
| 547 | (q) = (tic); \ | 538 | (q) = (tic); \ |
| 548 | } \ | 539 | } \ |
| 549 | (tic)->t_flags |= XLOG_TIC_IN_Q; \ | 540 | (tic)->t_flags |= XLOG_TIC_IN_Q; \ |
| 550 | } | 541 | } |
| 551 | 542 | #define XLOG_DEL_TICKETQ(q, tic) \ | |
| 552 | #define XLOG_DEL_TICKETQ(q, tic) xlog_del_ticketq(q, tic) | 543 | { \ |
| 553 | static inline void | ||
| 554 | xlog_del_ticketq(struct xlog_ticket *q, struct xlog_ticket *tic) | ||
| 555 | { \ | ||
| 556 | if ((tic) == (tic)->t_next) { \ | 544 | if ((tic) == (tic)->t_next) { \ |
| 557 | (q) = NULL; \ | 545 | (q) = NULL; \ |
| 558 | } else { \ | 546 | } else { \ |
| @@ -562,7 +550,7 @@ xlog_del_ticketq(struct xlog_ticket *q, struct xlog_ticket *tic) | |||
| 562 | } \ | 550 | } \ |
| 563 | (tic)->t_next = (tic)->t_prev = NULL; \ | 551 | (tic)->t_next = (tic)->t_prev = NULL; \ |
| 564 | (tic)->t_flags &= ~XLOG_TIC_IN_Q; \ | 552 | (tic)->t_flags &= ~XLOG_TIC_IN_Q; \ |
| 565 | } | 553 | } |
| 566 | 554 | ||
| 567 | /* common routines */ | 555 | /* common routines */ |
| 568 | extern xfs_lsn_t xlog_assign_tail_lsn(struct xfs_mount *mp); | 556 | extern xfs_lsn_t xlog_assign_tail_lsn(struct xfs_mount *mp); |
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 7c1f74531463..e03fa2a3d5ed 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
| @@ -3958,8 +3958,9 @@ xfs_finish_reclaim_all(xfs_mount_t *mp, int noblock) | |||
| 3958 | } | 3958 | } |
| 3959 | } | 3959 | } |
| 3960 | XFS_MOUNT_IUNLOCK(mp); | 3960 | XFS_MOUNT_IUNLOCK(mp); |
| 3961 | xfs_finish_reclaim(ip, noblock, | 3961 | if (xfs_finish_reclaim(ip, noblock, |
| 3962 | XFS_IFLUSH_DELWRI_ELSE_ASYNC); | 3962 | XFS_IFLUSH_DELWRI_ELSE_ASYNC)) |
| 3963 | delay(1); | ||
| 3963 | purged = 1; | 3964 | purged = 1; |
| 3964 | break; | 3965 | break; |
| 3965 | } | 3966 | } |
diff --git a/include/asm-arm/arch-iop3xx/timex.h b/include/asm-arm/arch-iop3xx/timex.h index d4187fe9a85a..472badb451c4 100644 --- a/include/asm-arm/arch-iop3xx/timex.h +++ b/include/asm-arm/arch-iop3xx/timex.h | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * IOP3xx architecture timex specifications | 4 | * IOP3xx architecture timex specifications |
| 5 | */ | 5 | */ |
| 6 | #include <linux/config.h> | 6 | #include <linux/config.h> |
| 7 | 7 | #include <asm/hardware.h> | |
| 8 | 8 | ||
| 9 | #if defined(CONFIG_ARCH_IQ80321) || defined(CONFIG_ARCH_IQ31244) | 9 | #if defined(CONFIG_ARCH_IQ80321) || defined(CONFIG_ARCH_IQ31244) |
| 10 | 10 | ||
diff --git a/include/asm-powerpc/iommu.h b/include/asm-powerpc/iommu.h index 6a35e6570ccd..f89f06050893 100644 --- a/include/asm-powerpc/iommu.h +++ b/include/asm-powerpc/iommu.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (C) 2001 Mike Corrigan & Dave Engebretsen, IBM Corporation | 2 | * Copyright (C) 2001 Mike Corrigan & Dave Engebretsen, IBM Corporation |
| 3 | * Rewrite, cleanup: | 3 | * Rewrite, cleanup: |
| 4 | * Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation | 4 | * Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/include/asm-powerpc/page_64.h b/include/asm-powerpc/page_64.h index 58a3dd9a79ec..6642c0125001 100644 --- a/include/asm-powerpc/page_64.h +++ b/include/asm-powerpc/page_64.h | |||
| @@ -103,8 +103,9 @@ extern unsigned int HPAGE_SHIFT; | |||
| 103 | #define HTLB_AREA_SIZE (1UL << HTLB_AREA_SHIFT) | 103 | #define HTLB_AREA_SIZE (1UL << HTLB_AREA_SHIFT) |
| 104 | #define GET_HTLB_AREA(x) ((x) >> HTLB_AREA_SHIFT) | 104 | #define GET_HTLB_AREA(x) ((x) >> HTLB_AREA_SHIFT) |
| 105 | 105 | ||
| 106 | #define LOW_ESID_MASK(addr, len) (((1U << (GET_ESID(addr+len-1)+1)) \ | 106 | #define LOW_ESID_MASK(addr, len) \ |
| 107 | - (1U << GET_ESID(addr))) & 0xffff) | 107 | (((1U << (GET_ESID(min((addr)+(len)-1, 0x100000000UL))+1)) \ |
| 108 | - (1U << GET_ESID(min((addr), 0x100000000UL)))) & 0xffff) | ||
| 108 | #define HTLB_AREA_MASK(addr, len) (((1U << (GET_HTLB_AREA(addr+len-1)+1)) \ | 109 | #define HTLB_AREA_MASK(addr, len) (((1U << (GET_HTLB_AREA(addr+len-1)+1)) \ |
| 109 | - (1U << GET_HTLB_AREA(addr))) & 0xffff) | 110 | - (1U << GET_HTLB_AREA(addr))) & 0xffff) |
| 110 | 111 | ||
| @@ -113,17 +114,21 @@ extern unsigned int HPAGE_SHIFT; | |||
| 113 | #define ARCH_HAS_SETCLEAR_HUGE_PTE | 114 | #define ARCH_HAS_SETCLEAR_HUGE_PTE |
| 114 | 115 | ||
| 115 | #define touches_hugepage_low_range(mm, addr, len) \ | 116 | #define touches_hugepage_low_range(mm, addr, len) \ |
| 116 | (LOW_ESID_MASK((addr), (len)) & (mm)->context.low_htlb_areas) | 117 | (((addr) < 0x100000000UL) \ |
| 118 | && (LOW_ESID_MASK((addr), (len)) & (mm)->context.low_htlb_areas)) | ||
| 117 | #define touches_hugepage_high_range(mm, addr, len) \ | 119 | #define touches_hugepage_high_range(mm, addr, len) \ |
| 118 | (HTLB_AREA_MASK((addr), (len)) & (mm)->context.high_htlb_areas) | 120 | ((((addr) + (len)) > 0x100000000UL) \ |
| 121 | && (HTLB_AREA_MASK((addr), (len)) & (mm)->context.high_htlb_areas)) | ||
| 119 | 122 | ||
| 120 | #define __within_hugepage_low_range(addr, len, segmask) \ | 123 | #define __within_hugepage_low_range(addr, len, segmask) \ |
| 121 | ((LOW_ESID_MASK((addr), (len)) | (segmask)) == (segmask)) | 124 | ( (((addr)+(len)) <= 0x100000000UL) \ |
| 125 | && ((LOW_ESID_MASK((addr), (len)) | (segmask)) == (segmask))) | ||
| 122 | #define within_hugepage_low_range(addr, len) \ | 126 | #define within_hugepage_low_range(addr, len) \ |
| 123 | __within_hugepage_low_range((addr), (len), \ | 127 | __within_hugepage_low_range((addr), (len), \ |
| 124 | current->mm->context.low_htlb_areas) | 128 | current->mm->context.low_htlb_areas) |
| 125 | #define __within_hugepage_high_range(addr, len, zonemask) \ | 129 | #define __within_hugepage_high_range(addr, len, zonemask) \ |
| 126 | ((HTLB_AREA_MASK((addr), (len)) | (zonemask)) == (zonemask)) | 130 | ( ((addr) >= 0x100000000UL) \ |
| 131 | && ((HTLB_AREA_MASK((addr), (len)) | (zonemask)) == (zonemask))) | ||
| 127 | #define within_hugepage_high_range(addr, len) \ | 132 | #define within_hugepage_high_range(addr, len) \ |
| 128 | __within_hugepage_high_range((addr), (len), \ | 133 | __within_hugepage_high_range((addr), (len), \ |
| 129 | current->mm->context.high_htlb_areas) | 134 | current->mm->context.high_htlb_areas) |
diff --git a/include/asm-powerpc/tce.h b/include/asm-powerpc/tce.h index d099d5200f9b..980a094fd5a7 100644 --- a/include/asm-powerpc/tce.h +++ b/include/asm-powerpc/tce.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (C) 2001 Mike Corrigan & Dave Engebretsen, IBM Corporation | 2 | * Copyright (C) 2001 Mike Corrigan & Dave Engebretsen, IBM Corporation |
| 3 | * Rewrite, cleanup: | 3 | * Rewrite, cleanup: |
| 4 | * Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation | 4 | * Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index 81e00a6c19de..e3b242daf53c 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c | |||
| @@ -39,23 +39,27 @@ static kmem_cache_t *rpc_inode_cachep __read_mostly; | |||
| 39 | #define RPC_UPCALL_TIMEOUT (30*HZ) | 39 | #define RPC_UPCALL_TIMEOUT (30*HZ) |
| 40 | 40 | ||
| 41 | static void | 41 | static void |
| 42 | __rpc_purge_upcall(struct inode *inode, int err) | 42 | __rpc_purge_list(struct rpc_inode *rpci, struct list_head *head, int err) |
| 43 | { | 43 | { |
| 44 | struct rpc_inode *rpci = RPC_I(inode); | ||
| 45 | struct rpc_pipe_msg *msg; | 44 | struct rpc_pipe_msg *msg; |
| 45 | void (*destroy_msg)(struct rpc_pipe_msg *); | ||
| 46 | 46 | ||
| 47 | while (!list_empty(&rpci->pipe)) { | 47 | destroy_msg = rpci->ops->destroy_msg; |
| 48 | msg = list_entry(rpci->pipe.next, struct rpc_pipe_msg, list); | 48 | while (!list_empty(head)) { |
| 49 | msg = list_entry(head->next, struct rpc_pipe_msg, list); | ||
| 49 | list_del_init(&msg->list); | 50 | list_del_init(&msg->list); |
| 50 | msg->errno = err; | 51 | msg->errno = err; |
| 51 | rpci->ops->destroy_msg(msg); | 52 | destroy_msg(msg); |
| 52 | } | ||
| 53 | while (!list_empty(&rpci->in_upcall)) { | ||
| 54 | msg = list_entry(rpci->pipe.next, struct rpc_pipe_msg, list); | ||
| 55 | list_del_init(&msg->list); | ||
| 56 | msg->errno = err; | ||
| 57 | rpci->ops->destroy_msg(msg); | ||
| 58 | } | 53 | } |
| 54 | } | ||
| 55 | |||
| 56 | static void | ||
| 57 | __rpc_purge_upcall(struct inode *inode, int err) | ||
| 58 | { | ||
| 59 | struct rpc_inode *rpci = RPC_I(inode); | ||
| 60 | |||
| 61 | __rpc_purge_list(rpci, &rpci->pipe, err); | ||
| 62 | __rpc_purge_list(rpci, &rpci->in_upcall, err); | ||
| 59 | rpci->pipelen = 0; | 63 | rpci->pipelen = 0; |
| 60 | wake_up(&rpci->waitq); | 64 | wake_up(&rpci->waitq); |
| 61 | } | 65 | } |
