ceph_put_fmode(ceph_inode(inode), fmode); /* clean up */
return -ENOMEM;
}
- cf->mode = fmode;
+ cf->fmode = fmode;
file->private_data = cf;
return 0;
}
return ceph_init_file(inode, file, fmode);
}
spin_unlock(&inode->i_lock);
- dout(10, "open fmode %d, don't have caps %d\n", fmode, wantcaps);
+ dout(10, "open fmode %d, don't have caps %s\n", fmode,
+ ceph_cap_string(wantcaps));
dentry = d_find_alias(inode);
if (!dentry)
struct ceph_file_info *cf = file->private_data;
dout(5, "release inode %p file %p\n", inode, file);
-
- /*
- * MYSTERY: why is file->f_flags now different than
- * file->f_flags (actually, nd->intent.open.flags) on
- * open? e.g., on ceph_lookup_open,
- * ceph_file: opened 000000006fa3ebd0 flags 0101102 mode 2 nr now 1.\
- * wanted 0 -> 30
- * and on release,
- * ceph_file: released 000000006fa3ebd0 flags 0100001 mode 3 nr now \
- * -1. wanted 30 was 30
- *
- * Huh. Well, for now, store the open mode in ceph_file_info.
- */
-
- ceph_put_fmode(ci, cf->mode);
+ ceph_put_fmode(ci, cf->fmode);
if (cf->last_readdir)
ceph_mdsc_put_request(cf->last_readdir);
kfree(cf->dir_info);
spin_lock(&ci->vfs_inode.i_lock);
dout(20, "put_mode %p fmode %d %d -> %d\n", &ci->vfs_inode, fmode,
ci->i_nr_by_mode[fmode], ci->i_nr_by_mode[fmode]-1);
- WARN_ON(ci->i_nr_by_mode[fmode] == 0);
+ BUG_ON(ci->i_nr_by_mode[fmode] == 0);
if (--ci->i_nr_by_mode[fmode] == 0)
last++;
spin_unlock(&ci->vfs_inode.i_lock);
* keep readdir buffers attached to file->private_data
*/
struct ceph_file_info {
- int mode; /* initialized on open */
+ int fmode; /* initialized on open */
u32 frag; /* one frag at a time; screw seek_dir() on large dirs */
struct ceph_mds_request *last_readdir;