- LOCK_INODE_MUTEX(inode);
- ofd = inode->i_filterdata;
-
- if (ofd && ofd->ofd_epoch >= ioepoch) {
- if (ofd->ofd_epoch > ioepoch)
- CERROR("client sent old epoch %d for obj ino %ld\n",
- ioepoch, inode->i_ino);
- UNLOCK_INODE_MUTEX(inode);
- RETURN(0);
- }
-
- if (ofd && ofd->ofd_epoch < ioepoch) {
- ofd->ofd_epoch = ioepoch;
- } else if (!ofd) {
- OBD_ALLOC(ofd, sizeof(*ofd));
- if (!ofd)
- GOTO(out, rc = -ENOMEM);
- igrab(inode);
- inode->i_filterdata = ofd;
- ofd->ofd_epoch = ioepoch;
- }
- /* the decision to write a record is now made, unlock */
- UNLOCK_INODE_MUTEX(inode);
+ mutex_lock(&inode->i_mutex);
+ ofd = inode->i_private;
+
+ if (ofd && ofd->ofd_epoch >= ioepoch) {
+ if (ofd->ofd_epoch > ioepoch)
+ CERROR("client sent old epoch %d for obj ino %ld\n",
+ ioepoch, inode->i_ino);
+ mutex_unlock(&inode->i_mutex);
+ RETURN(0);
+ }
+
+ if (ofd && ofd->ofd_epoch < ioepoch) {
+ ofd->ofd_epoch = ioepoch;
+ } else if (!ofd) {
+ OBD_ALLOC(ofd, sizeof(*ofd));
+ if (!ofd)
+ GOTO(out, rc = -ENOMEM);
+ igrab(inode);
+ inode->i_private = ofd;
+ ofd->ofd_epoch = ioepoch;
+ }
+ /* the decision to write a record is now made, unlock */
+ mutex_unlock(&inode->i_mutex);