All of lore.kernel.org
 help / color / mirror / Atom feed
* new device-mapper required to build latest lvm from cvs
@ 2007-07-24 17:51 Jim Meyering
  2007-07-25 19:57   ` Jun'ichi Nomura
  0 siblings, 1 reply; 14+ messages in thread
From: Jim Meyering @ 2007-07-24 17:51 UTC (permalink / raw)
  To: lvm-devel

FYI, with the change I've just committed,

  http://sources.redhat.com/ml/lvm2-cvs/2007-07/msg00035.html

you now need a device-mapper library and headers built from
today's cvs sources.  Otherwise, you'll get compile warnings
and eventually a link error complaining about missing dm_fclose.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [lvm-devel] new device-mapper required to build latest lvm from cvs
  2007-07-24 17:51 new device-mapper required to build latest lvm from cvs Jim Meyering
@ 2007-07-25 19:57   ` Jun'ichi Nomura
  0 siblings, 0 replies; 14+ messages in thread
From: Jun'ichi Nomura @ 2007-07-25 19:57 UTC (permalink / raw)
  To: LVM2 development, jim; +Cc: device-mapper development

[-- Attachment #1: Type: text/plain, Size: 1130 bytes --]

Hi,

Jim Meyering wrote:
> FYI, with the change I've just committed,
> 
>   http://sources.redhat.com/ml/lvm2-cvs/2007-07/msg00035.html
> 
> you now need a device-mapper library and headers built from
> today's cvs sources.  Otherwise, you'll get compile warnings
> and eventually a link error complaining about missing dm_fclose.

This change introduces an error for static build.

/usr/local/lib/libdevmapper.a(libdm-file.o): In function `create_dir':
/work/device-mapper/lib/libdm-file.c:59: multiple definition of `create_dir'
../lib/liblvm.a(lvm-file.o):/work/LVM2/lib/misc/lvm-file.c:177: first defined here
/usr/bin/ld: Warning: size of symbol `create_dir' changed from 176 in ../lib/liblvm.a(lvm-file.o) to 187 in /usr/local/lib/libdevmapper.a(libdm-file.o)

lvm_fclose() calls dm_fclose(), which cause the linker to
bring libdm-file.o in liblvm.a. Then there happens a conflict
of create_dir().

Attached is a patch for device-mapper to rename the function
and export it. It alone fixes the build error.

A patch for LVM2 to use the exported function will follow.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America

[-- Attachment #2: dm-dm_create_dir.patch --]
[-- Type: text/x-patch, Size: 2195 bytes --]

lvm_fclose() calls dm_fclose(), which cause the static linker to
bring libdm-file.o in liblvm.a. Then there happens a conflict
of create_dir().

Fix the following build error:

/usr/local/lib/libdevmapper.a(libdm-file.o): In function `create_dir':
/work/device-mapper/lib/libdm-file.c:59: multiple definition of `create_dir'
../lib/liblvm.a(lvm-file.o):/work/LVM2/lib/misc/lvm-file.c:177: first defined here
/usr/bin/ld: Warning: size of symbol `create_dir' changed from 176 in ../lib/liblvm.a(lvm-file.o) to 187 in /usr/local/lib/libdevmapper.a(libdm-file.o)

Index: device-mapper.work/lib/.exported_symbols
===================================================================
--- device-mapper.work.orig/lib/.exported_symbols
+++ device-mapper.work/lib/.exported_symbols
@@ -1,6 +1,7 @@
 dm_lib_release
 dm_lib_exit
 dm_driver_version
+dm_create_dir
 dm_fclose
 dm_get_library_version
 dm_log
Index: device-mapper.work/lib/libdevmapper.h
===================================================================
--- device-mapper.work.orig/lib/libdevmapper.h
+++ device-mapper.work/lib/libdevmapper.h
@@ -629,6 +629,12 @@ char *dm_basename(const char *path);
  **************************/
 
 /*
+ * Create a directory (with parent directories if necessary).
+ * Returns 1 on success, 0 on failure.
+ */
+int dm_create_dir(const char *dir);
+
+/*
  * Close a stream, with nicer error checking than fclose's.
  * Derived from gnulib's close-stream.c.
  *
Index: device-mapper.work/lib/libdm-file.c
===================================================================
--- device-mapper.work.orig/lib/libdm-file.c
+++ device-mapper.work/lib/libdm-file.c
@@ -55,7 +55,7 @@ out:
 	return r;
 }
 
-int create_dir(const char *dir)
+int dm_create_dir(const char *dir)
 {
 	struct stat info;
 
Index: device-mapper.work/lib/ioctl/libdm-iface.c
===================================================================
--- device-mapper.work.orig/lib/ioctl/libdm-iface.c
+++ device-mapper.work/lib/ioctl/libdm-iface.c
@@ -228,7 +228,7 @@ static int _create_control(const char *c
 		return 0;
 
 	old_umask = umask(0022);
-	ret = create_dir(dm_dir());
+	ret = dm_create_dir(dm_dir());
 	umask(old_umask);
 
 	if (!ret)

[-- Attachment #3: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 14+ messages in thread

* new device-mapper required to build latest lvm from cvs
@ 2007-07-25 19:57   ` Jun'ichi Nomura
  0 siblings, 0 replies; 14+ messages in thread
From: Jun'ichi Nomura @ 2007-07-25 19:57 UTC (permalink / raw)
  To: lvm-devel

Hi,

Jim Meyering wrote:
> FYI, with the change I've just committed,
> 
>   http://sources.redhat.com/ml/lvm2-cvs/2007-07/msg00035.html
> 
> you now need a device-mapper library and headers built from
> today's cvs sources.  Otherwise, you'll get compile warnings
> and eventually a link error complaining about missing dm_fclose.

This change introduces an error for static build.

/usr/local/lib/libdevmapper.a(libdm-file.o): In function `create_dir':
/work/device-mapper/lib/libdm-file.c:59: multiple definition of `create_dir'
../lib/liblvm.a(lvm-file.o):/work/LVM2/lib/misc/lvm-file.c:177: first defined here
/usr/bin/ld: Warning: size of symbol `create_dir' changed from 176 in ../lib/liblvm.a(lvm-file.o) to 187 in /usr/local/lib/libdevmapper.a(libdm-file.o)

lvm_fclose() calls dm_fclose(), which cause the linker to
bring libdm-file.o in liblvm.a. Then there happens a conflict
of create_dir().

Attached is a patch for device-mapper to rename the function
and export it. It alone fixes the build error.

A patch for LVM2 to use the exported function will follow.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dm-dm_create_dir.patch
Type: text/x-patch
Size: 2195 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20070725/eaaba228/attachment.bin>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [lvm-devel] new device-mapper required to build latest lvm from cvs
  2007-07-25 19:57   ` Jun'ichi Nomura
@ 2007-07-25 20:01     ` Jun'ichi Nomura
  -1 siblings, 0 replies; 14+ messages in thread
From: Jun'ichi Nomura @ 2007-07-25 20:01 UTC (permalink / raw)
  To: LVM2 development, jim; +Cc: device-mapper development

[-- Attachment #1: Type: text/plain, Size: 503 bytes --]

> lvm_fclose() calls dm_fclose(), which cause the linker to
> bring libdm-file.o in liblvm.a. Then there happens a conflict
> of create_dir().
> 
> Attached is a patch for device-mapper to rename the function
> and export it. It alone fixes the build error.
> 
> A patch for LVM2 to use the exported function will follow.

This is the patch for LVM2.
LVM2's create_dir() is left there for the case LVM2 specific
something could be put in future.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America

[-- Attachment #2: lvm2-use-dm_create_dir.patch --]
[-- Type: text/x-patch, Size: 1275 bytes --]

Use dm_create_dir() instead of its own.

Index: LVM2.work/lib/misc/lvm-file.c
===================================================================
--- LVM2.work.orig/lib/misc/lvm-file.c
+++ LVM2.work/lib/misc/lvm-file.c
@@ -140,54 +140,9 @@ int dir_exists(const char *path)
 	return 1;
 }
 
-static int _create_dir_recursive(const char *dir)
-{
-	char *orig, *s;
-	int rc;
-
-	log_verbose("Creating directory \"%s\"", dir);
-	/* Create parent directories */
-	orig = s = dm_strdup(dir);
-	while ((s = strchr(s, '/')) != NULL) {
-		*s = '\0';
-		if (*orig) {
-			rc = mkdir(orig, 0777);
-			if (rc < 0 && errno != EEXIST) {
-				if (errno != EROFS)
-					log_sys_error("mkdir", orig);
-				dm_free(orig);
-				return 0;
-			}
-		}
-		*s++ = '/';
-	}
-	dm_free(orig);
-
-	/* Create final directory */
-	rc = mkdir(dir, 0777);
-	if (rc < 0 && errno != EEXIST) {
-		if (errno != EROFS)
-			log_sys_error("mkdir", dir);
-		return 0;
-	}
-	return 1;
-}
-
 int create_dir(const char *dir)
 {
-	struct stat info;
-
-	if (!*dir)
-		return 1;
-
-	if (stat(dir, &info) < 0)
-		return _create_dir_recursive(dir);
-
-	if (S_ISDIR(info.st_mode))
-		return 1;
-
-	log_error("Directory \"%s\" not found", dir);
-	return 0;
+	return dm_create_dir(dir);
 }
 
 int is_empty_dir(const char *dir)

[-- Attachment #3: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 14+ messages in thread

* new device-mapper required to build latest lvm from cvs
@ 2007-07-25 20:01     ` Jun'ichi Nomura
  0 siblings, 0 replies; 14+ messages in thread
From: Jun'ichi Nomura @ 2007-07-25 20:01 UTC (permalink / raw)
  To: lvm-devel

> lvm_fclose() calls dm_fclose(), which cause the linker to
> bring libdm-file.o in liblvm.a. Then there happens a conflict
> of create_dir().
> 
> Attached is a patch for device-mapper to rename the function
> and export it. It alone fixes the build error.
> 
> A patch for LVM2 to use the exported function will follow.

This is the patch for LVM2.
LVM2's create_dir() is left there for the case LVM2 specific
something could be put in future.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lvm2-use-dm_create_dir.patch
Type: text/x-patch
Size: 1275 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20070725/7c07d538/attachment.bin>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* new device-mapper required to build latest lvm from cvs
  2007-07-25 20:01     ` Jun'ichi Nomura
  (?)
@ 2007-07-25 20:10     ` Alasdair G Kergon
  2007-07-25 20:32       ` Alasdair G Kergon
  2007-07-25 20:43       ` Jun'ichi Nomura
  -1 siblings, 2 replies; 14+ messages in thread
From: Alasdair G Kergon @ 2007-07-25 20:10 UTC (permalink / raw)
  To: lvm-devel

On Wed, Jul 25, 2007 at 04:01:13PM -0400, Jun'ichi Nomura wrote:
> This is the patch for LVM2.
> LVM2's create_dir() is left there for the case LVM2 specific
> something could be put in future.

Don't bother: if the functions are identical today, remove the lvm2
wrapper and have everything call the dm version directly.
 
Alasdair
-- 
agk at redhat.com



^ permalink raw reply	[flat|nested] 14+ messages in thread

* new device-mapper required to build latest lvm from cvs
  2007-07-25 20:10     ` Alasdair G Kergon
@ 2007-07-25 20:32       ` Alasdair G Kergon
  2007-07-25 21:04         ` Jun'ichi Nomura
  2007-07-25 20:43       ` Jun'ichi Nomura
  1 sibling, 1 reply; 14+ messages in thread
From: Alasdair G Kergon @ 2007-07-25 20:32 UTC (permalink / raw)
  To: lvm-devel

On Wed, Jul 25, 2007 at 09:10:05PM +0100, Alasdair G Kergon wrote:
> Don't bother: if the functions are identical today, remove the lvm2
> wrapper and have everything call the dm version directly.

The functions are not quite identical:-)
  1 - a log_sys_error() cleanup missing
  2 - error suppression for read-only filesystems
  
Alasdair
-- 
agk at redhat.com



^ permalink raw reply	[flat|nested] 14+ messages in thread

* new device-mapper required to build latest lvm from cvs
  2007-07-25 20:10     ` Alasdair G Kergon
  2007-07-25 20:32       ` Alasdair G Kergon
@ 2007-07-25 20:43       ` Jun'ichi Nomura
  1 sibling, 0 replies; 14+ messages in thread
From: Jun'ichi Nomura @ 2007-07-25 20:43 UTC (permalink / raw)
  To: lvm-devel

Alasdair G Kergon wrote:
> On Wed, Jul 25, 2007 at 04:01:13PM -0400, Jun'ichi Nomura wrote:
>> This is the patch for LVM2.
>> LVM2's create_dir() is left there for the case LVM2 specific
>> something could be put in future.
> 
> Don't bother: if the functions are identical today, remove the lvm2
> wrapper and have everything call the dm version directly.

OK, then this is a revised version of the patch.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lvm2-use-dm_create_dir.patch
Type: text/x-patch
Size: 4183 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20070725/3ae5cd4a/attachment.bin>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* new device-mapper required to build latest lvm from cvs
  2007-07-25 20:32       ` Alasdair G Kergon
@ 2007-07-25 21:04         ` Jun'ichi Nomura
  2007-07-26 18:38           ` Jun'ichi Nomura
  2007-07-26 18:39           ` Jun'ichi Nomura
  0 siblings, 2 replies; 14+ messages in thread
From: Jun'ichi Nomura @ 2007-07-25 21:04 UTC (permalink / raw)
  To: lvm-devel

Alasdair G Kergon wrote:
> On Wed, Jul 25, 2007 at 09:10:05PM +0100, Alasdair G Kergon wrote:
>> Don't bother: if the functions are identical today, remove the lvm2
>> wrapper and have everything call the dm version directly.
> 
> The functions are not quite identical:-)
>   1 - a log_sys_error() cleanup missing

I thought they are identical after the macro is expanded.
Should I use log_sys_error() in libdevmapper, too?

>   2 - error suppression for read-only filesystems

It can be brought into dm_create_dir() or we can move logging
to the outside of dm_create_dir() and let callers do it.
Which way do you think is better?

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America



^ permalink raw reply	[flat|nested] 14+ messages in thread

* new device-mapper required to build latest lvm from cvs
  2007-07-25 21:04         ` Jun'ichi Nomura
@ 2007-07-26 18:38           ` Jun'ichi Nomura
  2007-07-26 20:34             ` Jun'ichi Nomura
  2007-07-26 18:39           ` Jun'ichi Nomura
  1 sibling, 1 reply; 14+ messages in thread
From: Jun'ichi Nomura @ 2007-07-26 18:38 UTC (permalink / raw)
  To: lvm-devel

Jun'ichi Nomura wrote:
> Alasdair G Kergon wrote:
>> On Wed, Jul 25, 2007 at 09:10:05PM +0100, Alasdair G Kergon wrote:
>>> Don't bother: if the functions are identical today, remove the lvm2
>>> wrapper and have everything call the dm version directly.
>> The functions are not quite identical:-)
>>   1 - a log_sys_error() cleanup missing
> 
> I thought they are identical after the macro is expanded.
> Should I use log_sys_error() in libdevmapper, too?

OK, this patch copies log_sys_error() macro from LVM2
and let libdevmapper use it.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dm-import-lvm2-log_sys-macros.patch
Type: text/x-patch
Size: 8082 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20070726/ac8de832/attachment.bin>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* new device-mapper required to build latest lvm from cvs
  2007-07-25 21:04         ` Jun'ichi Nomura
  2007-07-26 18:38           ` Jun'ichi Nomura
@ 2007-07-26 18:39           ` Jun'ichi Nomura
  1 sibling, 0 replies; 14+ messages in thread
From: Jun'ichi Nomura @ 2007-07-26 18:39 UTC (permalink / raw)
  To: lvm-devel

Jun'ichi Nomura wrote:
> Alasdair G Kergon wrote:
>> The functions are not quite identical:-)
..
>>   2 - error suppression for read-only filesystems
> 
> It can be brought into dm_create_dir() or we can move logging
> to the outside of dm_create_dir() and let callers do it.
> Which way do you think is better?

And this patch adds EROFS check to libdevmapper version of
_create_dir_recursive() so that they are equivalent.
(The patch is applicable after the log_sys_* macro patch.)

For really making them identical, I think LVM2 should call
dm_init_log() with its own log function.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dm-dm_create_dir-EROFS-check.patch
Type: text/x-patch
Size: 860 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20070726/7a2a4544/attachment.bin>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* new device-mapper required to build latest lvm from cvs
  2007-07-26 18:38           ` Jun'ichi Nomura
@ 2007-07-26 20:34             ` Jun'ichi Nomura
  0 siblings, 0 replies; 14+ messages in thread
From: Jun'ichi Nomura @ 2007-07-26 20:34 UTC (permalink / raw)
  To: lvm-devel

Jun'ichi Nomura wrote:
> Jun'ichi Nomura wrote:
>> Alasdair G Kergon wrote:
>>> On Wed, Jul 25, 2007 at 09:10:05PM +0100, Alasdair G Kergon wrote:
>>>> Don't bother: if the functions are identical today, remove the lvm2
>>>> wrapper and have everything call the dm version directly.
>>> The functions are not quite identical:-)
>>>   1 - a log_sys_error() cleanup missing
>> I thought they are identical after the macro is expanded.
>> Should I use log_sys_error() in libdevmapper, too?
> 
> OK, this patch copies log_sys_error() macro from LVM2
> and let libdevmapper use it.

Sorry there was a typo in the patch. ("fscanf" -> "scanf")
Attached is a revised patch.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dm-import-lvm2-log_sys-macros.patch
Type: text/x-patch
Size: 8084 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20070726/4f5bfd38/attachment.bin>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [lvm-devel] new device-mapper required to build latest lvm from cvs
  2007-07-25 19:57   ` Jun'ichi Nomura
@ 2007-07-28 13:06     ` Jim Meyering
  -1 siblings, 0 replies; 14+ messages in thread
From: Jim Meyering @ 2007-07-28 13:06 UTC (permalink / raw)
  To: Jun'ichi Nomura; +Cc: device-mapper development, LVM2 development

"Jun'ichi Nomura" <j-nomura@ce.jp.nec.com> wrote:
> Jim Meyering wrote:
>> FYI, with the change I've just committed,
>>
>>   http://sources.redhat.com/ml/lvm2-cvs/2007-07/msg00035.html
>>
>> you now need a device-mapper library and headers built from
>> today's cvs sources.  Otherwise, you'll get compile warnings
>> and eventually a link error complaining about missing dm_fclose.
>
> This change introduces an error for static build.

Thank you for the report and the patches.
I've applied four of your patches, three for device-mapper
and one for lvm2:

dm
  Export dm_create_dir (was create_dir) to help fix LVM2 link error
    http://git.et.redhat.com/?p=device-mapper.git;a=commitdiff;h=8748390a79f
  Don't log mkdir fail-with-EROFS, to make create_dir equiv to that in LVM2
    http://git.et.redhat.com/?p=device-mapper.git;a=commitdiff;h=81d93dd4717
  Introduce and use log_sys_* macros from LVM2
    http://git.et.redhat.com/?p=device-mapper.git;a=commitdiff;h=5edca96def8

lvm2
  Remove create_dir function; use now-equivalent dm_create_dir instead
    http://git.et.redhat.com/?p=lvm2.git;a=commitdiff;h=7d85f48b35b7

^ permalink raw reply	[flat|nested] 14+ messages in thread

* new device-mapper required to build latest lvm from cvs
@ 2007-07-28 13:06     ` Jim Meyering
  0 siblings, 0 replies; 14+ messages in thread
From: Jim Meyering @ 2007-07-28 13:06 UTC (permalink / raw)
  To: lvm-devel

"Jun'ichi Nomura" <j-nomura@ce.jp.nec.com> wrote:
> Jim Meyering wrote:
>> FYI, with the change I've just committed,
>>
>>   http://sources.redhat.com/ml/lvm2-cvs/2007-07/msg00035.html
>>
>> you now need a device-mapper library and headers built from
>> today's cvs sources.  Otherwise, you'll get compile warnings
>> and eventually a link error complaining about missing dm_fclose.
>
> This change introduces an error for static build.

Thank you for the report and the patches.
I've applied four of your patches, three for device-mapper
and one for lvm2:

dm
  Export dm_create_dir (was create_dir) to help fix LVM2 link error
    http://git.et.redhat.com/?p=device-mapper.git;a=commitdiff;h=8748390a79f
  Don't log mkdir fail-with-EROFS, to make create_dir equiv to that in LVM2
    http://git.et.redhat.com/?p=device-mapper.git;a=commitdiff;h=81d93dd4717
  Introduce and use log_sys_* macros from LVM2
    http://git.et.redhat.com/?p=device-mapper.git;a=commitdiff;h=5edca96def8

lvm2
  Remove create_dir function; use now-equivalent dm_create_dir instead
    http://git.et.redhat.com/?p=lvm2.git;a=commitdiff;h=7d85f48b35b7



^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2007-07-28 13:06 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-24 17:51 new device-mapper required to build latest lvm from cvs Jim Meyering
2007-07-25 19:57 ` [lvm-devel] " Jun'ichi Nomura
2007-07-25 19:57   ` Jun'ichi Nomura
2007-07-25 20:01   ` [lvm-devel] " Jun'ichi Nomura
2007-07-25 20:01     ` Jun'ichi Nomura
2007-07-25 20:10     ` Alasdair G Kergon
2007-07-25 20:32       ` Alasdair G Kergon
2007-07-25 21:04         ` Jun'ichi Nomura
2007-07-26 18:38           ` Jun'ichi Nomura
2007-07-26 20:34             ` Jun'ichi Nomura
2007-07-26 18:39           ` Jun'ichi Nomura
2007-07-25 20:43       ` Jun'ichi Nomura
2007-07-28 13:06   ` [lvm-devel] " Jim Meyering
2007-07-28 13:06     ` Jim Meyering

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.