]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: fix up write endoff vs max_size logic
authorSage Weil <sage@newdream.net>
Mon, 28 Apr 2008 20:41:13 +0000 (13:41 -0700)
committerSage Weil <sage@newdream.net>
Mon, 28 Apr 2008 20:41:13 +0000 (13:41 -0700)
src/kernel/file.c
src/kernel/inode.c

index 95b0f86716c838dde11a98213c1dfeccb43b44c4..a40342cd97621afc646ca2d604c2d4c0febd0783 100644 (file)
@@ -283,15 +283,16 @@ ssize_t ceph_write(struct file *filp, const char __user *buf,
        ssize_t ret;
        int got = 0;
        int check = 0;
+       loff_t endoff = *ppos + len;
 
        /* do we need to explicitly request a larger max_size? */
        spin_lock(&inode->i_lock);
-       if (*ppos > ci->i_max_size &&
-           *ppos > (inode->i_size << 1) &&
-           *ppos > ci->i_wanted_max_size) {
-               dout(10, "write %p at large offset %llu, requesting max_size\n",
-                    inode, *ppos);
-               ci->i_wanted_max_size = *ppos+len;
+       if (endoff >= ci->i_max_size &&
+           endoff > (inode->i_size << 1) &&
+           endoff > ci->i_wanted_max_size) {
+               dout(10, "write %p at large endoff %llu, req max_size\n",
+                    inode, endoff);
+               ci->i_wanted_max_size = endoff;
                check = 1;
        }
        spin_unlock(&inode->i_lock);
index 841e730b1225e61d4b11cc2c1eab1a1967beff07..3bf903ddca0c7e5bb7e300b701b0537b873b5708 100644 (file)
@@ -1163,7 +1163,7 @@ void ceph_take_cap_refs(struct ceph_inode_info *ci, int got)
 }
 
 int ceph_get_cap_refs(struct ceph_inode_info *ci, int need, int want, int *got,
-                     loff_t offset)
+                     loff_t endoff)
 {
        int ret = 0;
        int have;
@@ -1171,9 +1171,9 @@ int ceph_get_cap_refs(struct ceph_inode_info *ci, int need, int want, int *got,
        dout(30, "get_cap_refs on %p need %d want %d\n", &ci->vfs_inode,
             need, want);
        spin_lock(&ci->vfs_inode.i_lock);
-       if (offset >= 0 && offset >= (loff_t)ci->i_max_size) {
-               dout(20, "get_cap_refs offset %llu >= max_size %llu\n",
-                    offset, ci->i_max_size);
+       if (endoff >= 0 && endoff > (loff_t)ci->i_max_size) {
+               dout(20, "get_cap_refs endoff %llu > max_size %llu\n",
+                    endoff, ci->i_max_size);
                goto sorry;
        }
        have = __ceph_caps_issued(ci);