diff --git a/lustre/ChangeLog b/lustre/ChangeLog
index 08d2243a20ca264faf5228557c224f90ed600a06..7907f6e55f64cad56dfd463f3b9270b127c3e06e 100644
--- a/lustre/ChangeLog
+++ b/lustre/ChangeLog
@@ -22,6 +22,7 @@ tbd         Cluster File Systems, Inc. <info@clusterfs.com>
 	- better error messages when a client is rejected during recovery (1505)
 	- avoid cancelling locks which were never granted, after failure (2330)
 	- fix i_sem/journal inversion in mds_client_add (2333)
+	- fix truncate/getattr lock cycle deadlock (2334)
        * miscellania
 	- allow configurable automake binary, for testing new versions
 	- small update to the lfs documentation
diff --git a/lustre/llite/dcache.c b/lustre/llite/dcache.c
index 9dba881179a43b4ea5592bff647f8ba7862d745c..d82b47bfa8edf3b2cd7c448a8c5487cc271bb035 100644
--- a/lustre/llite/dcache.c
+++ b/lustre/llite/dcache.c
@@ -157,8 +157,8 @@ void ll_lookup_finish_locks(struct lookup_intent *it, struct dentry *dentry)
                 mdc_set_lock_data(&it->d.lustre.it_lock_handle, inode);
         }
 
-        /* drop IT_LOOKUP locks */
-        if (it->it_op == IT_LOOKUP)
+        /* drop lookup or getattr locks immediately */
+        if (it->it_op == IT_LOOKUP || it->it_op == IT_GETATTR)
                 ll_intent_release(it);
 }
 
diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c
index d093a9316973c7692bd45bd0fd974e3e5522cde2..bba3a0cb75dd1f2cfbee0142d1006479fa84081d 100644
--- a/lustre/llite/llite_lib.c
+++ b/lustre/llite/llite_lib.c
@@ -1076,21 +1076,21 @@ void ll_read_inode2(struct inode *inode, void *opaque)
         } else {
                 inode->i_op = &ll_special_inode_operations;
 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-                init_special_inode(inode, inode->i_mode, 
+                init_special_inode(inode, inode->i_mode,
                                    kdev_t_to_nr(inode->i_rdev));
 #else
                 init_special_inode(inode, inode->i_mode, inode->i_rdev);
-                
+
                 lli->ll_save_ifop = inode->i_fop;
                 if (S_ISCHR(inode->i_mode)) {
-                        inode->i_fop = &ll_special_chr_inode_fops;                                                         
-                }else if (S_ISBLK(inode->i_mode)) {
-                        inode->i_fop = &ll_special_blk_inode_fops; 
-                }else if (S_ISFIFO(inode->i_mode)){
+                        inode->i_fop = &ll_special_chr_inode_fops;
+                } else if (S_ISBLK(inode->i_mode)) {
+                        inode->i_fop = &ll_special_blk_inode_fops;
+                } else if (S_ISFIFO(inode->i_mode)) {
                         inode->i_fop = &ll_special_fifo_inode_fops;
-                }else if (S_ISSOCK(inode->i_mode)){ 
+                } else if (S_ISSOCK(inode->i_mode)) {
                         inode->i_fop = &ll_special_sock_inode_fops;
-                }                                               
+                }
                 inode->i_fop->owner = lli->ll_save_ifop->owner;
 #endif
                 EXIT;
@@ -1098,7 +1098,7 @@ void ll_read_inode2(struct inode *inode, void *opaque)
 }
 
 int ll_iocontrol(struct inode *inode, struct file *file,
-                        unsigned int cmd, unsigned long arg)
+                 unsigned int cmd, unsigned long arg)
 {
         struct ll_sb_info *sbi = ll_i2sbi(inode);
         struct ptlrpc_request *req = NULL;