[Ocfs2-commits] mfasheh commits r861 - trunk/src
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Wed Apr 21 21:35:23 CDT 2004
Author: mfasheh
Date: 2004-04-21 20:35:22 -0500 (Wed, 21 Apr 2004)
New Revision: 861
Modified:
trunk/src/dlm.c
trunk/src/file.c
trunk/src/hash.c
trunk/src/inode.c
trunk/src/nm.c
trunk/src/oin.c
Log:
* fix a potential null pointer error in ocfs_clear_inode
* fix process_vote to only take inode_extend_sem on behalf of other
nodes if we in fact, have that file open (was doing it all the time
before).
* fix ocfs_release_lock s
Modified: trunk/src/dlm.c
===================================================================
--- trunk/src/dlm.c 2004-04-20 19:35:10 UTC (rev 860)
+++ trunk/src/dlm.c 2004-04-22 01:35:22 UTC (rev 861)
@@ -1355,7 +1355,8 @@
}
/* Send an update to all nodes alive, can be optimized later TODO */
- if ((flags & FLAG_FILE_RENAME) || (flags & FLAG_FILE_DELETE))
+ if ((flags & FLAG_FILE_RENAME) || (flags & FLAG_FILE_DELETE)
+ || (flags & FLAG_FILE_TRUNCATE) || (flags & FLAG_FILE_EXTEND))
votemap = (__u32) (osb->publ_map);
/* TODO: figure out how to properly handle inode updates w/no oin */
Modified: trunk/src/file.c
===================================================================
--- trunk/src/file.c 2004-04-20 19:35:10 UTC (rev 860)
+++ trunk/src/file.c 2004-04-22 01:35:22 UTC (rev 861)
@@ -27,6 +27,9 @@
#include "inc/ocfs.h"
#define OCFS_DEBUG_CONTEXT OCFS_DEBUG_CONTEXT_FILE
+extern struct semaphore recovery_list_sem;
+extern spinlock_t oin_num_ext_lock;
+
static int ocfs_change_file_attrib (ocfs_super * osb, __u64 parent_off, __u64 file_size, __u64 file_off, struct iattr *attr, struct inode *inode);
static int ocfs_truncate_file (ocfs_super * osb, __u64 file_off, __u64 file_size, struct inode *inode);
@@ -362,6 +365,23 @@
ocfs_put_lockres(OCFS_I(inode)->lock_res);
OCFS_I(inode)->lock_res = NULL;
}
+
+ /* we might still be holding inode_extend_sem on
+ * behalf of another node, so release it here. */
+ down(&recovery_list_sem);
+ spin_lock(&oin_num_ext_lock);
+ if (OCFS_I(inode)->num_extends) {
+ LOG_TRACE_ARGS("ocfs2: closing inode %lu -- had %u "
+ "extends pending from another node!\n",
+ inode->i_ino,
+ OCFS_I(inode)->num_extends);
+ OCFS_I(inode)->num_extends = 0;
+ list_del(&OCFS_I(inode)->recovery_list);
+ INIT_LIST_HEAD(&OCFS_I(inode)->recovery_list);
+ up(&OCFS_I(inode)->inode_extend_sem);
+ }
+ spin_unlock(&oin_num_ext_lock);
+ up(&recovery_list_sem);
}
ocfs_up_sem (&(OCFS_I(inode)->main_res));
ocfs_sync_inode(inode);
Modified: trunk/src/hash.c
===================================================================
--- trunk/src/hash.c 2004-04-20 19:35:10 UTC (rev 860)
+++ trunk/src/hash.c 2004-04-22 01:35:22 UTC (rev 861)
@@ -1421,6 +1421,36 @@
return(inode);
}
+static inline void ocfs_debug_print_inum(ocfs_inode_num *inum,
+ struct inode * inode)
+{
+
+ if (inum) {
+ printk("ocfs2: inum info\n");
+ printk(" i_state = %s\n", (inum->i_state == INUM_BOUND)
+ ? "INUM_BOUND" : "INUM_UNBOUND");
+ printk(" i_ino = %lu\n", inum->i_ino);
+ printk(" i_voteoff = %u.%u\n", HILO(inum->i_voteoff));
+ printk(" i_feoff = %u.%u\n", HILO(inum->i_feoff));
+ printk(" i_inode = 0x%p\n", inum->i_inode);
+ }
+
+ if (!inode)
+ return;
+
+ if (inum && inode != inum->i_inode)
+ printk("ocfs: Inode pointer (0x%p) is different from inum!\n",
+ inode);
+ printk("ocfs: inode info\n");
+ printk(" inode = 0x%p\n", inode);
+ printk(" i_ino = %lu\n", inode->i_ino);
+ printk(" voteoff = %u.%u\n", HILO(OCFS_I(inode)->voteoff));
+ printk(" feoff = %u.%u\n", HILO(OCFS_I(inode)->feoff));
+ printk(" i_count = %u\n", atomic_read(&inode->i_count));
+ printk(" deleted = %s\n", INODE_DELETED(inode) ? "yes" : "no");
+ return;
+}
+
/*
* ocfs_inode_hash_insert()
*
@@ -1526,9 +1556,9 @@
inum = __ocfs_inode_hash_lookup(h, voteoff);
if (!inum) {
- printk("ocfs2: lost inum, offset = %u.%u, inode->i_ino= %lu\n",
- HILO(voteoff), inode->i_ino);
-
+ printk("ocfs2: lost inum (voteoff = %u.%u)! AIEEEE!\n",
+ HILO(voteoff));
+ ocfs_debug_print_inum(inum, inode);
BUG();
}
@@ -1567,6 +1597,7 @@
HILO(voteoff), inode->i_ino,
inum->i_inode->i_ino,
INODE_DELETED(inum->i_inode));
+ ocfs_debug_print_inum(inum, inode);
BUG();
}
@@ -1615,7 +1646,7 @@
spin_unlock(&h->lock);
- if (!inum->i_inode)
+ if (!inum->i_inode || inum->i_state == INUM_UNBOUND)
LOG_ERROR_ARGS("deleting inum in unbound state! (state = %d, "
"voteoff = %u.%u, feoff = %u.%u, i_ino = %u\n",
inum->i_state, HILO(inum->i_voteoff),
Modified: trunk/src/inode.c
===================================================================
--- trunk/src/inode.c 2004-04-20 19:35:10 UTC (rev 860)
+++ trunk/src/inode.c 2004-04-22 01:35:22 UTC (rev 861)
@@ -755,6 +755,11 @@
/* we should not really be using osb in this context. */
osb = (ocfs_super *) OCFS_GENERIC_SB_P(inode->i_sb);
+ if (!inode->u.generic_ip) {
+ LOG_ERROR_ARGS("inode %lu has no generic_ip!\n", inode->i_ino);
+ goto bail;
+ }
+
offset = GET_INODE_VOTEOFF(inode);
if (offset == -1)
BUG();
Modified: trunk/src/nm.c
===================================================================
--- trunk/src/nm.c 2004-04-20 19:35:10 UTC (rev 860)
+++ trunk/src/nm.c 2004-04-22 01:35:22 UTC (rev 861)
@@ -845,7 +845,7 @@
inode = NULL;
else
inode = ocfs_get_inode_from_offset(osb, lock_id, fe_off, NULL);
-
+skip_inode:
if (inode) {
/* we only need i_sem for some of the operations
* below, but due to lock ordering, we want to take it
@@ -1299,7 +1299,7 @@
break;
}
- if (flags & (FLAG_FILE_EXTEND|FLAG_FILE_TRUNCATE) &&
+ if (inode && (flags & (FLAG_FILE_EXTEND|FLAG_FILE_TRUNCATE)) &&
((flags & FLAG_ACQUIRE_LOCK && vote_response==FLAG_VOTE_NODE) ||
(flags & FLAG_RELEASE_LOCK))) {
@@ -1307,7 +1307,9 @@
"extend" : "truncate", flags & FLAG_RELEASE_LOCK ?
"release" : "acquire", inode, node_num);
- if (inode && (flags & FLAG_ACQUIRE_LOCK)) {
+ ocfs_down_sem(&OCFS_I(inode)->main_res, true);
+ if (OCFS_I(inode)->open_hndl_cnt
+ && (flags & FLAG_ACQUIRE_LOCK)) {
spin_lock(&oin_num_ext_lock);
if (OCFS_I(inode)->num_extends < 0)
@@ -1335,9 +1337,11 @@
spin_unlock(&oin_num_ext_lock);
up(&recovery_list_sem);
}
- } else if (inode && (flags & FLAG_RELEASE_LOCK)) {
+ } else if (OCFS_I(inode)->open_hndl_cnt
+ && (flags & FLAG_RELEASE_LOCK)) {
down(&recovery_list_sem);
spin_lock(&oin_num_ext_lock);
+
OCFS_I(inode)->num_extends--;
if (OCFS_I(inode)->num_extends < 0)
@@ -1345,6 +1349,7 @@
if (!OCFS_I(inode)->num_extends) {
list_del(&OCFS_I(inode)->recovery_list);
+ INIT_LIST_HEAD(&OCFS_I(inode)->recovery_list);
up(&OCFS_I(inode)->inode_extend_sem);
}
@@ -1352,6 +1357,7 @@
up(&recovery_list_sem);
}
+ ocfs_up_sem(&OCFS_I(inode)->main_res);
}
if (disk_vote) {
@@ -1367,9 +1373,9 @@
status = ocfs_send_vote_reply(osb, dlm_msg, vote_response, open_handle);
}
- LOG_TRACE_ARGS("vote: lockid=%u.%u, node=%d, seqnum=%u.%u, response=%d, open_handle=%s\n",
- HILO(lock_id), node_num, HILO(seq_num), vote_response,
- open_handle?"yes":"no");
+#ifdef VERBOSE_PROCESS_VOTE
+ printk("(%u) vote: lockid=%u.%u, node=%d, seqnum=%u.%u, response=%d, open_handle=%s\n",ocfs_getpid(), HILO(lock_id), node_num, HILO(seq_num), vote_response, open_handle?"yes":"no");
+#endif
if (status < 0)
LOG_ERROR_STATUS (status);
Modified: trunk/src/oin.c
===================================================================
--- trunk/src/oin.c 2004-04-20 19:35:10 UTC (rev 860)
+++ trunk/src/oin.c 2004-04-22 01:35:22 UTC (rev 861)
@@ -56,7 +56,19 @@
* make sure that unlink or rename can't be change it while we're
* in here! */
offset = GET_INODE_FEOFF(inode);
+ if (offset == 0) {
+ LOG_ERROR_ARGS("inode %lu has zero offset\n", inode->i_ino);
+ status = -EINVAL;
+ goto leave;
+ }
+ if (INODE_DELETED(inode)) {
+ LOG_TRACE_ARGS("Inode %lu was marked as deleted!",
+ inode->i_ino);
+ status = -ENOENT;
+ goto leave;
+ }
+
status = ocfs_read_bh(osb, offset, &fe_bh, OCFS_BH_COND_CACHED, inode);
if (status < 0) {
LOG_ERROR_STATUS (status);
@@ -65,175 +77,173 @@
fe = (ocfs_file_entry *) OCFS_BH_GET_DATA_READ(fe_bh); /* read */
/* Make sure that what we found is not a directory. */
- if (!(OCFS_I(inode)->oin_flags & OCFS_OIN_DIRECTORY)) {
- /* Add checks as needed */
- if ((fe->sync_flags & OCFS_SYNC_FLAG_MARK_FOR_DELETION) ||
- (!(fe->sync_flags & OCFS_SYNC_FLAG_VALID))) {
- if (fe->sync_flags & OCFS_SYNC_FLAG_MARK_FOR_DELETION) {
- LOG_TRACE_STR
- ("File Entry is marked for deletion");
- } else {
- LOG_TRACE_STR ("File Entry is invalid");
- }
+ if ((OCFS_I(inode)->oin_flags & OCFS_OIN_DIRECTORY))
+ goto leave;
- OCFS_SET_FLAG (OCFS_I(inode)->oin_flags, OCFS_OIN_INVALID);
- /* ?? I think we should remove the oin here from the oin list */
- status = -ENOENT;
- goto leave;
+ /* Add checks as needed */
+ if ((fe->sync_flags & OCFS_SYNC_FLAG_MARK_FOR_DELETION) ||
+ (!(fe->sync_flags & OCFS_SYNC_FLAG_VALID))) {
+ if (fe->sync_flags & OCFS_SYNC_FLAG_MARK_FOR_DELETION) {
+ LOG_TRACE_STR
+ ("File Entry is marked for deletion");
+ } else {
+ LOG_TRACE_STR ("File Entry is invalid");
}
- disk_len = strlen(fe->filename);
+ OCFS_SET_FLAG (OCFS_I(inode)->oin_flags, OCFS_OIN_INVALID);
+ /* ?? I think we should remove the oin here from the oin list */
+ status = -ENOENT;
+ goto leave;
+ }
- status = -ENOENT;
- list_for_each_safe (iter, temp_iter, &(inode->i_dentry)) {
- struct dentry *dentry = list_entry (iter, struct dentry, d_alias);
- if (dentry->d_name.len == disk_len &&
- strncmp(dentry->d_name.name, fe->filename, disk_len)==0)
- {
- status = 0;
- }
- }
- if (status < 0) {
- LOG_TRACE_STR ("file entry name did not match inode");
- OCFS_SET_FLAG (OCFS_I(inode)->oin_flags, OCFS_OIN_INVALID);
- goto leave;
- }
+ disk_len = strlen(fe->filename);
+ status = -ENOENT;
+ list_for_each_safe (iter, temp_iter, &(inode->i_dentry)) {
+ struct dentry *dentry = list_entry (iter, struct dentry, d_alias);
+ if (dentry->d_name.len == disk_len &&
+ strncmp(dentry->d_name.name, fe->filename, disk_len)==0)
+ status = 0;
+ }
- if ((OCFS_I(inode)->alloc_size != (__s64) fe->alloc_size) ||
- (inode->i_size != (__s64) fe->file_size) ||
- (OCFS_I(inode)->chng_seq_num != DISK_LOCK_SEQNUM (fe)) ||
- inode->i_uid != fe->uid ||
- inode->i_gid != fe->gid || inode->i_mode != fe->prot_bits){
+ /* isn't it OK for an inode to have no dentry yet? */
+ if (list_empty(&inode->i_dentry))
+ status = 0;
- if (OCFS_I(inode)->alloc_size > (__s64)fe->alloc_size){
- ocfs_extent_map_destroy (&OCFS_I(inode)->map);
- ocfs_extent_map_init (&OCFS_I(inode)->map);
- }
+ if (status < 0) {
+ LOG_TRACE_STR ("file entry name did not match inode");
+ OCFS_SET_FLAG (OCFS_I(inode)->oin_flags, OCFS_OIN_INVALID);
+ goto leave;
+ }
- LOG_TRACE_STR
- ("Allocsize, filesize or seq no did not match");
- OCFS_I(inode)->alloc_size = fe->alloc_size;
- inode->i_size = fe->file_size;
- OCFS_I(inode)->chng_seq_num = DISK_LOCK_SEQNUM (fe);
+ if ((OCFS_I(inode)->alloc_size != (__s64) fe->alloc_size) ||
+ (inode->i_size != (__s64) fe->file_size) ||
+ (OCFS_I(inode)->chng_seq_num != DISK_LOCK_SEQNUM (fe)) ||
+ inode->i_uid != fe->uid ||
+ inode->i_gid != fe->gid || inode->i_mode != fe->prot_bits){
+ if (OCFS_I(inode)->alloc_size > (__s64)fe->alloc_size){
+ ocfs_extent_map_destroy (&OCFS_I(inode)->map);
+ ocfs_extent_map_init (&OCFS_I(inode)->map);
+ }
+
+ LOG_TRACE_STR("Allocsize, filesize or seq no did not match");
+ OCFS_I(inode)->alloc_size = fe->alloc_size;
+ inode->i_size = fe->file_size;
+ OCFS_I(inode)->chng_seq_num = DISK_LOCK_SEQNUM (fe);
+
+ inode->i_blocks = (inode->i_size + 512) >> 9;
+ inode->i_uid = fe->uid;
+ inode->i_gid = fe->gid;
+ inode->i_mode = fe->prot_bits;
+ inode->i_blksize = (__u32) osb->vol_layout.cluster_size;
+ OCFS_SET_INODE_TIME(inode, i_ctime, fe->create_time);
+ OCFS_SET_INODE_TIME(inode, i_atime, fe->modify_time);
+ OCFS_SET_INODE_TIME(inode, i_mtime, fe->modify_time);
+ if (!S_ISDIR (inode->i_mode) &&
+ (OCFS_I(inode)->alloc_size != (__s64) fe->alloc_size ||
+ inode->i_size != (__s64) fe->file_size ||
+ OCFS_I(inode)->chng_seq_num != DISK_LOCK_SEQNUM (fe))) {
+ *needs_trunc = 1;
+ }
+
+ switch (fe->attribs) {
+ case OCFS_ATTRIB_DIRECTORY:
+ inode->i_size = OCFS_DEFAULT_DIR_NODE_SIZE;
inode->i_blocks = (inode->i_size + 512) >> 9;
- inode->i_uid = fe->uid;
- inode->i_gid = fe->gid;
- inode->i_mode = fe->prot_bits;
- inode->i_blksize = (__u32) osb->vol_layout.cluster_size;
- OCFS_SET_INODE_TIME(inode, i_ctime, fe->create_time);
- OCFS_SET_INODE_TIME(inode, i_atime, fe->modify_time);
- OCFS_SET_INODE_TIME(inode, i_mtime, fe->modify_time);
- if (!S_ISDIR (inode->i_mode) &&
- (OCFS_I(inode)->alloc_size != (__s64) fe->alloc_size ||
- inode->i_size != (__s64) fe->file_size ||
- OCFS_I(inode)->chng_seq_num != DISK_LOCK_SEQNUM (fe))) {
- *needs_trunc = 1;
- }
-
- switch (fe->attribs) {
- case OCFS_ATTRIB_DIRECTORY:
- inode->i_size = OCFS_DEFAULT_DIR_NODE_SIZE;
- inode->i_blocks = (inode->i_size + 512) >> 9;
- inode->i_mode |= S_IFDIR;
- break;
- case OCFS_ATTRIB_SYMLINK:
- inode->i_mode |= S_IFLNK;
- break;
- case OCFS_ATTRIB_REG:
- inode->i_mode |= S_IFREG;
- break;
- case OCFS_ATTRIB_CHAR:
- case OCFS_ATTRIB_BLOCK:
- case OCFS_ATTRIB_FIFO:
- case OCFS_ATTRIB_SOCKET:
- {
+ inode->i_mode |= S_IFDIR;
+ break;
+ case OCFS_ATTRIB_SYMLINK:
+ inode->i_mode |= S_IFLNK;
+ break;
+ case OCFS_ATTRIB_REG:
+ inode->i_mode |= S_IFREG;
+ break;
+ case OCFS_ATTRIB_CHAR:
+ case OCFS_ATTRIB_BLOCK:
+ case OCFS_ATTRIB_FIFO:
+ case OCFS_ATTRIB_SOCKET:
+ {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
- dev_t dev;
+ dev_t dev;
#else
- kdev_t kdev;
+ kdev_t kdev;
#endif
- if (fe->attribs == OCFS_ATTRIB_CHAR)
- inode->i_mode |= S_IFCHR;
- else if (fe->attribs == OCFS_ATTRIB_BLOCK)
- inode->i_mode |= S_IFBLK;
- else if (fe->attribs == OCFS_ATTRIB_FIFO)
- inode->i_mode |= S_IFIFO;
- else if (fe->attribs == OCFS_ATTRIB_SOCKET)
- inode->i_mode |= S_IFSOCK;
+ if (fe->attribs == OCFS_ATTRIB_CHAR)
+ inode->i_mode |= S_IFCHR;
+ else if (fe->attribs == OCFS_ATTRIB_BLOCK)
+ inode->i_mode |= S_IFBLK;
+ else if (fe->attribs == OCFS_ATTRIB_FIFO)
+ inode->i_mode |= S_IFIFO;
+ else if (fe->attribs == OCFS_ATTRIB_SOCKET)
+ inode->i_mode |= S_IFSOCK;
- inode->i_rdev = OCFS_NODEV;
+ inode->i_rdev = OCFS_NODEV;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
- dev = MKDEV (fe->dev_major, fe->dev_minor);
+ dev = MKDEV (fe->dev_major, fe->dev_minor);
#else
- kdev = MKDEV (fe->dev_major, fe->dev_minor);
+ kdev = MKDEV (fe->dev_major, fe->dev_minor);
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
- init_special_inode (inode, inode->i_mode,
- dev);
+ init_special_inode (inode, inode->i_mode, dev);
#else
- init_special_inode (inode, inode->i_mode,
- kdev_t_to_nr(kdev));
+ init_special_inode (inode, inode->i_mode,
+ kdev_t_to_nr(kdev));
#endif
- break;
- }
- default:
- LOG_ERROR_ARGS ("attribs=%d", fe->attribs);
- inode->i_mode |= S_IFREG;
- break;
- }
+ break;
+ }
+ default:
+ LOG_ERROR_ARGS ("attribs=%d", fe->attribs);
+ inode->i_mode |= S_IFREG;
+ break;
+ }
- if (fe->local_ext) {
- __s64 tempVbo;
- __s64 tempLbo;
- __u64 tempSize;
- __u32 j;
+ if (fe->local_ext) {
+ __s64 tempVbo;
+ __s64 tempLbo;
+ __u64 tempSize;
+ __u32 j;
- /* Add the Extents to extent map */
- for (j = 0; j < fe->next_free_ext; j++) {
- tempVbo = fe->extents[j].file_off;
- tempLbo = fe->extents[j].disk_off;
- tempSize = fe->extents[j].num_bytes;
+ /* Add the Extents to extent map */
+ for (j = 0; j < fe->next_free_ext; j++) {
+ tempVbo = fe->extents[j].file_off;
+ tempLbo = fe->extents[j].disk_off;
+ tempSize = fe->extents[j].num_bytes;
- if (!ocfs_add_extent_map_entry (osb,
- &OCFS_I(inode)->map,
- tempVbo, tempLbo,
- tempSize))
- goto leave;
- }
+ if (!ocfs_add_extent_map_entry (osb,
+ &OCFS_I(inode)->map,
+ tempVbo, tempLbo,
+ tempSize))
+ goto leave;
}
}
+ }
- /* ??? we need to the lock resource before updating it */
- if (OCFS_I(inode)->lock_res) {
- /* cannot hold bhsem while taking lockres... baaad */
- memcpy(&dlock, (ocfs_disk_lock *)fe, sizeof(ocfs_disk_lock));
- OCFS_BH_PUT_DATA(fe_bh);
- fe = NULL;
- lockres = OCFS_I(inode)->lock_res;
- ocfs_acquire_lockres(lockres);
- lockres->lock_type = DISK_LOCK_FILE_LOCK (&dlock);
- lockres->master_node_num = DISK_LOCK_CURRENT_MASTER (&dlock);
- lockres->oin_openmap = DISK_LOCK_OIN_MAP (&dlock);
+ /* ??? we need to the lock resource before updating it */
+ if (OCFS_I(inode)->lock_res) {
+ /* cannot hold bhsem while taking lockres... baaad */
+ memcpy(&dlock, (ocfs_disk_lock *)fe, sizeof(ocfs_disk_lock));
+ OCFS_BH_PUT_DATA(fe_bh);
+ fe = NULL;
+ lockres = OCFS_I(inode)->lock_res;
+ ocfs_acquire_lockres(lockres);
+ lockres->lock_type = DISK_LOCK_FILE_LOCK (&dlock);
+ lockres->master_node_num = DISK_LOCK_CURRENT_MASTER (&dlock);
+ lockres->oin_openmap = DISK_LOCK_OIN_MAP (&dlock);
- if (lockres->readonly_node != OCFS_INVALID_NODE_NUM &&
- lockres->readonly_node != lockres->master_node_num) {
- LOG_ERROR_ARGS("no longer readonly! ronode=%d, master=%d, lockid=%u.%u\n",
- lockres->readonly_node, lockres->master_node_num,
- lockres->sector_num);
- lockres->readonly_node = OCFS_INVALID_NODE_NUM;
- }
-
- ocfs_release_lockres(lockres);
+ if (lockres->readonly_node != OCFS_INVALID_NODE_NUM &&
+ lockres->readonly_node != lockres->master_node_num) {
+ LOG_ERROR_ARGS("no longer readonly! ronode=%d, master=%d, lockid=%u.%u\n",
+ lockres->readonly_node, lockres->master_node_num,
+ lockres->sector_num);
+ lockres->readonly_node = OCFS_INVALID_NODE_NUM;
}
- status = 0;
- } else {
- /* Update for the DIRECTORY */
+ ocfs_release_lockres(lockres);
}
+ status = 0;
leave:
if (status == 0)
OCFS_I(inode)->needs_verification = false;
More information about the Ocfs2-commits
mailing list