.. | .. |
---|
160 | 160 | struct inode *dir = d_inode(parent); |
---|
161 | 161 | struct fuse_conn *fc; |
---|
162 | 162 | struct inode *inode; |
---|
163 | | - DECLARE_SWAIT_QUEUE_HEAD_ONSTACK(wq); |
---|
| 163 | + DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq); |
---|
164 | 164 | |
---|
165 | 165 | if (!o->nodeid) { |
---|
166 | 166 | /* |
---|
.. | .. |
---|
243 | 243 | dput(dentry); |
---|
244 | 244 | dentry = alias; |
---|
245 | 245 | } |
---|
246 | | - if (IS_ERR(dentry)) |
---|
| 246 | + if (IS_ERR(dentry)) { |
---|
| 247 | + if (!IS_ERR(inode)) { |
---|
| 248 | + struct fuse_inode *fi = get_fuse_inode(inode); |
---|
| 249 | + |
---|
| 250 | + spin_lock(&fi->lock); |
---|
| 251 | + fi->nlookup--; |
---|
| 252 | + spin_unlock(&fi->lock); |
---|
| 253 | + } |
---|
247 | 254 | return PTR_ERR(dentry); |
---|
| 255 | + } |
---|
248 | 256 | } |
---|
249 | 257 | if (fc->readdirplus_auto) |
---|
250 | 258 | set_bit(FUSE_I_INIT_RDPLUS, &get_fuse_inode(inode)->state); |
---|