]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: request larger max_size when needed (not done yet)
authorSage Weil <sage@newdream.net>
Thu, 10 Apr 2008 00:31:00 +0000 (17:31 -0700)
committerSage Weil <sage@newdream.net>
Thu, 10 Apr 2008 00:31:00 +0000 (17:31 -0700)
src/kernel/inode.c
src/kernel/mds_client.c
src/kernel/super.h
src/start.sh

index 95abfb18fd54335ab94f566e7e736523a5ba63a5..a1eb98fa9594152a9d0d3e072e0cff63ab4abf3c 100644 (file)
@@ -834,7 +834,7 @@ retry:
 
                ceph_mdsc_send_cap_ack(mdsc, ceph_ino(&ci->vfs_inode), 
                                       keep, wanted, seq, 
-                                      size, max_size, &mtime, &atime, mds);
+                                      size, 0, &mtime, &atime, mds);
 
                if (dropping & CEPH_CAP_RDCACHE) {
                        dout(20, "invalidating pages on %p\n", &ci->vfs_inode);
@@ -999,6 +999,7 @@ int ceph_handle_cap_grant(struct inode *inode, struct ceph_mds_file_caps *grant,
                        cap->implemented = newcaps;
                        /* ack now.  re-use incoming message. */
                        grant->size = le64_to_cpu(inode->i_size);
+                       grant->max_size = 0;  /* don't re-request */
                        ceph_encode_timespec(&grant->mtime, &inode->i_mtime);
                        ceph_encode_timespec(&grant->atime, &inode->i_atime);
                        reply = 1; 
@@ -1094,8 +1095,13 @@ int ceph_get_cap_refs(struct ceph_inode_info *ci, int need, int want, int *got,
             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 (offset > (ci->vfs_inode.i_size << 1)) {
+                       dout(20, "get_cap_refs offset %llu >= max_size %llu\n",
+                            offset, ci->i_max_size);
+                       
+               } else 
+                       dout(20, "get_cap_refs offset %llu >= max_size %llu\n",
+                            offset, ci->i_max_size);
                goto sorry;
        }
        have = __ceph_caps_issued(ci);
index 22e3f461ef5c61bddd992845ce6d7c0cd829c467..c34b7afe6372cc1ddf30134f479741df282e99ac 100644 (file)
@@ -1327,7 +1327,7 @@ void ceph_mdsc_handle_filecaps(struct ceph_mds_client *mdsc,
                dout(10, "wtf, i don't have ino %lu=%llx?  closing out cap\n",
                     inot, ino);
                ceph_mdsc_send_cap_ack(mdsc, ino, 0, 0, seq, 
-                                      size, max_size, 0, 0, mds);
+                                      size, 0, 0, 0, mds);
                return;
        }
 
index e664b8ae1c414e7055231d3ce769382269a8b737..622cae935b86f1aba7f2ed9fdf2a3af6f7aa193f 100644 (file)
@@ -157,7 +157,7 @@ struct ceph_inode_info {
 
        int i_nr_by_mode[4];
        loff_t i_max_size;      /* size authorized by mds */
-       loff_t i_reported_size; /* size we're reported to mds(s) */
+       loff_t i_reported_size; /* (max_)size reported to or requested of mds */
        struct timespec i_old_atime;
 
        /* held references to caps */
index 224ef50c9bef334414c35eb052bf21f3fd644a8d..3626175f0ca76e1492a4d90164198db4e23db220 100755 (executable)
@@ -43,7 +43,7 @@ do
 done
 
 # mds
-$CEPH_BIN/cmds $ARGS --debug_mds 20 --debug_timer 50 --debug_ms 20 --debug 50
+$CEPH_BIN/cmds $ARGS --debug_mds 20 --debug_ms 1
 
 echo "started.  stop.sh to stop.  see out/* (e.g. 'tail -f out/????') for debug output."