Index: linux-2.6.10-rsbac-v1.2.3/rsbac/adf/adf_main.c
===================================================================
--- linux-2.6.10-rsbac-v1.2.3/rsbac/adf/adf_main.c	(revision 107)
+++ linux-2.6.10-rsbac-v1.2.3/rsbac/adf/adf_main.c	(working copy)
@@ -2120,7 +2120,7 @@
       }
     /* Now we fill the file structure, and */
     /* if there is an open func, use it, otherwise ignore */
-    if ((tmperr = init_private_file(file_p, file_dentry_p, O_WRONLY)))
+    if ((tmperr = init_private_file(file_p, file_dentry_p, O_WRONLY | O_SYNC)))
       {
 #ifdef CONFIG_RSBAC_RMSG
         rsbac_printk(KERN_WARNING
@@ -2175,9 +2175,10 @@
  * Secure File Truncation
  */
 
-EXPORT_SYMBOL(rsbac_sec_trunc);
-int rsbac_sec_trunc(struct dentry * dentry_p,
-                    loff_t new_len, loff_t old_len)
+static int do_rsbac_sec_trunc(struct dentry * dentry_p,
+                              loff_t new_len,
+                              loff_t old_len,
+                              boolean need_lock)
   {
 #if defined(CONFIG_RSBAC_MAINT)
     return 0;
@@ -2361,10 +2362,28 @@
         while(new_len < old_len)
           {
             len = rsbac_min(RSBAC_SEC_DEL_CHUNK_SIZE, old_len-new_len);
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0))
             tmperr = file.f_op->write(&file,
                                      buffer,
                                      len,
                                      &file.f_pos);
+#else
+            if(need_lock)
+              tmperr = file.f_op->write(&file,
+                                        buffer,
+                                        len,
+                                        &file.f_pos);
+            else
+              {
+                struct iovec local_iov = { .iov_base = (void __user *)buffer,
+                                        .iov_len = len };
+
+                tmperr = generic_file_write_nolock(&file,
+                                                   &local_iov,
+                                                   1,
+                                                   &file.f_pos);
+              }
+#endif
             /* if none written, end of file is reached -> complain and return */
             if (tmperr <= 0)
               {
@@ -2389,6 +2408,9 @@
         set_fs(oldfs);
 
 #ifdef CONFIG_RSBAC_DEBUG
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+        if(need_lock)
+#endif
         if(rsbac_debug_write)
           {
 #ifdef CONFIG_RSBAC_RMSG
@@ -2413,7 +2435,8 @@
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0))
         err = fsync_inode_data_buffers(dentry_p->d_inode);
 #else
-	err = file_fsync(&file, dentry_p, 1);
+	if(need_lock)
+          err = file_fsync(&file, dentry_p, 1);
 #endif
           
 /*
@@ -2434,12 +2457,20 @@
 #endif /* else of MAINT */
   }
 
+EXPORT_SYMBOL(rsbac_sec_trunc);
+int rsbac_sec_trunc(struct dentry * dentry_p,
+                    loff_t new_len, loff_t old_len)
+  {
+    return do_rsbac_sec_trunc(dentry_p, new_len, old_len, TRUE);
+  }
+
 EXPORT_SYMBOL(rsbac_sec_del);
 int rsbac_sec_del(struct dentry * dentry_p)
   {
-    return(rsbac_sec_trunc(dentry_p,
-                           0,
-                           dentry_p->d_inode->i_size));
+    return do_rsbac_sec_trunc(dentry_p,
+                              0,
+                              dentry_p->d_inode->i_size,
+                              FALSE);
   }
 
 #else /* no SECDEL */
