[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