]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/fs.c
Update bcachefs sources to 841a95c29f4c bcachefs: fix userspace build errors
[bcachefs-tools-debian] / libbcachefs / fs.c
index 0d0a37cad2d42b25433cd15b43bb52100244e9ee..f6ea5ae626b5d09ead7aabd5454c2f84f14a6c2d 100644 (file)
@@ -1143,24 +1143,33 @@ static int bch2_encode_fh(struct inode *vinode, u32 *fh, int *len,
 {
        struct bch_inode_info *inode    = to_bch_ei(vinode);
        struct bch_inode_info *dir      = to_bch_ei(vdir);
-
-       if (*len < sizeof(struct bcachefs_fid_with_parent) / sizeof(u32))
-               return FILEID_INVALID;
+       int min_len;
 
        if (!S_ISDIR(inode->v.i_mode) && dir) {
                struct bcachefs_fid_with_parent *fid = (void *) fh;
 
+               min_len = sizeof(*fid) / sizeof(u32);
+               if (*len < min_len) {
+                       *len = min_len;
+                       return FILEID_INVALID;
+               }
+
                fid->fid = bch2_inode_to_fid(inode);
                fid->dir = bch2_inode_to_fid(dir);
 
-               *len = sizeof(*fid) / sizeof(u32);
+               *len = min_len;
                return FILEID_BCACHEFS_WITH_PARENT;
        } else {
                struct bcachefs_fid *fid = (void *) fh;
 
+               min_len = sizeof(*fid) / sizeof(u32);
+               if (*len < min_len) {
+                       *len = min_len;
+                       return FILEID_INVALID;
+               }
                *fid = bch2_inode_to_fid(inode);
 
-               *len = sizeof(*fid) / sizeof(u32);
+               *len = min_len;
                return FILEID_BCACHEFS_WITHOUT_PARENT;
        }
 }
@@ -1733,6 +1742,9 @@ static int bch2_unfreeze(struct super_block *sb)
        struct bch_fs *c = sb->s_fs_info;
        int ret;
 
+       if (test_bit(BCH_FS_emergency_ro, &c->flags))
+               return 0;
+
        down_write(&c->state_lock);
        ret = bch2_fs_read_write(c);
        up_write(&c->state_lock);