RE: [Cooker] Fix for supermount NLS problem (I hope)

2001-09-25 Thread Borsenkow Andrej


 
 Unless I am totally blind the fix is pass sbi-s_data as third
parameter
 to do_remount_sb in subfs_remount. Currently it is
 
 retval = do_remount_sb (subsb, real_flags, NULL);
 
 change it into
 
 retval = do_remount_sb (subsb, real_flags, sbi-s_data);
 
 

Well, after my poor system was busy all day long to recompile kernel, I
found the problem. It was not the above line (also it probably does not
harm as well) but the following in 

fs/isofs/inode.c: parse_options()
...
if ((value = strchr(this_char,'=')) != NULL)
*value++ = 0;
...

i.e. what happens is

- we store fs-specific arguments in sbi-s_data
- then we pass it to subfs
- it (in our case, isofs) puts 0 in the middle that trashes value for
the next time
- next time the option does not work anymore:

[super.c:subfs_mount:199] type=iso9660, dev=/dev/hdc, data=iocharset
   ^^^
oops!

This smells as memory leak in any case. This may be discussed on lkml
probably. But quick fix for supermount is to copy options immediately
before passing them to do_kern_mount. I.e. something like

super_operations.c:parse_options.c:

   if (*this_char == ',') {
/* An empty option, or the option --,
   introduces options to be passed through to
   the subfs */
supermount_debug (assigning remainder);
  Newoptptr = allocate_strlen(this_char);
return copy_option (sbi-s_data, ++this_char);

in super.c:subfs_mount():

   copy(sbi-s_data, optptr) = for every do_kern_mount

   mnt = do_kern_mount (sbi-s_type,
 sb-s_flags | MS_MGC_VAL,
 sbi-s_devname, optptr);

and may  be the same do_remount_sb in subfs_remount. Unfortunately, I am
not familiar with kernel memory allocation to quickly do it :(

-andrej




RE: [Cooker] Fix for supermount NLS problem (I hope)

2001-09-25 Thread Borsenkow Andrej


 - we store fs-specific arguments in sbi-s_data
 - then we pass it to subfs
 - it (in our case, isofs) puts 0 in the middle that trashes value for
 the next time
 - next time the option does not work anymore:
 
 [super.c:subfs_mount:199] type=iso9660, dev=/dev/hdc, data=iocharset
^^^
 oops!
 
 This smells as memory leak in any case. 

Even if it is no memory leak it means on second mount some options will
be ignored. This is already bad enough.