LINUX.ORG.RU

История изменений

Исправление ziemin, (текущая версия) :

Хоть бы на исходник глянул:

http://lxr.free-electrons.com/source/fs/proc/generic.c?v=3.2

У тебя небось с неверным аргументом вызывается. Не находит такого девайса.

296 /*
297  * This function parses a name such as "tty/driver/serial", and
298  * returns the struct proc_dir_entry for "/proc/tty/driver", and
299  * returns "serial" in residual.
300  */
301 static int __xlate_proc_name(const char *name, struct proc_dir_entry **ret,
302                              const char **residual)
303 {
304         const char              *cp = name, *next;
305         struct proc_dir_entry   *de;
306         unsigned int            len;
307 
308         de = *ret;
309         if (!de)
310                 de = &proc_root;
311 
312         while (1) {
313                 next = strchr(cp, '/');
314                 if (!next)
315                         break;
316 
317                 len = next - cp;
318                 for (de = de->subdir; de ; de = de->next) {
319                         if (proc_match(len, cp, de))
320                                 break;
321                 }
322                 if (!de) {
323                         WARN(1, "name '%s'\n", name);
324                         return -ENOENT;
325                 }
326                 cp += len + 1;
327         }
328         *residual = cp;
329         *ret = de;
330         return 0;
331 }

Исходная версия ziemin, :

Хоть бы на исходник глянул:

http://lxr.free-electrons.com/source/fs/proc/generic.c?v=3.2

У тебя небось с неверным аргументом вызывается. С другой стороны зачем они проверяют в цикле, если уже проверили раньше и впаяли значение по-умолчанию?

296 /*
297  * This function parses a name such as "tty/driver/serial", and
298  * returns the struct proc_dir_entry for "/proc/tty/driver", and
299  * returns "serial" in residual.
300  */
301 static int __xlate_proc_name(const char *name, struct proc_dir_entry **ret,
302                              const char **residual)
303 {
304         const char              *cp = name, *next;
305         struct proc_dir_entry   *de;
306         unsigned int            len;
307 
308         de = *ret;
309         if (!de)
310                 de = &proc_root;
311 
312         while (1) {
313                 next = strchr(cp, '/');
314                 if (!next)
315                         break;
316 
317                 len = next - cp;
318                 for (de = de->subdir; de ; de = de->next) {
319                         if (proc_match(len, cp, de))
320                                 break;
321                 }
322                 if (!de) {
323                         WARN(1, "name '%s'\n", name);
324                         return -ENOENT;
325                 }
326                 cp += len + 1;
327         }
328         *residual = cp;
329         *ret = de;
330         return 0;
331 }