[Oracleasm-commits] jlbec commits r304 - in branches/extended: .
kernel tools vendor/redhat vendor/suse
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Wed Jun 1 21:53:18 CDT 2005
Author: jlbec
Date: 2005-06-01 21:53:16 -0500 (Wed, 01 Jun 2005)
New Revision: 304
Modified:
branches/extended/configure.in
branches/extended/kernel/oracleasm.c
branches/extended/tools/asmtool.c
branches/extended/vendor/redhat/oracleasm-2.6.9-EL.spec-generic.in
branches/extended/vendor/suse/oracleasm-2.6.5.spec-generic.in
Log:
o Merge r283:303 from trunk:
- [285] Add backing dev stuff.
- [286] Remove unused unlink code.
- [288] Allow non-partitions in mark-only.
- [289] Check ISBLK before dereferencing I_BDEV().
- [290] Fix igrab() deadlock.
- [291] Version 2.0.
- [292] No smp kernel on ia64.
- [293] support_ver to 2.0.
- [294] Properly depmod.
- [295] SLES support_ver.
Modified: branches/extended/configure.in
===================================================================
--- branches/extended/configure.in 2005-05-17 23:13:44 UTC (rev 303)
+++ branches/extended/configure.in 2005-06-02 02:53:16 UTC (rev 304)
@@ -15,9 +15,9 @@
# If backwards compatibility has been broken, set BINARY_AGE and
# INTEFACE_AGE to 0.
#
-MAJOR_VERSION=1
+MAJOR_VERSION=2
MINOR_VERSION=0
-MICRO_VERSION=95
+MICRO_VERSION=0
INTERFACE_AGE=0
BINARY_AGE=0
VERSION="${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}"
Modified: branches/extended/kernel/oracleasm.c
===================================================================
--- branches/extended/kernel/oracleasm.c 2005-05-17 23:13:44 UTC (rev 303)
+++ branches/extended/kernel/oracleasm.c 2005-06-02 02:53:16 UTC (rev 304)
@@ -66,6 +66,7 @@
#include <linux/mount.h>
#include <linux/smp_lock.h>
#include <linux/parser.h>
+#include <linux/backing-dev.h>
#include <asm/uaccess.h>
#include <linux/spinlock.h>
@@ -318,7 +319,16 @@
#endif
};
+static struct backing_dev_info memory_backing_dev_info = {
+ .ra_pages = 0, /* No readahead */
+#if 1
+ .memory_backed = 1, /* Does not contribute to dirty memory */
+#else
+ .capabilities = BDI_CAP_NO_ACCT_DIRTY | BDI_CAP_NO_WRITEBACK,
+#endif
+};
+
static struct inode *asmdisk_alloc_inode(struct super_block *sb)
{
struct asm_disk_info *d = kmem_cache_alloc(asmdisk_cachep, SLAB_KERNEL);
@@ -596,6 +606,7 @@
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
inode->i_op = &asmfs_file_inode_operations;
inode->i_fop = &asmfs_file_operations;
+ inode->i_mapping->backing_dev_info = &memory_backing_dev_info;
d_instantiate(dentry, inode);
@@ -605,61 +616,6 @@
return 0;
}
-
-static inline int asmfs_positive(struct dentry *dentry)
-{
- return dentry->d_inode && !d_unhashed(dentry);
-}
-
-/*
- * Check that a directory is empty (this works
- * for regular files too, they'll just always be
- * considered empty..).
- *
- * Note that an empty directory can still have
- * children, they just all have to be negative..
- */
-static int asmfs_empty(struct dentry *dentry)
-{
- struct list_head *list;
-
- spin_lock_irq(&dcache_lock);
- list = dentry->d_subdirs.next;
-
- while (list != &dentry->d_subdirs) {
- struct dentry *de = list_entry(list, struct dentry, d_child);
-
- if (asmfs_positive(de)) {
- spin_unlock_irq(&dcache_lock);
- return 0;
- }
- list = list->next;
- }
- spin_unlock_irq(&dcache_lock);
- return 1;
-}
-
-/*
- * This works for both directories and regular files.
- * (non-directories will always have empty subdirs)
- */
-static int asmfs_unlink(struct inode * dir, struct dentry *dentry)
-{
- int retval = -ENOTEMPTY;
-
- if (asmfs_empty(dentry)) {
- struct inode *inode = dentry->d_inode;
-
- inode->i_nlink--;
- dput(dentry); /* Undo the count from "create" - this does all the work */
-
- retval = 0;
- }
- return retval;
-}
-
-#define asmfs_rmdir asmfs_unlink
-
static void asmfs_put_super(struct super_block *sb)
{
kfree(ASMFS_SB(sb));
@@ -846,6 +802,8 @@
if (d->d_live)
BUG();
+ disk_inode->i_mapping->backing_dev_info =
+ &memory_backing_dev_info;
d->d_bdev = bdev;
d->d_interface = asm_disk_get_interface(bdev);
d->d_max_sectors = compute_max_sectors(bdev);
@@ -1030,21 +988,22 @@
}
/* Must be called with asm_file_info->f_lock held */
-static struct asm_disk_info *find_io_disk(struct file *file)
+static struct block_device *find_io_bdev(struct file *file)
{
struct asmfs_file_info *afi = ASMFS_FILE(file);
struct asm_request *r;
- struct asm_disk_info *d = NULL;
+ struct asm_disk_info *d;
+ struct block_device *bdev = NULL;
list_for_each_entry(r, &afi->f_ios, r_list) {
d = r->r_disk;
- if (d) {
- igrab(&d->vfs_inode);
+ if (d && d->d_bdev) {
+ bdev = d->d_bdev;
break;
}
}
- return d;
+ return bdev;
}
static int asm_update_user_ioc(struct asm_request *r)
@@ -1509,6 +1468,8 @@
add_wait_queue(&to->wait, &to_wait);
do {
struct asm_disk_info *d;
+ struct block_device *bdev = NULL;
+ struct inode *disk_inode;
ret = 0;
set_task_state(tsk, TASK_INTERRUPTIBLE);
@@ -1518,11 +1479,16 @@
ASM_BUSY | ASM_ERROR))
break;
d = r->r_disk;
- if (d)
- igrab(&d->vfs_inode);
+ if (d && d->d_bdev)
+ bdev = d->d_bdev;
spin_unlock_irq(&afi->f_lock);
- if (d) {
+ disk_inode = ilookup5(asmdisk_mnt->mnt_sb,
+ (unsigned long)bdev,
+ asmdisk_test,
+ ASMFS_I(ASMFS_F2I(file)));
+ if (disk_inode) {
+ d = ASMDISK_I(disk_inode);
if (d->d_bdev)
blk_run_address_space(d->d_bdev->bd_inode->i_mapping);
iput(&d->vfs_inode);
@@ -1668,7 +1634,9 @@
add_wait_queue(&afi->f_wait, &wait);
add_wait_queue(&to->wait, &to_wait);
do {
+ struct block_device *bdev;
struct asm_disk_info *d;
+ struct inode *disk_inode;
ret = 0;
set_task_state(tsk, TASK_INTERRUPTIBLE);
@@ -1679,10 +1647,15 @@
break;
}
- d = find_io_disk(file);
+ bdev = find_io_bdev(file);
spin_unlock_irq(&afi->f_lock);
- if (d) {
+ disk_inode = ilookup5(asmdisk_mnt->mnt_sb,
+ (unsigned long)bdev,
+ asmdisk_test,
+ ASMFS_I(ASMFS_F2I(file)));
+ if (disk_inode) {
+ d = ASMDISK_I(disk_inode);
if (d->d_bdev)
blk_run_address_space(d->d_bdev->bd_inode->i_mapping);
iput(&d->vfs_inode);
@@ -2115,7 +2088,9 @@
/* No need for a fastpath */
add_wait_queue(&afi->f_wait, &wait);
do {
+ struct block_device *bdev;
struct asm_disk_info *d;
+ struct inode *disk_inode;
set_task_state(tsk, TASK_UNINTERRUPTIBLE);
@@ -2123,10 +2098,14 @@
if (list_empty(&afi->f_ios))
break;
- d = find_io_disk(file);
+ bdev = find_io_bdev(file);
spin_unlock_irq(&afi->f_lock);
- if (d) {
+ disk_inode = ilookup5(asmdisk_mnt->mnt_sb,
+ (unsigned long)bdev,
+ asmdisk_test, aii);
+ if (disk_inode) {
+ d = ASMDISK_I(disk_inode);
if (d->d_bdev)
blk_run_address_space(d->d_bdev->bd_inode->i_mapping);
iput(&d->vfs_inode);
@@ -2311,16 +2290,21 @@
if (!filp)
goto out;
+ ret = -ENOTBLK;
+ if (!S_ISBLK(filp->f_mapping->host->i_mode))
+ goto out_put;
+
bdev = I_BDEV(filp->f_mapping->host);
qd_info->qd_max_sectors = compute_max_sectors(bdev);
qd_info->qd_hardsect_size = bdev_hardsect_size(bdev);
qd_info->qd_interface = (u32)asm_disk_get_interface(bdev);
- fput(filp);
-
ret = 0;
+out_put:
+ fput(filp);
+
out:
qd_info->qd_abi.ai_status = ret;
@@ -2362,9 +2346,12 @@
goto out_error;
if (igrab(filp->f_mapping->host)) {
- bdev = I_BDEV(filp->f_mapping->host);
+ ret = -ENOTBLK;
+ if (S_ISBLK(filp->f_mapping->host->i_mode)) {
+ bdev = I_BDEV(filp->f_mapping->host);
- ret = asm_open_disk(file, bdev);
+ ret = asm_open_disk(file, bdev);
+ }
}
fput(filp);
if (ret)
@@ -2558,13 +2545,13 @@
static struct inode_operations asmfs_disk_dir_inode_operations = {
.lookup = simple_lookup,
- .unlink = asmfs_unlink,
+ .unlink = simple_unlink,
.mknod = asmfs_mknod,
};
static struct inode_operations asmfs_iid_dir_inode_operations = {
.create = asmfs_create,
.lookup = simple_lookup,
- .unlink = asmfs_unlink,
+ .unlink = simple_unlink,
};
static struct super_operations asmfs_ops = {
@@ -2623,6 +2610,7 @@
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
inode->i_op = &simple_dir_inode_operations;
inode->i_fop = &asmfs_dir_operations;
+ inode->i_mapping->backing_dev_info = &memory_backing_dev_info;
/* directory inodes start off with i_nlink == 2 (for "." entry) */
inode->i_nlink++;
@@ -2647,6 +2635,7 @@
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
inode->i_op = &asmfs_disk_dir_inode_operations;
inode->i_fop = &asmfs_dir_operations;
+ inode->i_mapping->backing_dev_info = &memory_backing_dev_info;
d_add(dentry, inode);
name.name = ASM_MANAGER_INSTANCES;
@@ -2664,6 +2653,7 @@
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
inode->i_op = &asmfs_iid_dir_inode_operations;
inode->i_fop = &asmfs_dir_operations;
+ inode->i_mapping->backing_dev_info = &memory_backing_dev_info;
d_add(dentry, inode);
name.name = asm_operation_files[ASMOP_QUERY_VERSION];
@@ -2676,7 +2666,8 @@
&trans_contexts[ASMOP_QUERY_VERSION]);
if (!inode)
goto out_genocide;
- d_add(dentry, inode);
+ inode->i_mapping->backing_dev_info = &memory_backing_dev_info;
+ d_add(dentry, inode);
name.name = asm_operation_files[ASMOP_GET_IID];
name.len = strlen(asm_operation_files[ASMOP_GET_IID]);
@@ -2688,7 +2679,8 @@
&trans_contexts[ASMOP_GET_IID]);
if (!inode)
goto out_genocide;
- d_add(dentry, inode);
+ inode->i_mapping->backing_dev_info = &memory_backing_dev_info;
+ d_add(dentry, inode);
name.name = asm_operation_files[ASMOP_CHECK_IID];
name.len = strlen(asm_operation_files[ASMOP_CHECK_IID]);
@@ -2700,7 +2692,8 @@
&trans_contexts[ASMOP_CHECK_IID]);
if (!inode)
goto out_genocide;
- d_add(dentry, inode);
+ inode->i_mapping->backing_dev_info = &memory_backing_dev_info;
+ d_add(dentry, inode);
name.name = asm_operation_files[ASMOP_QUERY_DISK];
name.len = strlen(asm_operation_files[ASMOP_QUERY_DISK]);
@@ -2712,7 +2705,8 @@
&trans_contexts[ASMOP_QUERY_DISK]);
if (!inode)
goto out_genocide;
- d_add(dentry, inode);
+ inode->i_mapping->backing_dev_info = &memory_backing_dev_info;
+ d_add(dentry, inode);
sb->s_root = root;
Modified: branches/extended/tools/asmtool.c
===================================================================
--- branches/extended/tools/asmtool.c 2005-05-17 23:13:44 UTC (rev 303)
+++ branches/extended/tools/asmtool.c 2005-06-02 02:53:16 UTC (rev 304)
@@ -884,6 +884,8 @@
fprintf(stderr,
"asmtool: Unable to open ASM disk \"%s\": %s\n",
disk, strerror(-rc));
+ /* Ignore the result, let the above error fall through */
+ unlink_disk(manager, disk);
}
out_close:
Modified: branches/extended/vendor/redhat/oracleasm-2.6.9-EL.spec-generic.in
===================================================================
--- branches/extended/vendor/redhat/oracleasm-2.6.9-EL.spec-generic.in 2005-05-17 23:13:44 UTC (rev 303)
+++ branches/extended/vendor/redhat/oracleasm-2.6.9-EL.spec-generic.in 2005-06-02 02:53:16 UTC (rev 304)
@@ -28,6 +28,7 @@
%ifarch ia64
%define karch ia64
+%define buildsmp 0
%define buildhugemem 0
%endif
@@ -38,7 +39,7 @@
%define kver %{base}-%{sver}.EL
# The minimum -support package required for the kernel bits.
-%define support_ver 1.0.94
+%define support_ver 2.0.0
Summary: The Oracle Automatic Storage Management library driver.
Name: oracleasm-%{kver}
@@ -164,7 +165,7 @@
%if %{buildup}
%post -n oracleasm-%{kver}
-depmod -a
+depmod -ae %{kver}
%files -n oracleasm-%{kver}
%defattr(-,root,root)
@@ -174,7 +175,7 @@
%if %{buildsmp}
%post -n oracleasm-%{kver}smp
-depmod -a
+depmod -ae %{kver}smp
%files -n oracleasm-%{kver}smp
%defattr(-,root,root)
@@ -184,7 +185,7 @@
%if %{buildhugemem}
%post -n oracleasm-%{kver}hugemem
-depmod -a
+depmod -ae %{kver}hugemem
%files -n oracleasm-%{kver}hugemem
%defattr(-,root,root)
Modified: branches/extended/vendor/suse/oracleasm-2.6.5.spec-generic.in
===================================================================
--- branches/extended/vendor/suse/oracleasm-2.6.5.spec-generic.in 2005-05-17 23:13:44 UTC (rev 303)
+++ branches/extended/vendor/suse/oracleasm-2.6.5.spec-generic.in 2005-06-02 02:53:16 UTC (rev 304)
@@ -73,7 +73,7 @@
%define kver %{base}-%{sver}
# The minimum -support package required for the kernel bits.
-%define support_ver 1.0.94
+%define support_ver 2.0.0
Summary: The Oracle Automatic Storage Management library driver.
Name: oracleasm-%{kver}
@@ -430,7 +430,7 @@
%if %{builddefault}
%post default
-depmod -a
+depmod -ae %{kver}-default
%files default
%defattr(-,root,root)
@@ -440,7 +440,7 @@
%if %{buildsmp}
%post smp
-depmod -a
+depmod -ae %{kver}-smp
%files smp
%defattr(-,root,root)
@@ -450,7 +450,7 @@
%if %{buildbigsmp}
%post bigsmp
-depmod -a
+depmod -ae %{kver}-bigsmp
%files bigsmp
%defattr(-,root,root)
@@ -460,7 +460,7 @@
%if %{build64kpagesize}
%post 64k-pagesize
-depmod -a
+depmod -ae %{kver}-64k-pagesize
%files 64k-pagesize
%defattr(-,root,root)
@@ -470,7 +470,7 @@
%if %{buildsn2}
%post sn2
-depmod -a
+depmod -ae %{kver}-sn2/
%files sn2
%defattr(-,root,root)
@@ -480,7 +480,7 @@
%if %{buildiseries64}
%post iseries64
-depmod -a
+depmod -ae %{kver}-iseries64
%files iseries64
%defattr(-,root,root)
@@ -490,7 +490,7 @@
%if %{buildpmac64}
%post pmac64
-depmod -a
+depmod -ae %{kver}-pmac64
%files pmac64
%defattr(-,root,root)
@@ -500,7 +500,7 @@
%if %{buildpseries64}
%post pseries64
-depmod -a
+depmod -ae %{kver}-pseries64
%files pseries64
%defattr(-,root,root)
@@ -510,7 +510,7 @@
%if %{builds390}
%post s390
-depmod -a
+depmod -ae %{kver}-s390
%files s390
%defattr(-,root,root)
@@ -520,7 +520,7 @@
%if %{builds390x}
%post s390x
-depmod -a
+depmod -ae %{kver}-s390x
%files s390x
%defattr(-,root,root)
More information about the Oracleasm-commits
mailing list