This is the mail archive of the ecos-patches@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: jffs2 umount


On Sun, Sep 21, 2003 at 10:38:13PM +0200, Thomas Koeller wrote:
> The jffs2_umount() function always decrements the mount count
> for the file system, even if the umount attempt fails with
> EBUSY. This means the umount can never be retried. Patch
> attached.

It was not quite correct. You didn't decrement the mount count for
successful umount's. This may not actually be necessary, but the old
code would do it. Here i what i've committed.

     Andrew

Index: packages/fs/jffs2/current//ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos/packages/fs/jffs2/current/ChangeLog,v
retrieving revision 1.12
diff -u -r1.12 ChangeLog
--- packages/fs/jffs2/current//ChangeLog        19 Sep 2003 00:21:46 -0000      1.12+++ packages/fs/jffs2/current//ChangeLog        23 Sep 2003 10:20:07 -0000
@@ -1,3 +1,9 @@
+2003-09-21  Thomas Koeller  <thomas.koeller@baslerweb.com>
+           Andrew Lunn     <andrew.lunn@ascom.ch>
+
+       * src/fs-ecos.c: Do not decrement mount count for unsuccessful
+       umount attempts.
+
 2003-09-19  Thomas Koeller  <thomas.koeller@baslerweb.com>
  
        * src/fs-ecos.c: Another inode number fix.
Index: packages/fs/jffs2/current//src/fs-ecos.c
===================================================================
RCS file: /cvs/ecos/ecos/packages/fs/jffs2/current/src/fs-ecos.c,v
retrieving revision 1.7
diff -u -r1.7 fs-ecos.c
--- packages/fs/jffs2/current//src/fs-ecos.c    19 Sep 2003 00:21:46 -0000      1.7
+++ packages/fs/jffs2/current//src/fs-ecos.c    23 Sep 2003 10:20:10 -0000
@@ -584,17 +584,15 @@
  
        D2(printf("jffs2_umount\n"));
  
-       // Decrement the mount count
-       jffs2_sb->s_mount_count--;
-
        // Only really umount if this is the only mount
-       if (jffs2_sb->s_mount_count == 0) {
+       if (jffs2_sb->s_mount_count == 1) {
  
                // Check for open/inuse root or any cached inodes
 //if( root->i_count != 1 || root->i_cache_next != NULL) // root icount was set to 1 on mount
                if (root->i_cache_next != NULL) // root icount was set to 1 on mount                        return EBUSY;
-
+
+               jffs2_sb->s_mount_count--;
                dec_refcnt(root);       // Time to free the root inode
  
                //Clear root inode
@@ -611,7 +609,8 @@
                mte->fs->data = 0;      // fstab entry, visible to all mounts. No current mount
                // That's all folks.
                D2(printf("jffs2_umount No current mounts\n"));
-       }
+       } else
+               jffs2_sb->s_mount_count--;
  
        return ENOERR;
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]