]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Fix required to enable RAID arrays on SAS disks.
authorArtur Wojcik <artur.wojcik@intel.com>
Thu, 10 Dec 2009 19:03:40 +0000 (12:03 -0700)
committerDan Williams <dan.j.williams@intel.com>
Thu, 10 Dec 2009 19:03:40 +0000 (12:03 -0700)
The patch increases the capacity of buffers used to store
sysfs path names. Originally the buffers were too small to
hold the canonical representation of sysfs path (in case
of a SAS device, especially a device installed behind an
expander).

Signed-off-by: Artur Wojcik <artur.wojcik@intel.com>
Reviewed-by: Andre Noll <maan@systemlinux.org>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
mdadm.h
super-intel.c
sysfs.c

diff --git a/mdadm.h b/mdadm.h
index c7f864bba4485a80239a85b85dd9e04834a982ca..fb243e5d2f9daf2d1b95e7f7f6d8ed0766f29f52 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -1001,3 +1001,10 @@ static inline int xasprintf(char **strp, const char *fmt, ...) {
 #define ALGORITHM_PARITY_0_6           20
 #define ALGORITHM_PARITY_N_6           ALGORITHM_PARITY_N
 
+/* Define PATH_MAX in case we don't use glibc or standard library does
+ * not have PATH_MAX defined. Assume max path length is 4K characters.
+ */
+#ifndef PATH_MAX
+#define PATH_MAX       4096
+#endif
+
index d87b2b03f71e1dd22bde96d5159e0bf588c82510..325630f0927991b186726f24caab6b64ed327129 100644 (file)
@@ -1588,7 +1588,7 @@ static void fd2devname(int fd, char *name)
 {
        struct stat st;
        char path[256];
-       char dname[100];
+       char dname[PATH_MAX];
        char *nm;
        int rv;
 
diff --git a/sysfs.c b/sysfs.c
index 35dfbd450bc9742ca25f16a72c7075bef4cfe858..1d15ff64b40585c694dc0e2abb29e0d84018330f 100644 (file)
--- a/sysfs.c
+++ b/sysfs.c
@@ -100,13 +100,8 @@ void sysfs_init(struct mdinfo *mdi, int fd, int devnum)
 
 struct mdinfo *sysfs_read(int fd, int devnum, unsigned long options)
 {
-       /* Longest possible name in sysfs, mounted at /sys, is
-        *  /sys/block/md_dXXX/md/dev-XXXXX/block/dev
-        *  /sys/block/md_dXXX/md/metadata_version
-        * which is about 41 characters.  50 should do for now
-        */
-       char fname[50];
-       char buf[1024];
+       char fname[PATH_MAX];
+       char buf[PATH_MAX];
        char *base;
        char *dbase;
        struct mdinfo *sra;
@@ -574,8 +569,8 @@ int sysfs_set_array(struct mdinfo *info, int vers)
 
 int sysfs_add_disk(struct mdinfo *sra, struct mdinfo *sd, int in_sync)
 {
-       char dv[100];
-       char nm[100];
+       char dv[PATH_MAX];
+       char nm[PATH_MAX];
        char *dname;
        int rv;