/* for non-directory */
                struct {
-                       struct semaphore                f_size_sem;
-                       void                            *f_size_sem_owner;
+                       struct mutex                    f_size_mutex;
                        char                            *f_symlink_name;
                        __u64                           f_maxbytes;
                        /*
                        char                 f_jobid[JOBSTATS_JOBID_SIZE];
                } f;
 
-#define lli_size_sem       u.f.f_size_sem
-#define lli_size_sem_owner      u.f.f_size_sem_owner
+#define lli_size_mutex          u.f.f_size_mutex
 #define lli_symlink_name       u.f.f_symlink_name
 #define lli_maxbytes       u.f.f_maxbytes
 #define lli_trunc_sem     u.f.f_trunc_sem
  * Locking to guarantee consistency of non-atomic updates to long long i_size,
  * consistency between file size and KMS.
  *
- * Implemented by ->lli_size_sem and ->lsm_lock, nested in that order.
+ * Implemented by ->lli_size_mutex and ->lsm_lock, nested in that order.
  */
 
 void ll_inode_size_lock(struct inode *inode);
 
 static inline void cl_isize_write_nolock(struct inode *inode, loff_t kms)
 {
-       LASSERT(down_trylock(&ll_i2info(inode)->lli_size_sem) != 0);
+       LASSERT(mutex_is_locked(&ll_i2info(inode)->lli_size_mutex));
        i_size_write(inode, kms);
 }
 
 
                spin_lock_init(&lli->lli_sa_lock);
                lli->lli_opendir_pid = 0;
        } else {
-               sema_init(&lli->lli_size_sem, 1);
-               lli->lli_size_sem_owner = NULL;
+               mutex_init(&lli->lli_size_mutex);
                lli->lli_symlink_name = NULL;
                init_rwsem(&lli->lli_trunc_sem);
                mutex_init(&lli->lli_write_mutex);
        LASSERT(!S_ISDIR(inode->i_mode));
 
        lli = ll_i2info(inode);
-       LASSERT(lli->lli_size_sem_owner != current);
-       down(&lli->lli_size_sem);
-       LASSERT(lli->lli_size_sem_owner == NULL);
-       lli->lli_size_sem_owner = current;
+       mutex_lock(&lli->lli_size_mutex);
 }
 
 void ll_inode_size_unlock(struct inode *inode)
        struct ll_inode_info *lli;
 
        lli = ll_i2info(inode);
-       LASSERT(lli->lli_size_sem_owner == current);
-       lli->lli_size_sem_owner = NULL;
-       up(&lli->lli_size_sem);
+       mutex_unlock(&lli->lli_size_mutex);
 }
 
 void ll_update_inode(struct inode *inode, struct lustre_md *md)