[Ocfs2-devel] [PATCH] simplify and cleanup ocfs_file_release
Christoph Hellwig
hch at lst.de
Mon Aug 30 08:46:33 CDT 2004
- add private variable ocfs_inode_private *oip to get rid of the
gazillions of OCFS_I calls
- removed check for root inode - root inode is always a directory
so the directory check triggers
- but actually we don't need the directory check either because
directories can never be opened O_DIRECT
- remove usage of obsfucation macros for bitmasks
- clear OCFS_OIN_OPEN_FOR_DIRECTIO unconditionally on last close,
either it was set or not, after clearing it'll be unset
- remove "PURE_EVIL"
- reformat to match kernel coding style
Index: src/file.c
===================================================================
--- src/file.c (revision 1398)
+++ src/file.c (working copy)
@@ -256,67 +256,23 @@
return ret;
} /* ocfs_file_open */
-/*
- * ocfs_file_release()
- *
- */
-static int ocfs_file_release (struct inode *inode, struct file *file)
+static int ocfs_file_release(struct inode *inode, struct file *file)
{
- ocfs_super * osb;
- struct dentry *dentry;
- int last_close = 0;
- int dec = 0;
+ ocfs_inode_private *oip = OCFS_I(inode);
LOG_SET_CONTEXT(RELEASE);
-
- LOG_ENTRY_ARGS ("(0x%p, 0x%p, '%*s')\n", inode, file,
+ LOG_ENTRY_ARGS("(0x%p, 0x%p, '%*s')\n", inode, file,
file->f_dentry->d_name.len, file->f_dentry->d_name.name);
- dentry = file->f_dentry;
+ down(&oip->ip_sem);
+ if (!--oip->ip_open_cnt)
+ oip->ip_open_flags &= ~OCFS_OIN_OPEN_FOR_DIRECTIO;
+ up(&oip->ip_sem);
-#ifdef PURE_EVIL
- if (evil_filename_check(EVIL_DENTRY, dentry)) {
- LOG_ERROR_ARGS("EVIL FRELEASE: mode=%d\n", file->f_flags);
- }
-#endif
-
- osb = OCFS_SB(inode->i_sb);
-
- /* dir */
- if (S_ISDIR (inode->i_mode)) {
- /* fix all this - need a real open/close for directories */
- goto bail;
- }
-
- down (&(OCFS_I(inode)->ip_sem));
- OCFS_I(inode)->ip_open_cnt--;
- if (!OCFS_I(inode)->ip_open_cnt)
- last_close = 1;
-
- if (inode == osb->root_inode) {
- up (&(OCFS_I(inode)->ip_sem));
- goto bail;
- }
-
- LOG_TRACE_ARGS ("openhandles: %d / osbfiles: %lld / refcount: %d\n",
- OCFS_I(inode)->ip_open_cnt, osb->file_open_cnt,
- atomic_read(&dentry->d_count));
-
- if (last_close
- && (OCFS_I(inode)->ip_open_flags & OCFS_OIN_OPEN_FOR_DIRECTIO))
- OCFS_CLEAR_FLAG(OCFS_I(inode)->ip_open_flags,
- OCFS_OIN_OPEN_FOR_DIRECTIO);
- up (&(OCFS_I(inode)->ip_sem));
-
-bail:
- if (dec)
- iput(inode);
-
- LOG_EXIT_INT (0);
-
+ LOG_EXIT_INT(0);
LOG_CLEAR_CONTEXT();
return 0;
-} /* ocfs_file_release */
+}
/*
* ocfs_inode_fill_ext_map()
More information about the Ocfs2-devel
mailing list