commit d6684d98f48e8f83b3866058939102b2c476372a
Author: Yiannis Pericleous <[EMAIL PROTECTED]>
Date:   Sat Mar 17 22:19:19 2007 -0400

    odf_cache_dir wakes up cleanup thread if it fails to write a dirent with 
ENOSPC

diff --git a/fs/unionfs/dirhelper.c b/fs/unionfs/dirhelper.c
index 2abb6f3..024f272 100644
--- a/fs/unionfs/dirhelper.c
+++ b/fs/unionfs/dirhelper.c
@@ -717,8 +717,9 @@ int odf_cache_dir(struct dentry *d_upper, struct dentry 
*d_odf, struct timespec
        struct iattr attr;
        
        sb = d_upper->d_sb;
-       
+retry: 
        unionfs_read_lock(sb);
+       odf_lock(UNIONFS_SB(sb)->odf->odi_ic);
 
        BUG_ON(!S_ISDIR(d_upper->d_inode->i_mode));
 
@@ -833,8 +834,15 @@ out:
        if (odf_file)
                filp_close(odf_file, NULL);
 
+       odf_unlock(UNIONFS_SB(sb)->odf->odi_ic);
        unionfs_read_unlock(sb);
 
+       if (err == -ENOSPC && !cleaned) {
+               cleaned = 1;
+               wake_up_sioa(UNIONFS_SB(sb)->odf->cleanup);
+               schedule();
+               goto retry;
+       }
        return err;
 }
 
_______________________________________________
unionfs-cvs mailing list: http://unionfs.filesystems.org/
[email protected]
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs-cvs

Reply via email to