Hi, I am sorry for that delayed response. I applied this patch, nilfs is still working, but it didin't solve my problem. There is some news though, I found out that nilfs_cleanerd works when I use an initrd, mounting my root fs in it, and doing a switch_root then. (I can restart it etc, works fine)
Here is my /proc/mounts without initrd: $ cat /proc/mounts rootfs / rootfs rw 0 0 /dev/root / nilfs2 rw,relatime 0 0 proc /proc proc rw,relatime 0 0 sysfs /sys sysfs rw,relatime 0 0 none /dev ramfs rw,relatime 0 0 devpts /dev/pts devpts rw,relatime,mode=600 0 0 /dev/hda2 /boot ext3 rw,relatime,errors=continue,data=writeback 0 0 /dev/hda4 /DATA nilfs2 rw,relatime 0 0 fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0 and with initrd: $ cat /proc/mounts rootfs / rootfs rw 0 0 tmpfs /dev tmpfs rw,relatime 0 0 devpts /dev/pts devpts rw,relatime,mode=600 0 0 /dev/hda3 / nilfs2 rw,relatime 0 0 proc /proc proc rw,relatime 0 0 sysfs /sys sysfs rw,relatime 0 0 none /dev ramfs rw,relatime 0 0 devpts /dev/pts devpts rw,relatime,mode=600 0 0 /dev/hda2 /boot ext3 rw,relatime,errors=continue,data=writeback 0 0 /dev/hda4 /DATA nilfs2 rw,relatime 0 0 fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0 2009/7/5 Ryusuke Konishi <[email protected]> > Hi! > On Sat, 4 Jul 2009 16:43:31 +0200, Quentin RAMEAU wrote: > > Hello, > > > > I formated my root fs with nilfs a few days ago, but I can't start > cleanerd > > for that fs. > > I have another nilfs on that system that seems to work correctly. > > > > Maybe I am doing something wrong, at least, there something that could be > > done, here is some info about it: > > > > $ uname -r > > 2.6.30-zen1 > > > > $ mount -t nilfs2 > > /dev/hda3 on / type nilfs2 (rw,gcpid=1510) > > /dev/hda4 on /DATA type nilfs2 (rw,gcpid=1675) > > > > $ ps -ef | grep nilfs > > root 1675 1 0 12:56 ? 00:00:02 /sbin/nilfs_cleanerd -n > > /dev/hda4 /DATA > > > > $ nilfs_cleanerd /dev/hda3 && tail /var/log/everything/current | grep > nilfs > > Jul 04 15:46:29 [nilfs_cleanerd] start > > Jul 04 15:46:29 [nilfs_cleanerd] cannot open nilfs on /dev/hda3: Invalid > > argument > > Jul 04 15:46:29 [nilfs_cleanerd] cannot create cleanerd on /dev/hda3: > > Invalid argument > > Jul 04 15:46:29 [nilfs_cleanerd] shutdown > > I think this comes from a matching error in /proc/mounts. I found a > symlink entry is used for the device of root filesystem in some > environments. The current nilfs library does not support such case. > > What's going on your /proc/mounts? > > Anyway, I wrote a patch to handle the above case. > > If this is the case, could you try the following patch? > > Thanks in advance, > Ryusuke Konishi > > -- > diff --git a/lib/nilfs.c b/lib/nilfs.c > index 75179e3..df8792b 100644 > --- a/lib/nilfs.c > +++ b/lib/nilfs.c > @@ -148,6 +148,7 @@ static int nilfs_find_fs(struct nilfs *nilfs, const > char *dev, const char *dir, > int ret, n; > char canonical[PATH_MAX + 2]; > char *cdev = NULL, *cdir = NULL; > + char *mdev, *mdir; > > ret = -1; > if (dev && myrealpath(dev, canonical, sizeof(canonical))) { > @@ -172,20 +173,36 @@ static int nilfs_find_fs(struct nilfs *nilfs, const > char *dev, const char *dir, > n = tokenize(line, mntent, NMNTFLDS); > assert(n == NMNTFLDS); > > - if ((dev == NULL || strcmp(mntent[MNTFLD_FS], dev) == 0) && > - (dir == NULL || strcmp(mntent[MNTFLD_DIR], dir) == 0) > && > - strcmp(mntent[MNTFLD_TYPE], NILFS_FSTYPE) == 0 && > - has_mntopt(mntent[MNTFLD_OPTS], opt)) { > + if (strcmp(mntent[MNTFLD_TYPE], NILFS_FSTYPE) != 0) > + continue; > + > + if (dir != NULL) { > + mdir = mntent[MNTFLD_DIR]; > + if (myrealpath(mdir, canonical, sizeof(canonical))) > + mdir = canonical; > + if (strcmp(mdir, dir) != 0) > + continue; > + } > + > + if (dev != NULL) { > + mdev = mntent[MNTFLD_FS]; > + if (myrealpath(mdev, canonical, sizeof(canonical))) > + mdev = canonical; > + if (strcmp(mdev, dev) != 0) > + continue; > + } > + > + if (has_mntopt(mntent[MNTFLD_OPTS], opt)) { > nilfs->n_dev = strdup(mntent[MNTFLD_FS]); > if (nilfs->n_dev == NULL) > - break; > + goto failed_proc_mounts; > len = strlen(mntent[MNTFLD_DIR]) + > strlen(NILFS_IOC) + 2; > nilfs->n_ioc = malloc(sizeof(char) * len); > if (nilfs->n_ioc == NULL) { > free(nilfs->n_dev); > nilfs->n_dev = NULL; > - break; > + goto failed_proc_mounts; > } > snprintf(nilfs->n_ioc, len, "%s/%s", > mntent[MNTFLD_DIR], NILFS_IOC); > @@ -193,6 +210,10 @@ static int nilfs_find_fs(struct nilfs *nilfs, const > char *dev, const char *dir, > break; > } > } > + if (ret < 0) > + errno = ENOENT; > + > + failed_proc_mounts: > fclose(fp); > > failed_dir: >
_______________________________________________ users mailing list [email protected] https://www.nilfs.org/mailman/listinfo/users
