--- zzzz-none-000/linux-2.6.39.4/fs/block_dev.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-atom-6490-729/linux-2.6.39.4/fs/block_dev.c 2021-11-10 13:38:17.000000000 +0000 @@ -3,7 +3,10 @@ * * Copyright (C) 1991, 1992 Linus Torvalds * Copyright (C) 2001 Andrea Arcangeli SuSE - */ + ****************************************************************** + * Includes Intel Corporation's changes/modifications dated: 07/2011. + * Changed/modified portions - Copyright(c) 2011, Intel Corporation. + *******************************************************************/ #include #include @@ -1086,14 +1089,22 @@ /* * hooks: /n/, see "layering violations". */ +#ifdef CONFIG_ARCH_GEN3 if (!for_part) { ret = devcgroup_inode_permission(bdev->bd_inode, perm); if (ret != 0) { bdput(bdev); return ret; } + } +#else + ret = devcgroup_inode_permission(bdev->bd_inode, perm); + if (ret != 0) { + bdput(bdev); + return ret; } +#endif restart: ret = -ENXIO; @@ -1147,8 +1158,12 @@ * The latter is necessary to prevent ghost * partitions on a removed medium. */ - if (bdev->bd_invalidated && (!ret || ret == -ENOMEDIUM)) - rescan_partitions(disk, bdev); + if (bdev->bd_invalidated) { + if (!ret) + rescan_partitions(disk, bdev); + else if (ret == -ENOMEDIUM) + invalidate_partitions(disk, bdev); + } if (ret) goto out_clear; } else { @@ -1178,8 +1193,12 @@ if (bdev->bd_disk->fops->open) ret = bdev->bd_disk->fops->open(bdev, mode); /* the same as first opener case, read comment there */ - if (bdev->bd_invalidated && (!ret || ret == -ENOMEDIUM)) - rescan_partitions(bdev->bd_disk, bdev); + if (bdev->bd_invalidated) { + if (!ret) + rescan_partitions(bdev->bd_disk, bdev); + else if (ret == -ENOMEDIUM) + invalidate_partitions(bdev->bd_disk, bdev); + } if (ret) goto out_unlock_bdev; }