Lines Matching refs:inode

68 static int ceph_init_file(struct inode *inode, struct file *file, int fmode)  in ceph_init_file()  argument
72 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_init_file()
73 struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb); in ceph_init_file()
76 switch (inode->i_mode & S_IFMT) { in ceph_init_file()
88 ceph_fscache_invalidate(inode); in ceph_init_file()
90 dout("init_file %p %p 0%o (regular)\n", inode, file, in ceph_init_file()
91 inode->i_mode); in ceph_init_file()
94 ceph_put_fmode(ceph_inode(inode), fmode); /* clean up */ in ceph_init_file()
100 BUG_ON(inode->i_fop->release != ceph_release); in ceph_init_file()
104 dout("init_file %p %p 0%o (symlink)\n", inode, file, in ceph_init_file()
105 inode->i_mode); in ceph_init_file()
106 ceph_put_fmode(ceph_inode(inode), fmode); /* clean up */ in ceph_init_file()
110 dout("init_file %p %p 0%o (special)\n", inode, file, in ceph_init_file()
111 inode->i_mode); in ceph_init_file()
116 ceph_put_fmode(ceph_inode(inode), fmode); /* clean up */ in ceph_init_file()
117 BUG_ON(inode->i_fop->release == ceph_release); in ceph_init_file()
120 ret = inode->i_fop->open(inode, file); in ceph_init_file()
131 int ceph_open(struct inode *inode, struct file *file) in ceph_open() argument
133 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_open()
134 struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb); in ceph_open()
138 struct inode *parent_inode = NULL; in ceph_open()
149 if (S_ISDIR(inode->i_mode)) in ceph_open()
152 dout("open inode %p ino %llx.%llx file %p flags %d (%d)\n", inode, in ceph_open()
153 ceph_vinop(inode), file, flags, file->f_flags); in ceph_open()
158 if (ceph_snap(inode) != CEPH_NOSNAP && (file->f_mode & FMODE_WRITE)) in ceph_open()
162 if (ceph_snap(inode) == CEPH_SNAPDIR) { in ceph_open()
166 return ceph_init_file(inode, file, fmode); in ceph_open()
181 inode, fmode, ceph_cap_string(wanted), in ceph_open()
189 ceph_snap(inode) != CEPH_SNAPDIR) in ceph_open()
192 return ceph_init_file(inode, file, fmode); in ceph_open()
193 } else if (ceph_snap(inode) != CEPH_NOSNAP && in ceph_open()
197 return ceph_init_file(inode, file, fmode); in ceph_open()
203 req = prepare_open_request(inode->i_sb, flags, 0); in ceph_open()
208 req->r_inode = inode; in ceph_open()
209 ihold(inode); in ceph_open()
217 err = ceph_init_file(inode, file, req->r_fmode); in ceph_open()
219 dout("open result=%d on %llx.%llx\n", err, ceph_vinop(inode)); in ceph_open()
229 int ceph_atomic_open(struct inode *dir, struct dentry *dentry, in ceph_atomic_open()
316 int ceph_release(struct inode *inode, struct file *file) in ceph_release() argument
318 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_release()
321 dout("release inode %p file %p\n", inode, file); in ceph_release()
347 static int striped_read(struct inode *inode, in striped_read() argument
353 struct ceph_fs_client *fsc = ceph_inode_to_client(inode); in striped_read()
354 struct ceph_inode_info *ci = ceph_inode(inode); in striped_read()
379 ret = ceph_osdc_readpages(&fsc->client->osdc, ceph_vino(inode), in striped_read()
393 if (was_short && (pos + ret < inode->i_size)) { in striped_read()
395 inode->i_size - pos - ret); in striped_read()
412 if (left && hit_stripe && pos < inode->i_size) in striped_read()
419 if (pos + left > inode->i_size) in striped_read()
437 struct inode *inode = file_inode(file); in ceph_sync_read() local
455 ret = filemap_write_and_wait_range(inode->i_mapping, off, in ceph_sync_read()
471 ret = striped_read(inode, off, n, in ceph_sync_read()
489 ret = striped_read(inode, off, len, pages, in ceph_sync_read()
563 struct inode *inode = file_inode(file); in ceph_sync_direct_write() local
564 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_sync_direct_write()
565 struct ceph_fs_client *fsc = ceph_inode_to_client(inode); in ceph_sync_direct_write()
584 ret = filemap_write_and_wait_range(inode->i_mapping, pos, pos + count); in ceph_sync_direct_write()
588 ret = invalidate_inode_pages2_range(inode->i_mapping, in ceph_sync_direct_write()
604 vino = ceph_vino(inode); in ceph_sync_direct_write()
631 truncate_inode_pages_range(inode->i_mapping, pos, in ceph_sync_direct_write()
652 if (pos > i_size_read(inode)) { in ceph_sync_direct_write()
653 check_caps = ceph_inode_set_size(inode, pos); in ceph_sync_direct_write()
655 ceph_check_caps(ceph_inode(inode), in ceph_sync_direct_write()
680 struct inode *inode = file_inode(file); in ceph_sync_write() local
681 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_sync_write()
682 struct ceph_fs_client *fsc = ceph_inode_to_client(inode); in ceph_sync_write()
701 ret = filemap_write_and_wait_range(inode->i_mapping, pos, pos + count); in ceph_sync_write()
705 ret = invalidate_inode_pages2_range(inode->i_mapping, in ceph_sync_write()
721 vino = ceph_vino(inode); in ceph_sync_write()
763 req->r_inode = inode; in ceph_sync_write()
781 if (pos > i_size_read(inode)) { in ceph_sync_write()
782 check_caps = ceph_inode_set_size(inode, pos); in ceph_sync_write()
784 ceph_check_caps(ceph_inode(inode), in ceph_sync_write()
811 struct inode *inode = file_inode(filp); in ceph_read_iter() local
812 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_read_iter()
820 inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, inode); in ceph_read_iter()
835 inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, in ceph_read_iter()
846 inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, in ceph_read_iter()
852 inode, ceph_vinop(inode), ceph_cap_string(got), (int)ret); in ceph_read_iter()
868 statret = __ceph_do_getattr(inode, page, in ceph_read_iter()
879 i_size = i_size_read(inode); in ceph_read_iter()
911 inode->i_size); in ceph_read_iter()
940 struct inode *inode = file_inode(file); in ceph_write_iter() local
941 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_write_iter()
943 &ceph_sb_to_client(inode->i_sb)->client->osdc; in ceph_write_iter()
948 if (ceph_snap(inode) != CEPH_NOSNAP) in ceph_write_iter()
951 mutex_lock(&inode->i_mutex); in ceph_write_iter()
954 current->backing_dev_info = inode_to_bdi(inode); in ceph_write_iter()
983 inode, ceph_vinop(inode), pos, count, inode->i_size); in ceph_write_iter()
995 inode, ceph_vinop(inode), pos, count, ceph_cap_string(got)); in ceph_write_iter()
1000 mutex_unlock(&inode->i_mutex); in ceph_write_iter()
1010 inode, ceph_vinop(inode), in ceph_write_iter()
1012 mutex_lock(&inode->i_mutex); in ceph_write_iter()
1018 loff_t old_size = inode->i_size; in ceph_write_iter()
1029 if (inode->i_size > old_size) in ceph_write_iter()
1030 ceph_fscache_update_objectsize(inode); in ceph_write_iter()
1031 mutex_unlock(&inode->i_mutex); in ceph_write_iter()
1041 __mark_inode_dirty(inode, dirty); in ceph_write_iter()
1045 inode, ceph_vinop(inode), pos, (unsigned)count, in ceph_write_iter()
1060 mutex_unlock(&inode->i_mutex); in ceph_write_iter()
1071 struct inode *inode = file->f_mapping->host; in ceph_llseek() local
1074 mutex_lock(&inode->i_mutex); in ceph_llseek()
1077 ret = ceph_do_getattr(inode, CEPH_STAT_CAP_SIZE, false); in ceph_llseek()
1086 offset += inode->i_size; in ceph_llseek()
1102 if (offset >= inode->i_size) { in ceph_llseek()
1108 if (offset >= inode->i_size) { in ceph_llseek()
1112 offset = inode->i_size; in ceph_llseek()
1116 offset = vfs_setpos(file, offset, inode->i_sb->s_maxbytes); in ceph_llseek()
1119 mutex_unlock(&inode->i_mutex); in ceph_llseek()
1124 struct inode *inode, loff_t offset, unsigned size) in ceph_zero_partial_page() argument
1129 page = find_lock_page(inode->i_mapping, index); in ceph_zero_partial_page()
1138 static void ceph_zero_pagecache_range(struct inode *inode, loff_t offset, in ceph_zero_pagecache_range() argument
1146 ceph_zero_partial_page(inode, offset, size); in ceph_zero_pagecache_range()
1152 truncate_pagecache_range(inode, offset, offset + size - 1); in ceph_zero_pagecache_range()
1157 ceph_zero_partial_page(inode, offset, length); in ceph_zero_pagecache_range()
1160 static int ceph_zero_partial_object(struct inode *inode, in ceph_zero_partial_object() argument
1163 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_zero_partial_object()
1164 struct ceph_fs_client *fsc = ceph_inode_to_client(inode); in ceph_zero_partial_object()
1178 ceph_vino(inode), in ceph_zero_partial_object()
1189 ceph_osdc_build_request(req, offset, NULL, ceph_vino(inode).snap, in ceph_zero_partial_object()
1190 &inode->i_mtime); in ceph_zero_partial_object()
1204 static int ceph_zero_objects(struct inode *inode, loff_t offset, loff_t length) in ceph_zero_objects() argument
1207 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_zero_objects()
1221 ret = ceph_zero_partial_object(inode, offset, &size); in ceph_zero_objects()
1231 ret = ceph_zero_partial_object(inode, pos, NULL); in ceph_zero_objects()
1241 ret = ceph_zero_partial_object(inode, offset, &size); in ceph_zero_objects()
1254 struct inode *inode = file_inode(file); in ceph_fallocate() local
1255 struct ceph_inode_info *ci = ceph_inode(inode); in ceph_fallocate()
1257 &ceph_inode_to_client(inode)->client->osdc; in ceph_fallocate()
1267 if (!S_ISREG(inode->i_mode)) in ceph_fallocate()
1270 mutex_lock(&inode->i_mutex); in ceph_fallocate()
1272 if (ceph_snap(inode) != CEPH_NOSNAP) { in ceph_fallocate()
1289 size = i_size_read(inode); in ceph_fallocate()
1304 ceph_zero_pagecache_range(inode, offset, length); in ceph_fallocate()
1305 ret = ceph_zero_objects(inode, offset, length); in ceph_fallocate()
1307 truncate_pagecache_range(inode, size, -1); in ceph_fallocate()
1308 if (ceph_inode_set_size(inode, endoff)) in ceph_fallocate()
1309 ceph_check_caps(ceph_inode(inode), in ceph_fallocate()
1319 __mark_inode_dirty(inode, dirty); in ceph_fallocate()
1324 mutex_unlock(&inode->i_mutex); in ceph_fallocate()