Lines Matching refs:inode

136 static int ceph_init_file(struct inode *inode, struct file *file, int fmode)  in ceph_init_file()  argument
140 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_init_file()
141 struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb); in ceph_init_file()
144 switch (inode->i_mode & S_IFMT) { in ceph_init_file()
156 ceph_fscache_invalidate(inode); in ceph_init_file()
158 dout("init_file %p %p 0%o (regular)\n", inode, file, in ceph_init_file()
159 inode->i_mode); in ceph_init_file()
162 ceph_put_fmode(ceph_inode(inode), fmode); /* clean up */ in ceph_init_file()
169 BUG_ON(inode->i_fop->release != ceph_release); in ceph_init_file()
173 dout("init_file %p %p 0%o (symlink)\n", inode, file, in ceph_init_file()
174 inode->i_mode); in ceph_init_file()
175 ceph_put_fmode(ceph_inode(inode), fmode); /* clean up */ in ceph_init_file()
179 dout("init_file %p %p 0%o (special)\n", inode, file, in ceph_init_file()
180 inode->i_mode); in ceph_init_file()
185 ceph_put_fmode(ceph_inode(inode), fmode); /* clean up */ in ceph_init_file()
186 BUG_ON(inode->i_fop->release == ceph_release); in ceph_init_file()
189 ret = inode->i_fop->open(inode, file); in ceph_init_file()
200 int ceph_open(struct inode *inode, struct file *file) in ceph_open() argument
202 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_open()
203 struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb); in ceph_open()
217 if (S_ISDIR(inode->i_mode)) in ceph_open()
220 dout("open inode %p ino %llx.%llx file %p flags %d (%d)\n", inode, in ceph_open()
221 ceph_vinop(inode), file, flags, file->f_flags); in ceph_open()
226 if (ceph_snap(inode) != CEPH_NOSNAP && (file->f_mode & FMODE_WRITE)) in ceph_open()
230 if (ceph_snap(inode) == CEPH_SNAPDIR) { in ceph_open()
234 return ceph_init_file(inode, file, fmode); in ceph_open()
249 inode, fmode, ceph_cap_string(wanted), in ceph_open()
257 ceph_snap(inode) != CEPH_SNAPDIR) in ceph_open()
260 return ceph_init_file(inode, file, fmode); in ceph_open()
261 } else if (ceph_snap(inode) != CEPH_NOSNAP && in ceph_open()
265 return ceph_init_file(inode, file, fmode); in ceph_open()
271 req = prepare_open_request(inode->i_sb, flags, 0); in ceph_open()
276 req->r_inode = inode; in ceph_open()
277 ihold(inode); in ceph_open()
282 err = ceph_init_file(inode, file, req->r_fmode); in ceph_open()
284 dout("open result=%d on %llx.%llx\n", err, ceph_vinop(inode)); in ceph_open()
294 int ceph_atomic_open(struct inode *dir, struct dentry *dentry, in ceph_atomic_open()
381 int ceph_release(struct inode *inode, struct file *file) in ceph_release() argument
383 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_release()
386 dout("release inode %p file %p\n", inode, file); in ceph_release()
411 static int striped_read(struct inode *inode, in striped_read() argument
417 struct ceph_fs_client *fsc = ceph_inode_to_client(inode); in striped_read()
418 struct ceph_inode_info *ci = ceph_inode(inode); in striped_read()
443 ret = ceph_osdc_readpages(&fsc->client->osdc, ceph_vino(inode), in striped_read()
457 if (was_short && (pos + ret < inode->i_size)) { in striped_read()
459 inode->i_size - pos - ret); in striped_read()
476 if (left && hit_stripe && pos < inode->i_size) in striped_read()
483 if (pos + left > inode->i_size) in striped_read()
501 struct inode *inode = file_inode(file); in ceph_sync_read() local
519 ret = filemap_write_and_wait_range(inode->i_mapping, off, in ceph_sync_read()
534 ret = striped_read(inode, off, n, in ceph_sync_read()
552 ret = striped_read(inode, off, len, pages, in ceph_sync_read()
627 struct inode *inode = file_inode(file); in ceph_sync_direct_write() local
628 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_sync_direct_write()
629 struct ceph_fs_client *fsc = ceph_inode_to_client(inode); in ceph_sync_direct_write()
647 ret = filemap_write_and_wait_range(inode->i_mapping, pos, pos + count); in ceph_sync_direct_write()
651 ret = invalidate_inode_pages2_range(inode->i_mapping, in ceph_sync_direct_write()
666 vino = ceph_vino(inode); in ceph_sync_direct_write()
693 truncate_inode_pages_range(inode->i_mapping, pos, in ceph_sync_direct_write()
714 if (pos > i_size_read(inode)) { in ceph_sync_direct_write()
715 check_caps = ceph_inode_set_size(inode, pos); in ceph_sync_direct_write()
717 ceph_check_caps(ceph_inode(inode), in ceph_sync_direct_write()
743 struct inode *inode = file_inode(file); in ceph_sync_write() local
744 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_sync_write()
745 struct ceph_fs_client *fsc = ceph_inode_to_client(inode); in ceph_sync_write()
763 ret = filemap_write_and_wait_range(inode->i_mapping, pos, pos + count); in ceph_sync_write()
767 ret = invalidate_inode_pages2_range(inode->i_mapping, in ceph_sync_write()
782 vino = ceph_vino(inode); in ceph_sync_write()
824 req->r_inode = inode; in ceph_sync_write()
842 if (pos > i_size_read(inode)) { in ceph_sync_write()
843 check_caps = ceph_inode_set_size(inode, pos); in ceph_sync_write()
845 ceph_check_caps(ceph_inode(inode), in ceph_sync_write()
872 struct inode *inode = file_inode(filp); in ceph_read_iter() local
873 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_read_iter()
881 inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, inode); in ceph_read_iter()
896 inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, in ceph_read_iter()
907 inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, in ceph_read_iter()
913 inode, ceph_vinop(inode), ceph_cap_string(got), (int)ret); in ceph_read_iter()
929 statret = __ceph_do_getattr(inode, page, in ceph_read_iter()
940 i_size = i_size_read(inode); in ceph_read_iter()
972 inode->i_size); in ceph_read_iter()
1001 struct inode *inode = file_inode(file); in ceph_write_iter() local
1002 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_write_iter()
1004 &ceph_sb_to_client(inode->i_sb)->client->osdc; in ceph_write_iter()
1010 if (ceph_snap(inode) != CEPH_NOSNAP) in ceph_write_iter()
1017 mutex_lock(&inode->i_mutex); in ceph_write_iter()
1020 current->backing_dev_info = inode_to_bdi(inode); in ceph_write_iter()
1023 err = ceph_do_getattr(inode, CEPH_STAT_CAP_SIZE, false); in ceph_write_iter()
1055 inode, ceph_vinop(inode), pos, count, inode->i_size); in ceph_write_iter()
1067 inode, ceph_vinop(inode), pos, count, ceph_cap_string(got)); in ceph_write_iter()
1073 mutex_unlock(&inode->i_mutex); in ceph_write_iter()
1098 inode, ceph_vinop(inode), in ceph_write_iter()
1100 mutex_lock(&inode->i_mutex); in ceph_write_iter()
1107 loff_t old_size = inode->i_size; in ceph_write_iter()
1118 if (inode->i_size > old_size) in ceph_write_iter()
1119 ceph_fscache_update_objectsize(inode); in ceph_write_iter()
1120 mutex_unlock(&inode->i_mutex); in ceph_write_iter()
1131 __mark_inode_dirty(inode, dirty); in ceph_write_iter()
1135 inode, ceph_vinop(inode), pos, (unsigned)count, in ceph_write_iter()
1150 mutex_unlock(&inode->i_mutex); in ceph_write_iter()
1162 struct inode *inode = file->f_mapping->host; in ceph_llseek() local
1165 mutex_lock(&inode->i_mutex); in ceph_llseek()
1168 ret = ceph_do_getattr(inode, CEPH_STAT_CAP_SIZE, false); in ceph_llseek()
1177 offset += inode->i_size; in ceph_llseek()
1193 if (offset >= inode->i_size) { in ceph_llseek()
1199 if (offset >= inode->i_size) { in ceph_llseek()
1203 offset = inode->i_size; in ceph_llseek()
1207 offset = vfs_setpos(file, offset, inode->i_sb->s_maxbytes); in ceph_llseek()
1210 mutex_unlock(&inode->i_mutex); in ceph_llseek()
1215 struct inode *inode, loff_t offset, unsigned size) in ceph_zero_partial_page() argument
1220 page = find_lock_page(inode->i_mapping, index); in ceph_zero_partial_page()
1229 static void ceph_zero_pagecache_range(struct inode *inode, loff_t offset, in ceph_zero_pagecache_range() argument
1237 ceph_zero_partial_page(inode, offset, size); in ceph_zero_pagecache_range()
1243 truncate_pagecache_range(inode, offset, offset + size - 1); in ceph_zero_pagecache_range()
1248 ceph_zero_partial_page(inode, offset, length); in ceph_zero_pagecache_range()
1251 static int ceph_zero_partial_object(struct inode *inode, in ceph_zero_partial_object() argument
1254 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_zero_partial_object()
1255 struct ceph_fs_client *fsc = ceph_inode_to_client(inode); in ceph_zero_partial_object()
1269 ceph_vino(inode), in ceph_zero_partial_object()
1280 ceph_osdc_build_request(req, offset, NULL, ceph_vino(inode).snap, in ceph_zero_partial_object()
1281 &inode->i_mtime); in ceph_zero_partial_object()
1295 static int ceph_zero_objects(struct inode *inode, loff_t offset, loff_t length) in ceph_zero_objects() argument
1298 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_zero_objects()
1312 ret = ceph_zero_partial_object(inode, offset, &size); in ceph_zero_objects()
1322 ret = ceph_zero_partial_object(inode, pos, NULL); in ceph_zero_objects()
1332 ret = ceph_zero_partial_object(inode, offset, &size); in ceph_zero_objects()
1345 struct inode *inode = file_inode(file); in ceph_fallocate() local
1346 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_fallocate()
1348 &ceph_inode_to_client(inode)->client->osdc; in ceph_fallocate()
1359 if (!S_ISREG(inode->i_mode)) in ceph_fallocate()
1366 mutex_lock(&inode->i_mutex); in ceph_fallocate()
1368 if (ceph_snap(inode) != CEPH_NOSNAP) { in ceph_fallocate()
1385 size = i_size_read(inode); in ceph_fallocate()
1400 ceph_zero_pagecache_range(inode, offset, length); in ceph_fallocate()
1401 ret = ceph_zero_objects(inode, offset, length); in ceph_fallocate()
1403 truncate_pagecache_range(inode, size, -1); in ceph_fallocate()
1404 if (ceph_inode_set_size(inode, endoff)) in ceph_fallocate()
1405 ceph_check_caps(ceph_inode(inode), in ceph_fallocate()
1416 __mark_inode_dirty(inode, dirty); in ceph_fallocate()
1421 mutex_unlock(&inode->i_mutex); in ceph_fallocate()